- •Некоторые особенности языка TurboPascal
- •Расширения базового синтаксиса
- •Расширения типов данных
- •Объявления переменных
- •Типизированные константы
- •Выражения и операции
- •Операторы
- •Процедуры и функции
- •Модульное программирование в TurboPascal
- •Общие понятия о модулях
- •Структура модуля
- •Заголовок модуля
- •Раздел интерфейса
- •Раздел реализации
- •Раздел инициализации
- •Описание подключаемых модулей (Uses)
- •Локализация (видимость) имен
- •Компиляция и компоновка модулей
- •Пример программы с модулем
- •Библиотеки модулей
- •Стандартные модули TurboPascal
- •Перечень стандартных модулей
- •Ввод-вывод в TurboPascal
- •Понятие об объектно-ориентированном программировании
- •Концепция объектно-ориентированного программирования
- •Синтаксис объектов в TurboPascal
- •Использование объектов в программе
Синтаксис объектов в TurboPascal
Обычно в разделе 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), но есть особенности. Поскольку в разных объектах могут использоваться одинаковые имена методов, перед именем метода нужно указывать имя соответствующего объектного типа с точкой (наподобие доступа к полям записей, только вместо имени переменной-записи указывается имя типа-объекта).