Borland Pascal. Руководство пользователя

       

Виртуальные методы и полиморфизм


Обсуждаемые до сих пор методы являются статическими. Они яв- ляются статическими в том же смысле, в каком статической является статическая переменная: компилятор размещает ее и разрешает все ссылки на нее во время компиляции. Как вы видели, объекты и ста- тические методы могут быть мощным инструментом для составления сложных программ.

Однако иногда это не лучший способ для управления методами.

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

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

Уже описанная простая иерархия крылатых насекомых являет со- бой хороший пример полиморфизма в действии, предоставляемого пос- редством виртуальных методов.

Каждый тип объекта в нашей иерархии представляет отдельный тип фигуры на экране: крылатое насекомое или пчелу. Определенно, имеет смысл сказать, что вы можете показать на экране точку или окружность. Позднее, если вам понадобится определить объекты для представления на экране других типов крылатых насекомых, таких как мотыльки, стрекозы, бабочки и т.д., вы могли бы написать ме- тод для каждого из них, который будет выводить объект на экран. В новых терминах объектно-ориентированного программирования вы мог- ли бы сказать, что все эти типы крылатых насекомых имеют способ- ность показать самих себя на экране. Это большая часть из того, что является для них общим.

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

Это были примеры полиморфизма, а виртуальными методами явля- ется то, что реализует его в Borland Pascal.



Содержание раздела