Принципы построения классов. Полиморфизм

   
На этом шаге мы рассмотрим понятие полиморфизма.

   
Полиморфизм - это третий принцип, лежаший в основе создания класса. При полиморфизме
(дословно: многоформие) родственные объекты (т. е. происходящие от общего родителя) могут вести
себя по-разному в зависимости от ситуации, возникающей в момент выполнения программы. Чтобы добиться полиморфизма,
надо иметь возможность один и тот же метод в классе-родителе переопределить в классе-потомке.

   
Например, все классы имеют общего прародителя - класс Object. В этом классе определен метод draw (рисовать фигуру).
Классы, рисующие различные фигуры и произошедшие от Object, - родственные классы. Каждый них определяет
рисование своей фигуры методом draw, унаследованным от Object: точку, линию, прямоугольник, окружность
и т. д. Но все фигуры разные, хотя метод общий. Но этот метод draw в каждом
из классов-потомков переопределен, т. е. в каждом классе-потомке ему назначена другая функциональность.

   
Полиморфизм достигается за счет того, что методам из класса-родителя позволено выполняться в классе-потомке,
а там оставляют только его имя, но при этом дают ему необходимую для данного класса функциональность. Такие методы
должны объявляться в обоих классах с атрибутом virtual, записываемым перед атрибутом
"возвращаемый тип данных". Если функция имеет атрибут virtual, то она может быть переопределена
в классе-потомке даже если количество и тип ее аргументов такие же, что и у функции базового класса. Переопределенная
функция отменяет вызов функции базового класса.

   
Кроме атрибута virtual, у методов существует атрибут friend. Методы с таким атрибутом, расположенным
(как и атрибут virtual) в объявлении метода перед указанием типа возвращаемых данных, называются дружественными.
Метод, объявленный с атрибутом friend, имеет полный доступ к членам класса, расположенным в секциях private и protected,
даже если эте метод - не член этого класса. Это справедливо и для классов: внешний класс (т. е. его методы) имеет полный
доступ к классу, который объявляет этот внешний класс дружественным.

   
Во всех остальных аспектах дружественный метод - это обычный метод. Подобные методы из внешних классов, имея
доступ к секциям private и protected, могут решать задачи, реализация которых с помощью методов
членов данного класса затруднительна или даже невозможна.

   
На следующем шаге мы рассмотрим примеры программ, использующих классы.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий