Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 61 стр.

UptoLike

60
Аналогичная структура программного кода (использование оператора
switch) будет использоваться во всех методах класса Function.
Недостатком этой структуры является необходимость внесения изменений во
все методы класса, если добавляется новый тип функции или удаляется
имеющийся. Если типов функций будет много, то методы становятся
объемными и трудно читаемыми.
Еще одним недостатком является наличие неиспользуемых
переменных класса Function. Например, для задания линейной функции
достаточно использовать переменные typeFunction, a и b, а переменные
p, x0 и y0 будут определены, но их значения игнорируются. Подобного
неэффективного использования памяти следует избегать.
5.2. Иерархия классов кривых 1-ого и 2-ого
порядков
Определить функции можно, используя другую структуру классов,
которая не приводит к изменению уже написанного кода при добавлении
нового типа функции и хранит для каждого типа функции столько
параметров, сколько необходимо для ее задания. В этом случае используются
принципы наследования и полиморфизма.
Для каждого типа функции задается собственный класс, например,
Line, Ellipse, Hyperbola, Parabola. Все эти классы обладают
одинаковым поведением должно вычисляться значение функции, нужно
вводить параметры функции и выводить представление функции на экран.
Поэтому можно эти методы определить в отдельном классе Function,
родительском для классов различных типов функций. Поскольку
родительский класс «не знает», какая функция вычисляется, как ее
распечатать, какие параметры ее определяют, все эти методы должны быть
абстрактными или не иметь какой-либо содержательной обработки.
Соответственно, класс Function должен быть абстрактным:
// класс, задающий функцию в левой части ограничения
abstract class Function
{
// абстрактный метод вычисления функции
public abstract double Сalculate(double x, double y);
// виртуальный метод ввода параметров функции
public virtual void Input()
     Аналогичная структура программного кода (использование оператора
switch) будет использоваться во всех методах класса Function.
Недостатком этой структуры является необходимость внесения изменений во
все методы класса, если добавляется новый тип функции или удаляется
имеющийся. Если типов функций будет много, то методы становятся
объемными и трудно читаемыми.
     Еще одним недостатком является наличие неиспользуемых
переменных класса Function. Например, для задания линейной функции
достаточно использовать переменные typeFunction, a и b, а переменные
p, x0 и y0 будут определены, но их значения игнорируются. Подобного
неэффективного использования памяти следует избегать.


            5.2. Иерархия классов кривых 1-ого и 2-ого
                                            порядков

     Определить функции можно, используя другую структуру классов,
которая не приводит к изменению уже написанного кода при добавлении
нового типа функции и хранит для каждого типа функции столько
параметров, сколько необходимо для ее задания. В этом случае используются
принципы наследования и полиморфизма.
     Для каждого типа функции задается собственный класс, например,
Line, Ellipse, Hyperbola, Parabola. Все эти классы обладают
одинаковым поведением – должно вычисляться значение функции, нужно
вводить параметры функции и выводить представление функции на экран.
Поэтому можно эти методы определить в отдельном классе Function,
родительском для классов различных типов функций. Поскольку
родительский класс «не знает», какая функция вычисляется, как ее
распечатать, какие параметры ее определяют, все эти методы должны быть
абстрактными или не иметь какой-либо содержательной обработки.
Соответственно, класс Function должен быть абстрактным:

   // класс, задающий функцию в левой части ограничения
   abstract class Function
   {
      // абстрактный метод вычисления функции
      public abstract double Сalculate(double x, double y);
      // виртуальный метод ввода параметров функции
      public virtual void Input()
                                                                       60