Для того чтобы сформировать динамический объект, надо объявить соот ветствующий тип OBJECT и указатель на этот тип. Например:
Type ObjName = Object { - тип - ObjName }
. . .
End;
PObjName = ^ObjName; { - тип - указатель на ObjName } { Объявление динамического объекта:
Var PI : PObjName; { - со ссылкой на тип - указатель на объект}
Р2 : ^ObjName; { - со ссылкой на тип - объект }
Создание динамического объекта, содержащего только статические методы, производится с помощью процедуры или функции NEW, а уничтожение такого динамического объекта - с помощью процедуры DISPOSE.
Простейший способ размещения и удаления из ОП таких динамических объектов:
New ( P1 ); New ( Р2 ); ... Dispose ( P1); Dispose ( P2 );
где P1 и Р2 - имена указателей на динамические объекты.
New может использоваться также в качестве функции, которая возвращает значение указателя. Например:
P1 := New ( PObjName );
где PobjName - имя типа указателя динамического объекта.
Обращение к переменной - экземпляру объекта с помощью указателя производится в виде Р1^ или Р2^.
Вызовы методов производятся обычным способом. Например: Р1^.МЕТ2;
Если динамический объект содержит виртуальные методы, он должен инициализироваться с помощью вызова конструктора. Например:
Pl^.INIT; P2^.INIT;
Если конструктор не может разместить динамический объект в ОП, то он возвращает "пустой" указатель, например: PI = NIL.
Для работы с динамическими объектами, содержащими виртуальные методы, Паскаль имеет процедуры NEW и DISPOSE с расширенными возможностями. Расширенный синтаксис процедуры New позволяет выделять из кучи ОП для объекта и инициализировать сам объект с помощью вызова его конструктора. Для этого процедура New вызывается с двумя параметрами: именем указателя и именем конструктора. Например:
New (P1,INIT); New(P2,INIT);.
Параметр INIT выполняет вызов конструктора и инициализацию динамического объекта.
Пример программы, использующей динамические объекты с виртуальным методом, приведен в листинге 6.