Читайте также: |
|
При создании иерархии классов может обнаружиться, что некоторые свойства объектов, сохраняя название, изменяются по сути.
Для реализации таких иерархий в языке программирования должен быть предусмотрен полиморфизм, обеспечивающий возможность задания различных реализаций некоторого единого по названию метода для классов различных уровней иерархии. В ООП такой полиморфизм называется простым, а методы, имеющие одинаковое название - статическими полиморфными. Совокупность полиморфных методов с одним именем для иерархии классов образует единый полиморфный метод иерархии, в котором реализация полиморфного метода для конкретного класса представляет отдельный аспект.
Термин «полиморфизм» в программировании, в соответствии со своим изначальным смыслом («многообразие»), используется для обозначения встроенного механизма определения соответствия мода функции типу параметров. Такой механизм реализуется не только в средствах ООП.
Различают несколько терминов, связанных с конкретными механизмами реализации полиморфизма для различных случаев:
· чистый полиморфизм - используется для обозначения того, что один код функции может по-разному интерпретироваться в зависимости от типа аргументов; используется в языках высокого уровня абстракции, например, в языке LISP или SMALLTALK;
· перегрузка {полиморфные имена функций) - используется, когда определяется несколько функций с одним именем - одно и то же имя функции может многократно использоваться в разных местах программы; выбор нужной функции может определять типами аргументов, областью видимости (внутри модуля, файла, класса и т.д.); если выбор определяется типом аргументов, то перегрузка называется параметрической; (например, язык C++ позволяет разработчику выполнять параметрическую перегрузку функций вне классов);
· переопределение (простой полиморфизм) - используется в ООП при наличии различных определений методов в иерархии классов, конкретный метод определяется типом объекта при компиляции программы – раннее связывание, методы называются статическими полиморфными;
· полиморфные объекты (сложный полиморфизм) - используются в ООП при наличии различных определений методов в иерархии классов - конкретный метод также определяется типом объекта, но в процессе выполнения программы – позднее связывание, методы называются виртуальными полиморфными (рассмотрены далее);
· обобщенные функции или шаблоны - используются в ООП при реализации в языке параметризованных классов (например, в C++), параметрами такого класса являются типы аргументов методов класса (рассмотрены далее).
Пример
Простой полиморфизм (класс Окно_с_текстом). Пусть необходимо разработать на базе класса «Окно» класс «Окно_с_текстом». Для этого к полям класса «Окно» необходимо добавить специальные поля для определения координат первой буквы текста - Xt, Yt и поле, содержащее сам текст - Text. Кроме этого, понадобится специальный метод, который будет обрабатывать сообщение «Нарисовать». Однако у нас уже существует родительский метод «Изобразить», который обрабатывает это сообщение. Следовательно, необходимо заменить родительский метод методом потомка. Механизм полиморфизма позволяет для класса-потомка «Окно_с_текстом» предусмотреть собственный метод «Изобразить» (рис.).
Метод «Инициализировать» также должен быть переопределен, так как он должен инициализировать дополнительные поля класса.
Класс Окно_с_текстом – родитель: класс Окно:
Дата добавления: 2015-09-06; просмотров: 410 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Конец описания. | | | Конец описания. |