Учебное пособие по дисциплине Разработка языков программирования высокого уровня
Скачать 1.74 Mb.
|
5.4 Концепция связывания в ООП. Полиморфизм.В ООП под связыванием понимается, прежде всего, связывание сообщения с определением метода (обращение к методу). При этом возможны два варианта -статическое связывание (см. пример выше) a) obj. init ( ); б) a. qput (7); -динамическое связывание, которое реализуется посредством: а) механизмов настраиваемых подпрограмм (см. главу 4), б) полиморфных переменных. Полиморфная переменная- это переменная типа суперкласса (базового класса), которая используется в потомке (подклассе) для обращения к замещаемым или виртуальным методам. Замещаемый метод- это модифицированный в потомке метод суперкласса, который имеет то же самое имя и часто тот же самый протокол, что и метод, модификацией которого он является. <имя метода> <протокол>= <имя старого метода> <протокол старого метода>; Виртуальный метод - это метод, прототип которого (часто без определения) включен в суперкласс (в предка), а определение в переопределение, т.е. описание тела метода, содержатся в потомках. При этом прототипы методов в разных потомках одинаковы. Если прототипы методов различны, то механизм виртуальности не включается. При этом объекты предка не могут создаваться, если виртуальный метод чистый, т.к. предок не будет содержать тела виртуального метода. Формат описания виртуального метода следующий: Virtual <тип> <имя метода> [;=0] [{ . . . }];. Такие замещаемые или виртуальные методы вызываются через полиморфную переменную и этот вызов динамически связывается с определением метода в соответствующем потомке (рис.5.4,5.5). Полиморфная переменная определяется через указатель на базовый класс и ссылку. Таким образом, полиморфная переменная-это своеобразный параметр, через который в разные моменты времени можно обращаться к методам разных потомков: <п/п> <- <метод потомка 1> . . . . . . . . . . <п/п> <- <метод потомка 2> Рисунок 5.4 Схема обращения к виртуальному методу Рисунок 5.5 Схема обращения к замещаемому методу Далее рассматривается пример, демонстрирующий механизм использования чистого виртуального метода, а в качестве полиморфной переменной берется указатель. Пример 3. объявлен абстрактный класс C lass figure { Protected : float x,y ; Virtual void show_fig ( )=0;} Class triangle : public figure { Public void show_fig ( ){ Count << “это треугольник”\n”;} Class rectangle : public figure { Public void show_fig ( ){ Count << “это прямоугольник”n\”;} Class circle:public figure { Public void show_fig ( ){ Count<< “это окружность”\n”;} Main ( );{ Figure *p; // указатель на базовый тип Tringle t; // создание объекта треугольник Rectangle s; // создание объекта прямоугольник Circle c; // создание объекта окружность P =&t; p->show_fig ( ) // “это треугольник” осуществляется динамическое связывание с виртуальным методом p=&s p->show_fig ( ) // ”это прямоугольник” p=&c; p->show_fig ( ) // ”это окружность” } Контрольные вопросы: 1.Какие идеи положены в основу объектно-ориентированного программирования? 2. Что такое инкапсуляция? 3. В чем заключается система безопасности сущностей в инкапсуляции? 4.Какие идеи привели к создания абстрактного типа данных? 5. Дать определение абстрактного типа данных 6. В чем заключается концепция наследования в объектно-ориентированном программировании? 7. Какие виды полиморфизма существуют в языках программирования высокого уровня? 8. В чем заключается идея динамического связывания в объектно-ориентированном программировании? 9. Привести структуру класса. 10. Дать понятие объекта, метода, свойства. 11. Понятие конструктора и деструктора объекта. |