Объектно-ориентированное программирование на С#. Андрианова А.А - 105 стр.

UptoLike

105
Equation e = new Equation();
// обращение к виртуальному методу базового класса
e.Solve();
// создание объекта класса Equation_2
e = Equation.CreateEquation(1, -4, 4);
// вызов вирутального метода решения
// квадратного уравнения из класса Equation_2
e.Solve();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
Рис.6.4. Результат работы программы решения уравнений
с созданием иерархии классов
В результате работы программного кода, приведенного в качестве
примера, первое сообщение соответствует выполнению метода Solve()
базового класса, поскольку объект для конкретного типа уравнения еще не
создан и решать пока нечего. Далее, анализируя коэффициенты уравнения с
помощью метода CreateEquation(), создается объект типа Equation_2
и производится решение уравнения, после чего результат выводится на
экран. В этом случае выполняются переопределенные методы Solve() и
PrintSolution() класса Equation_2.
Приведенный пример показывает, что возникают случаи, когда
использование объекта базового класса несущественно, но выделение общего
поведения желательно. В этих ситуациях можно выделить базовый класс,
который определяет некоторое абстрактное понятие с абстрактным
поведением. Такие классы называют абстрактными.
Поскольку поведение этих классов определить невозможно,
виртуальные функции только объявляются в классе, но не определяются.
             Equation e = new Equation();
             // обращение к виртуальному методу базового класса
             e.Solve();
             // создание объекта класса Equation_2
             e = Equation.CreateEquation(1, -4, 4);
             // вызов вирутального метода решения
             // квадратного уравнения из класса Equation_2
             e.Solve();
          }
          catch (Exception ex)
          {
             Console.WriteLine(ex.Message);
          }
      }
  }




          Рис.6.4. Результат работы программы решения уравнений
                        с созданием иерархии классов

      В результате работы программного кода, приведенного в качестве
примера, первое сообщение соответствует выполнению метода Solve()
базового класса, поскольку объект для конкретного типа уравнения еще не
создан и решать пока нечего. Далее, анализируя коэффициенты уравнения с
помощью метода CreateEquation(), создается объект типа Equation_2
и производится решение уравнения, после чего результат выводится на
экран. В этом случае выполняются переопределенные методы Solve() и
PrintSolution() класса Equation_2.
      Приведенный пример показывает, что возникают случаи, когда
использование объекта базового класса несущественно, но выделение общего
поведения желательно. В этих ситуациях можно выделить базовый класс,
который определяет некоторое абстрактное понятие с абстрактным
поведением. Такие классы называют абстрактными.
      Поскольку поведение этих классов определить невозможно,
виртуальные функции только объявляются в классе, но не определяются.


                                                                     105