Описание объектного типа

Класс или объект – это структура данных, которая содержит поля и методы. Как всякая структура данных она начинается зарезервированным словом и закрывается оператором end. Формальный синтаксис не сложен: описание объектного типа получается, если в описании записи заменить слово record на слово object или class и добавить объявление функций и процедур, действующих в данном объекте.

Type <имя типа объекта>= object

<поле>;

<поле>;

….

<метод>;

<метод>;

end;

В ObjectPascal существует специальное зарезервированное слово class для описания объектов, заимствованное из С++.

Type <имя типа объекта>= class

<поле>;

….

<метод>;

<метод>;

end;

ObjectPascal поддерживает обе модели описания объектов.

Компонент объекта – либо поле, либо метод. Поле содержит имя и тип данных. Метод – это процедура или функция, объявленная внутри декларации объектного типа, в том числе и особые процедуры, создающие и уничтожающие объекты (конструкторы и деструкторы). Объявление метода внутри описания объектного типа состоит только из заголовка. Это разновидность предварительного описания подпрограммы. Тело метода приводится вслед за объявлением объектного типа.

Директивы private, protected, public. Перечисленные директивы предназначены для ограничения доступа к элементам класса. Использование директив при описании класса необязательно.

Секция private содержит внутренние элементы, обращение к которым возможно только в пределах модуля, содержащего описание класса.

Секция protected содержит защищенные элементы, которые доступны в пределах модуля, содержащего определение класса, и внутри классов- потомков.

Секция public содержит общедоступные элементы, к которым возможно обращение из любой части программы.

В общем виде описание нового класса имеет следующий синтаксис:

Type <имя типа объекта>= class

Private

<скрытые_элементы_класса>

Protected

<защищенные_элементы_класса>

Public

<общедоступные_элементы_класса>

End;

После того, как описаны типы данных – классы – в разделе описания переменных необходимо описать экземпляры этих классов (т.е. переменные описанных типов – объекты). В программе обращение к экземплярам класса осуществляется по имени (как к обычным переменным) с указанием либо поля, к которому происходит обращение, либо метода, вызов которого производится:

<имя_объекта>.<имя_поля>

<имя_объекта>.<имя_метода>

Пример. Вводится объектный тип «предок», который имеет поле данных Name (имя) и может выполнять два действия:

· провозглашать: «Я – предок!»;

· сообщать свое имя.

Type tPredoc = object

Name: string; {поле данных объекта}

Procedure Declaration; {объявление методов}

Procedure MyName; {объекта}

End;

Тексты подпрограмм, реализующих методы объекта, должны приводиться в разделе описания процедур и функций. Заголовки при описании реализации метода повторяют заголовки, приведенные в описании типа, но дополняются именем объекта, которое отделяется от имени процедуры точкой. В нашем примере:

Procedure tPredoc. Declaration; {реализация метода объекта}

begin

writeln(‘Я – предок!’);

end;

Procedure tPredoc. MyName; {реализация метода объекта}

begin

writeln(‘Я – ’, Name);

end;

Внутри описания методов на поля и методы данного типа ссылаются просто по имени. Так метод MyName использует поле Name без явного указания его принадлежности объекту так, если бы выполнялся неявный оператор with <переменная_типа_объект> do.

Под объектами понимают и переменные объектного типа – их называют экземплярами. Как всякая переменная, экземпляр имеет имя и тип: их надо объявить.

…….{объявление объектного типа и описание его методов}

var v1: tPredoc; {объявление экземпляра объекта}

begin

v1.Name:= ‘Петров Николай Иванович’;

v1.Declaration;

v1.MyName

end.

Использование поля данных объекта v1 не отличается по своему синтаксису от использования полей записей. Вызов методов экземпляра объекта означает, что указанный метод вызывается с данными объекта v1. В результате на экран будут выведены строчки

Я – предок!

Я – Петров Николай Иванович

Аналогично записям, к полям переменных объектного типа разрешается обращаться как с помощью уточненных идентификаторов, так и с помощью оператора with.

Например, в тексте программы вместо операторов

v1.Name:= ‘Петров Николай Иванович’;

v1.Declaration;

v1.MyName

возможно использование оператора with такого вида

with v1 do

begin

Name:= ‘Петров Николай Иванович’;

Declaration;

MyName

End;

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


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



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