5.1 Объявление

На верх  Назад  Вперёд

Free Pascal поддерживает объектно-ориентированное программирование. Фактически, большая часть компилятора написана, с использованием объектов. Здесь мы представляем некоторые технические вопросы относительно объектно-ориентированного программирования во Free Pascal.

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

Объект объявлен, как была бы объявлена запись; за исключением того, что теперь, процедуры и функции могут быть объявлены как часть записи. Объекты могут "наследовать" поля и методы от "родительских" объектов. Это означает, что эти поля и методы могут использоваться , как будто они были включены в объекты, объявленные как "дочерний" объект.

Кроме того, вводится концепция видимости: поля, процедуры и функции могут быть объявлены как public (публичные), protected (защищенные) и private (частные). По умолчанию, поля и методы являются public, и доступны за пределами текущего блока.

Поля или методы, объявленные как private, доступны только в текущем модуле: их область видимости ограничена реализацией текущего модуля.

Объявление прототипа объекта выглядит следующим образом:


Типы объектов

501


Как видно далее, можно объявлять столько private и public блоков сколько нужно.

Ниже дано допустимое определение объекта:

Type

TObj = object

Private

  Caption : ShortString;

Public

  Constructor init;

  Destructor done;

  Procedure SetCaption (AValue : String);

  Function GetCaption : String;

end;

Объект содержит пару конструктор/деструктор, и метод, для получения и установки заголовка. Поле Caption является частным для объекта: к нему нельзя получить доступ вне модуля, в котором объявлен TObj.

Замечание:

В режиме MacPas, ключевое слово Object заменяется ключевым словом Class для совместимости с другими компиляторами Pascal доступными для Mac. Это означает, что объекты не могут использоваться в режиме MacPas.

Замечание:

Free Pascal поддерживает также упакованные объекты. Они такие же, как и обычные объекты, только элементы (поля) объекта выровнены на границах байта, как и в упакованных записях. Объявление упакованного объекта похоже на объявление упакованной записи:

Type

TObj = packed object

  Constructor init;

  ...

  end;

Pobj = ^TObj;

Var PP : Pobj;

Директива {$PackRecords} аналогично действует и на объекты.