Синтаксис объектов в Turbo Pascal

Обычно в разделе Type объявляется объектный тип, ему присваивается имя, а затем в разделе Var описываются переменные объектного типа. Либо в разделе Type, кроме объектного типа объявляется тип указателя на переменные этого типа, затем в разделе Var объявляются соответствующие указатели, а далее, при работе программы создаются динамические переменные объектного типа, и из этих переменных строятся динамические цепочки.

Конструкция объектного типа похожа на конструкцию типа записей, только в начале конструкции вместо слова Record используется слово Object, а в дополнение к полям данных (называемым в объектах свойствами) описываются заголовки процедур и функций, называемых методами этого объекта. Сами процедуры и функции описываются в другом месте. Заканчивается описание словом end. Как и в стандартном Паскале, описания отделяются одно от другого точкой с запятой. При описании типа объекта- потомка, наследующего свойства и методы другого объекта – предка, нужно указать этого предка. Делается это в скобках после слова Object.

В объекте, использующем виртуальные методы, после заголовков этих методов указывается ключевое слово virtual. В таких объектах должен присутствовать хотя бы один специальный метод, называемый конструктором. Конструкторы не могут быть виртуальными. Также при необходимости в объект включаются специальные методы, называемые деструкторами. Деструкторы могут быть виртуальными и не являются обязательными. Обычно деструкторы нужны только для объектов, создаваемых и уничтожаемых динамически, тогда как конструкторы (хотя бы один) должны присутствовать в объектах с виртуальными методами. У конструкторов и деструкторов в заголовке слово Procedure заменяется, соответственно, словами Constructor и Destructor.

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

Теперь запишем формальный синтаксис.

<конструкция объектного типа>::= "Object" [<наследование>] <список компонентов> ["Private" <список компонентов> ] "End".

Необязательный элемент наследование ссылается на объект-предок, если нужно унаследовать его свойства и методы.

<наследование>::= "(" <имя объектного типа-предка> ")".

Список компонентов содержит перечни свойств и методов, причем, методы не являются обязательными в объекте. Список компонентов после слова Private содержит скрытые свойства и методы.

<список компонентов>::= <список свойств> [";" <список методов>].

Синтаксис списка свойств полностью совпадает с синтаксисом списка полей записи, разница лишь в названии – вместо слова "поле" используется слово "свойство".

<список свойств>::= <описание свойств> {";" <описание свойств>}.

<описание свойств>::=<имя> {"," <имя>} ":" <тип>.

Список методов содержит только заголовки методов, сами методы не описываются внутри описания объектов. После заголовка может быть указано слово Virtual, чтобы указать, что данный метод является виртуальным. Синтаксис заголовков простых и виртуальных методов такой же, как у заголовков процедур и функций. Синтаксис заголовков конструкторов и деструкторов такой же, как у заголовков процедур, только вместо слова Procedure используются, соответственно, слова Constructor и Destructor.

<список методов>::= <заголовок метода> {";" <заголовок метода>}.

<заголовок метода>::=(<заголовок функции> | <заголовок процедуры> | <заголовок деструктора>)[";" "Virtual"] | <заголовок конструктора>.

Сами методы описываются в любом допустимом месте раздела описания, после описания объекта. Если объект описан в модуле, его методы описываются в разделе реализации. Описание метода – это описание процедуры или функции (для конструкторов и деструкторов слово Procedure заменяется, соответственно, словом Constructor или Destructor), но есть особенности. Поскольку в разных объектах могут использоваться одинаковые имена методов, перед именем метода нужно указывать имя соответствующего объектного типа с точкой (наподобие доступа к полям записей, только вместо имени переменной-записи указывается имя типа-объекта).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: