- •Объектно-ориентированный анализ
- •Объектно-ориентированное программирование.
- •Объектно-ориентированное проектирование.
- •Основные понятия объектно-ориентированного проектирования.
- •Классы и объекты в Object Pascal.
- •Важнейшие принципы объектно-ориентированного программирования.
- •Составляющие класса.
- •Объекты
- •Создание и уничтожение объектов.
- •Наследование конструкторов и деструкторов.
- •Свойства и инкапсуляция.
- •Статические методы.
- •Полиморфизм. Виртуальные и динамические методы.
- •Абстрактные методы.
- •Перекрытие виртуальных и динамических методов.
- •Как устроен объект изнутри
- •Перезагрузка методов.
- •Задача с использованием полиморфизма
- •Области видимости.
- •Создание класса комплексных чисел.
- •Создание класса векторов
- •Объект-список
- •Модуль по работе со списками
- •Основная программа по работе с объектами-списками
- •Система программирования Delphi
- •Терминология Delphi.
- •Первые шаги визуального программирования в среде Delphi.
- •Иерархия компонентов.
- •Собственники компонентов
- •Элементы управления.
- •Компоненты (tComponent)
- •Оконные не оконные
- •Родительские и дочерние компоненты.
- •Объектно-событийное программирование. События
- •Реакции на события
- •Программирование реакции на событие
- •Особенности реализации событий
- •Делегирование событий
- •Виды событий
- •Диалоги. Работа с файлами. Открытие и закрытие файлов с использованием стандартных диалоговых окон.
- •TOpenDialog и tSaveDialog – диалоги открытия и сохранения файлов (страница dialogs )
- •Компонент класса tform
- •Создание и использование форм
- •Шаблоны форм
- •Программы со многими формами
- •Модульный принцип построения программ.
- •Программные файлы. Основные типы файлов проекта. Простейшее приложение.
- •Структура головного файла проекта.
Классы и объекты в Object Pascal.
Определение: Классы в Object Pascal это специальные типы, которые представляют собой единство трех сущностей: полей, методов, и свойств.
Как и любой другой тип, класс служит лишь образцом для создания конкретных экземпляров реализации, которые называются объектами. Заметим, что в предшественнике языка Object Pascal – языке Turbo Pascal – объектами называли типы, имеющие много общего с классами Object Pascal. Однако, существенные усовершенствования, внесенные в объектную модель Object Pascal, заставили разработчиков языка ввести для обозначения типов объектов специальный термин – «класс». Он заимствован из языка С++. Освободившийся термин «объект» стал употребляться для обозначения конкретного экземпляра реализации класса.
Важным отличием классов от других типов является то, что объекты класса всегда распределяются в куче (динамической памяти), поэтому объект–переменная фактически представляет собой лишь указатель на динамическую область памяти. Однако в отличие от других указателей при ссылке на содержимое объекта запрещается использовать символ «^» за именем объекта.
Пример описания класса объекта:
type
TMyClass=class(TObject)
Field: Integer;
. . . . . .
end;
var
MyClass: TMyClass;
begin
. . . . . .
MyClass^.Field:=0; // Ошибка! Следует писать так:
MyClass.Field:=0;
end;
Важнейшие принципы объектно-ориентированного программирования.
Классы - это особое «изобретение» программистов для упрощения разработки сложных программ и улучшения их качества. В основе классов лежат 3 фундаментальных принципа, которые называются:
инкапсуляция
наследование
полиморфизм
Инкапсуляция.
Как выше было сказано класс это единство 3х сущностей: полей, методов и свойств.
Определение: Объединение 3х сущностей (полей, методов, свойств) в абстрактных типах данных, называемых классы объектов, в единое целое называется инкапсуляцией.
Инкапсуляция означает объединение данных и действий над ними в одном объектном типе.
Инкапсуляция позволяет изолировать класс от остальных частей программы, сделать его самодостаточным для решения конкретной задачи. В результате класс всегда несет в себе некоторую функциональность. Например, класс TForm содержит (или инкапсулирует) в себе все необходимое для создания Windows – окна, класс TMemo представляет собой полнофункциональный текстовый редактор.
Инкапсуляция представляет собой мощное средство обмена готовыми к работе программными заготовками.
Т.о. библиотека классов Delphi это фактически набор кирпичиков созданных программистами – разработчиками для построения программ пользователей.
Наследование.
Любой класс может быть порожден от другого класса, для этого при его объявлении указывается имя класса – родителя:
TChildClass= class(TParentclass)
Порожденный класс автоматически наследует и поля, и методы, и свойства своего родителя и может добавлять их новыми. Механизм наследования позволяет создавать иерархию классов. Все классы Object Pascal порождены от единого родительского класса TObject. Этот класс не имеет полей и свойств, но включает в себя методы самого общего назначения, обеспечивающие весь жизненный цикл любых объектов – от создания до уничтожения. Программист, не может создать класс, который не был бы дочерним классом TObject. Поэтому следующие два объявления классов идентичны:
TClass=class (TObjeсt)
TClass=сlass
Принцип наследования приводит к созданию ветвящегося дерева классов от TObject к его потомкам, каждый потомок дополняет возможности родителя новыми возможностями и передает их своим потомкам.
Рассмотрим небольшой фрагмент дерева классов Delphi. Класс TPersistent обогащает возможности своего родителя TObject: он «умеет» сохранять данные в файле и получать их из него, в результате это умеют делать и все его потомки. Класс TComponent, в свою очередь, умеет взаимодействовать со средой разработчика и передавать это умение своим потомкам. ТControl не только способен работать с файлами и средой разработчика, но он еще умеет создавать и обслуживать видимые на экране изображения, а его потомок TWinControl – создавать Windows-окна и т.д.
T Object
TInterfaceObject Exception
TPersistent
TComponent
TControl
TWinControl
Полиморфизм.
Полиморфизм – это свойство классов решать схожие по смыслу проблемы разными способами.
В рамках Object Pascal поведенческие свойства класса определяются набором входящих в него методов.
Изменяя алгоритм того или иного метода в потомках класса, программист может давать этим потомкам отсутствующие у родителя свойства. Для изменения метода необходимо перекрыть его в потомке, т.е. объявить в потомке одноименный метод, но реализовать в нем новые нужные действия. В результате в объекте – родителе и в объекте – потомке будут действовать два одноименных метода, но имеющих разную алгоритмическую основу, а, следовательно, придающую объектам разные свойства. Это и называется полиморфизмом объектов.