Кто создает и уничтожает формы? Это делает приложение (глобальный объект с именем Application). В файле проекта (.DPR) можно увидеть вызов функции CreateForm, предназначенный для этой цели. Что же касается объектов, создаваемых динамически (во время выполнения приложения), то здесь нужен явный вызов конструктора.
6. НАСЛЕДОВАНИЕ
Вторым "столпом" ООП, помимо инкапсуляции, является наследование. Этот простой принцип означает, что если нужно создать новый класс, лишь немного отличающийся от старого, то совершенно нет необходимости в переписывании заново уже существующих полей и методов. Новый класс
TNewObject = class
является
В Object Pascal
TMyObject = class
TMyObject = class
Использование последнего выражения оправдано, если разработчик хочет показать, что, согласно его замыслу, проектируемый класс как бы не имеет предков.
Приведем объявление базового для всех объектных типов класса TObject:
TObject = class
constructor
destructor
procedure
class function
procedure
class procedure
TObject;
function
class function
class function
class function
class function
class function
Boolean;
procedure
procedure
class function
Pointer;
class function
string;
function FieldAddress
Pointer;
end;
Такая архитектура возможна только при наличии механизма поддержки информации о типах —
Унаследованные от предка поля и методы доступны в дочернем классе; если имеет место совпадение имен методов, то эти методы
По тому, какие действия происходят при вызове, методы делятся на группы:
• статические (static
);• виртуальные (virtual
);• динамические (dynamic
);• абстрактные (abstract
).Статические методы, а также поля в объектах-потомках ведут себя одинаково: можно без ограничений перекрывать старые имена и при этом изменять тип методов:
type
T1stObj = class
I: Real;
procedure
end;
T2ndObj = class
I: Integer;
procedure
end;
…
procedure
begin
i: = v;
end;
procedure
begin
i:= 0;
inherited
end;
В этом примере разные методы с именем SetData присваивают значения разным полям с именем i. Перекрытое поле предка недоступно в потомке. В отличие от поля внутри других методов перекрытый метод доступен при указании зарезервированного слова
Язык C++ позволяет так называемое множественное наследование. В этом случае новый класс может наследовать часть своих элементов от одного родительского класса, а часть — от другого, это наряду с удобствами зачастую приводит к проблемам.
В Object Pascal понятие множественного наследования отсутствует. Если необходимо, чтобы новый класс объединял свойства нескольких, можно породить классы-предки один от другого или включить в класс несколько полей, соответствующих этим желаемым классам.