Наследование
Инкапсуляция
Основные понятия объектно-ориентированного программирования
Begin
Var
Type
Классы
Классамив Delphi называются специальные типы, которые содержат поля, методы и свойства.
Как и любой другой тип, класс служит лишь образцом для создания конкретных экземпляров реализации, которые называются объектами.
Отличием классов от других типов Delphi является то, что объекты класса всегда распределяются в куче (динамической памяти), поэтому объект-переменная фактически является указателем на динамическую область памяти. Однако в отличие от других указателей, при ссылке на содержимое объекта запрещаетсяиспользовать символ «^» за именем объекта:
TMyClass = class(TObject)
Field: Integer;
...
end;
MyClass: TMyClass;
...
MyClass^.Field := 0; // Ошибочное обращение к полю!
MyClass.Field := 0; // Верное обращение к полю
...
end;
В основе классов (объектов) являющихся ядром объектно-ориентированного подхода в программировании лежат три фундаментальных принципа, которые называются инкапсуляция, наследование и полиморфизм.
Класс представляет собой единство трех сущностей - полей, методов и свойств. Объединение этих сущностей в единое целое называется инкапсуляцией.
Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его «самодостаточным» для решения конкретной задачи. Поэтому класс всегда несет в себе некоторую функциональность. Именно инкапсуляция обеспечивает возможность обмена готовыми к работе программными заготовками.
Например, класс TForm содержит (инкапсулирует в себе) все необходимое для создания окна Windows-программы, класс ТМеmо представляет собой полнофункциональный многострочный текстовый редактор.
Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса-родителя:
<имя_класса_потомка> = class(<имя_класса_родителя>)
Например, TChildClass = class(TParentClass)
Порожденный класс автоматически наследует поля, методы и свойства своего родителя и может добавлять новые. Это и составляет суть принципа наследования.
Принцип наследования обеспечивает поэтапное создание сложных классов и разработку собственных библиотек классов.
Все классы Delphi порождены от единственного родителя - класса TObject. Этот класс не имеет полей и свойств, но включает в себя методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов - от создания до уничтожения.
В Delphi нельзя создать класс, который не был бы дочерним для класса TObject. Поэтому объявления:
TaClass = class(TObject)
TaClass = сlаss
имеют один и тот же смысл.
Принцип наследования обеспечивает создание ветвящегося дерева классов, разрастающегося, от класса TObject к его потомкам. При этом каждый потомок дополняет своего родителя новыми возможностями и передает их своим потомкам. Вместе с тем, дочерний класс не может удалить какую-либо сущность родительского класса.
Дочерний класс в Delphi не может иметь два и более родительского класса (такая возможность называется множественным наследованием).
Фрагмент дерева классов Delphi
Класс ТPersistent обогащает возможности своего родителя ТОbject: он «умеет» сохранять данные в файле и получать их из него, в результате это умеют делать и все его потомки. Класс ТСоmроnent в свою очередь, умеет взаимодействовать со средой разработчика и передает это умение своим потомкам. Класс ТСоntrol не только способен работать с файлами и средой разработчика, он еще умеет создавать и обслуживать видимые на экране изображения, а его потомок ТWincontrol может создавать окна Windows-программ и т. д.