Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Компоненты и область действия

Область действия идентификатора компоненты простирается за

пределы объектного типа. Более того, область действия идентифика-

тора компонента простирается сквозь блоки процедур, функций,

конструкторов и деструкторов, которые реализуют методы объектного

типа и его наследников. Исходя из этих соображений, написание

идентификатора компоненты должно быть уникальным внутри объектно-

го типа и внутри всех его наследников, а также внутри всех его

методов.

Область действия идентификатора компонента, описанного в

части private описания типа, ограничивается модулем (программой),

которая содержит описание объектного типа. Другими словами, част-

ные (private) компоненты-идентификаторы действуют, как обычные

общедоступные идентификаторы в рамках модуля, который содержит

описание объектного типа, а вне модуля любые частные компоненты и

идентификаторы неизвестны и недоступны. Поместив в один модуль

связанные типы объектов, можно сделать так, что эти объекты смо-

гут обращаться к частным компонентам друг друга, и эти частные

компоненты будут неизвестны другим модулям.

В описании объектного типа заголовок метода может задавать

параметры описываемого объектного типа, даже если описание еще не

полное. Это иллюстрируется методами Copy, Intersect и Union типа

TRectange в предыдущем примере.

Методы

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

жающему описанию метода (forward). Таким образом, где-нибудь пос-

ле описания объектного типа, но внутри той же самой области дейс-

твия, что и область действия описания объектного типа, метод дол-

жен реализоваться путем определения его описания.

Если требуется уникальный идентификатор метода, то использу-

ется уточненный идентификатор метода. Он состоит из идентификато-

ра типа объекта, за которым следуют точка и идентификатор метода.

Как и любому другому идентификатору, идентификатору уточненного

метода, если требуется, могут предшествовать идентификатор пакета

и точка.

уточненный идентификатор метода

¦ ------------------------------ ---- ---------------------

L->¦идентификатор объектного типа+>¦ . +>¦идентификатор метода+>

L------------------------------ L---- L---------------------

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

По умолчанию, методы являются статическими, однако они мо-

гут, за исключением конструкторов, быть виртуальными (посредством

включения директивы virtual в описание метода). Компилятор разре-

шает ссылки на вызовы статических методов во время процесса ком-

пиляции, тогда как вызовы виртуальных методов разрешаются во вре-

мя выполнения. Это иногда называют поздним связыванием.

Если объектный тип объявляет или наследует какой-либо вирту-

альный метод, то переменные этого типа должны быть инициализиро-

ваны посредством вызова конструктора перед вызовом любого вирту-

ального метода. Таким образом, объектный тип, который описывает

или наследует виртуальный метод, должен также описывать или нас-

ледовать по крайней мере один метод-конструктор.

Объектный тип может переопределять любой из методов, которые

он наследует от своих родителей. Если описание метода в потомке

указывает тот же идентификатор метода, что и описание метода в

родителе, то описание в потомке переопределяет описание в родите-

ле. Область действия переопределяющего метода расширяется до сфе-

ры действия потомка, в котором этот метод был введен, и будет ос-

таваться таковой, пока идентификатор метода не будет переопреде-

лен снова.

Переопределение статического метода не зависит от изменения

заголовка метода. В противоположность этому, переопределение вир-

туального метода должно сохранять порядок, типы и имена парамет-

ров, а также типы результатов функций, если таковые имеются. Бо-

лее того, переопределение опять же должно включать директиву

virtual.

Соседние файлы в предмете Программирование на Pascal