Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
классы_лекция.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
111.62 Кб
Скачать

Классы

Классами в Delphi называются специальные типы, которые содержат поля, методы и свойства.

Как и любой другой тип, класс служит лишь образцом для создания конкретных экземпляров реализации, которые называются объектами.

Отличием классов от других типов Delphi является то, что объекты класса всегда распределяются в куче (динамической памяти), поэтому объект-переменная фактически является указателем на динамическую область памяти. Однако в отличие от других указателей, при ссылке на содержимое объекта запрещается использовать символ «^» за именем объекта:

type

TMyClass = class(TObject)

Field: Integer;

...

end;

var

MyClass: TMyClass;

begin

...

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

Полиморфизм

Полиморфизмом называется свойство классов решать схожие по смыслу задачи разными способами.

Поведенческие свойства класса (его функциональность) определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках класса, можно придавать этим потомкам отсутствующие у родителя специфические свойства.

Для изменения метода необходимо перекрыть его в потомке, то есть объявить одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и придающие объектам разные свойства. Это и есть полиморфизм объектов.

В Delphi полиморфизм достигается не только описанным выше механизмом наследования и перекрытия методов родителя, но и их виртуализацией, позволяющей родительским методам обращаться к методам своих потомков.