Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШПОРЫ - ПРОГРАММИРОВАНИЕ СУПЕР.rtf
Скачиваний:
9
Добавлен:
25.09.2019
Размер:
1.21 Mб
Скачать

13. Наследование и переопределение в объектовых типах

НАСЛЕДОВАНИЕ есть свойство объектов порождать своих потомков. Объект­ потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы роди­теля или дополнять их.

ПЕРЕОПРЕДЕЛЕНИЕ МЕТОДА – возможность определить новые методы со старыми именами; метод подкласса имеет приоритет по сравнению с методом надкласса.

14. Виртуальные методы в объектах

Концепция ВИРТУАЛЬНЫХ МЕТОДОВ, поддерживаемая этими и другими современными языками, появилась как средство обеспечить выполнение нужных методов при использовании полиморфных переменных, то есть, по сути, как попытка расширить возможности вызова методов для реализации части функциональности, обеспечиваемой механизмом обработки сообщений. Для того, чтобы определить виртуальный метод, необходимо указать после его заголовка в объектовом типе служебное слово virtual. При этом во всех потомках объектового типа одноименные (переопределяющие) методы должны также специфицироваться как виртуальные; кроме того, все они должны иметь точно такой же набор формальных параметров, что и самый первый виртуальный метод. Возвращаясь к нашему примеру, можно следующим образом определить типы Point и circle (несущественные для рассмотрения поля и методы заменены многоточиями):

type

Point = object

constructor Create ( a,b:integer ); procedure SwitchOn; virtual;

procedure SwitchOff; virtual;

procedure Move ( dx,dy:integer );

Circle = object (Point)

constructor Create ( a,b,R:integer ); procedure SwitchOn; virtual; procedure SwitchOff; virtual-end;

15. Конструкторы и деструкторы

Конструкторы предназначены для создания конкретного экзем­пляра объекта, ведь объект ­ это тип данных, т. е. "шаблон", по которому можно создать сколько угодно рабочих экземпляров данных объектного ти­па (подобных TGraphObj, например). Зарезервированное слово constructor, используется в заголовке конструктора вместо procedure. Если в объекте нет

виртуальных методов, в нем может не быть ни одноrо конструктора, наобо­рот, если хотя бы один метод описан как виртуальный (с последующим сло­вом virtual), в состав объекта должен входить хотя бы один конструктор и обращение к конструктору должно предшествовать обраще­нию к любому виртуальному методу.

Описание:

type

TGraphObj = object

­_end;

­_Constructor TGraphObj.Init;

begin

х = аХ;

­_У := аУ;

Color = aColor

­end;

Процедуру, разрушающую экземпляр объекта, принято называть ДЕСТРУКТОРОМ. Он не связан с какими­-то специфичными действиями: для компилятора слова destructor и procedure ­ синонимы.

16. Скрытые поля и методы

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

type

ObjectType - object

{Обычные поля и методы}

private

{Скрытые поля и методы}

Идентификаторы полей и методов, объявленных как скрытые, считаются известными (доступными, видимыми) ТОЛЬКО в пределах программы или модуля, в которой (в котором) содержится описание данного объектового типа. Вне модуля, содержащего такое описание (например, в программе, использующей этот модуль), скрытые компоненты объектового типа неизвестны и недоступны, в то время как сам объектовый тип и его остальные компоненты считаются известными по обычным правилам.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]