Объектно-ориентированное программирование



         

Объектно-ориентированное программирование - стр. 84


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

Необходимость применении виртуальных методов возникает, если существует набор классов, обладающих схожими по смыслу методами, различающимися лишь реализацией (методы А), и если существуют идентичные по реализации методы, использующие методы А (методы Б).

В этом случае описывается базовый класс, для которого описывается виртуальные методы А. Как правило, методы А не конкретизируются (ставятся заглушки). После этого описываются методы Б, использующие методы А базового класса. Затем описываются классы, в которых методы А конкретизируются.

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

Проиллюстрируем все это на примере графических объектов. Опишем класс

GraphicsObject. Это класс имеет методы Build- построить, Display- показать, Hid- скрыть, Move- переместить. Идея этого класса заключается в том, чтобы можно было перемещать графическое изображение по экрану не измения его содержимого.

Метод Display запоминает изображение в некоторой области памяти и вызывает метод Build, который в этой области строит новое изображение. Метод Hid скрывает изображение, построенное методом Build, восстанавливая то изображение, которое запомнил метод Display. Наконец, метод Move вызывает метод Hid, чтобы скрыть старое изображение, и метод Display, чтобы построить его на новом месте.

Объявим метод Build виртуальным. Опишем теперь двух потомков класса GraphicsObject- Circle- имеет метод Build, который строит окружность.


Содержание  Назад  Вперед