Классы и объекты
Структура класса
Синтаксис описания класса:
<имя класса> = 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.