Наследование

Инкапсуляция

Основные понятия объектно-ориентированного программирования

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-программ и т. д.