Классы и объекты

Структура класса

Синтаксис описания класса:

<имя класса> = class(<имя класса-родителя>)

private {закрытый }

{Данные и методы, доступные только в данном классе}

protected {защищенный}

{Данные и методы, доступные только в наследуемых классах}

public {открытый}

{Данные и методы доступные всем}

published {публикуемый}

{Данные и методы доступные в Инспекторе объектов Delphi }

end;

Имя класса в Object Pascalпринято начинать с буквыТ, а имя данных (их называют полями) – с буквы F.

Базовый класс в Object Pascal – TObject. Этот абстрактный класс, объявленный в модуле System, является родителем всех других классов и содержит только спецификации методов, включая базовый конструктор и деструктор.

Если в объявлении класса не указан класс-родитель, то объявляемый класс будет считаться наследником класса TObject:

Type

TMyClass = Class { эквивалентно TMyClass = Class(TObject) }

. . .

end;

Создание и уничтожение объектов

Главное отличие объектов в Object Pascalзаключается в том, что все объекты создаются динамически.

Для создания объекта необходимо вызвать конструктор (в Object Pascalон обычно называется Create), который возвращает указатель – адрес созданного объекта.

Для уничтожения объекта рекомендуется вызывать метод Free, который проверяет существование объекта (не равен ли он nil), а затем вызывает деструктор (в Object Pascalон обычно называется Destroy).

Пример создания и уничтожения объекта:

Type

ТМуClass = class (TObject)

Private

. . .

Public

. . .

Constructor Create; // Конструктор

Destructor Destroy; // Деструктор

end;

Реализация методов класса

Var

МуObject: ТМуClass;

Begin

МуObject := ТМуClass.Create; { Создание объекта:

§ имя объекта, МуObject – указатель, результат вызова конструктора

§ конструктор по синтаксису процедура, но вызывается как функция

§ конструктор вызывается c именем класса – ТМуClass.Create

}

. . .

МуObject.Free; // Уничтожение объекта

End.

В реализации конструктора необходимо сначала вызвать конструктор класса-родителя – inherited, а затем выполнить необходимые действия.

Реализация деструктора должна завершаться вызовом деструктора класса-родителя – inherited.