- •Объектно-ориентированный анализ
- •Объектно-ориентированное программирование.
- •Объектно-ориентированное проектирование.
- •Основные понятия объектно-ориентированного проектирования.
- •Классы и объекты в Object Pascal.
- •Важнейшие принципы объектно-ориентированного программирования.
- •Составляющие класса.
- •Объекты
- •Создание и уничтожение объектов.
- •Наследование конструкторов и деструкторов.
- •Свойства и инкапсуляция.
- •Статические методы.
- •Полиморфизм. Виртуальные и динамические методы.
- •Абстрактные методы.
- •Перекрытие виртуальных и динамических методов.
- •Как устроен объект изнутри
- •Перезагрузка методов.
- •Задача с использованием полиморфизма
- •Области видимости.
- •Создание класса комплексных чисел.
- •Создание класса векторов
- •Объект-список
- •Модуль по работе со списками
- •Основная программа по работе с объектами-списками
- •Система программирования Delphi
- •Терминология Delphi.
- •Первые шаги визуального программирования в среде Delphi.
- •Иерархия компонентов.
- •Собственники компонентов
- •Элементы управления.
- •Компоненты (tComponent)
- •Оконные не оконные
- •Родительские и дочерние компоненты.
- •Объектно-событийное программирование. События
- •Реакции на события
- •Программирование реакции на событие
- •Особенности реализации событий
- •Делегирование событий
- •Виды событий
- •Диалоги. Работа с файлами. Открытие и закрытие файлов с использованием стандартных диалоговых окон.
- •TOpenDialog и tSaveDialog – диалоги открытия и сохранения файлов (страница dialogs )
- •Компонент класса tform
- •Создание и использование форм
- •Шаблоны форм
- •Программы со многими формами
- •Модульный принцип построения программ.
- •Программные файлы. Основные типы файлов проекта. Простейшее приложение.
- •Структура головного файла проекта.
Объекты
В Delphi объект – динамическая структура. Переменная объект содержит не данные, а ссылку на данные объекта, то есть переменные a,b являются указателями, содержащими адреса объектов. Поэтому программист должен позаботиться о выделении памяти для этих данных. Форма обращения к объектам классов в Object Pascal отличается от формы обращения к другим указателям и динамическим переменным. Для обращения к полям и методам объекта в Object Pascal не надо использовать «^».
Таким образом класс и объект этого класса описываются:
Type
<имя класса> = class (<имя класса - родителя>)
{поля, методы, свойства}
end;
{описания методов класса}
Var
<имя объекта>: <имя класса>;
Создание и уничтожение объектов.
В состав любого класса входят два специальных метода: конструктор и деструктор. Эти методы у класса TObject называются Create и Destroy, так же они называются и в большинстве его потомков.
Определение: Конструктор – специальный метод, который распределяет объект в динамической памяти и помещает адрес начальной ячейки памяти в переменную Self, которая автоматически объявляется в классе.
Определение: Деструктор– специальный метод, который удаляет объект из динамической памяти.
Обращение к конструктору должно предшествовать любому обращению к полям и методам объекта. Т.о. объект «появляется на свет» в результате вызова конструктора Create, который инициализирует объект.
Конструктор может включать инициализацию значений всех или некоторых полей объекта, открытие файлов, запрос оперативной памяти динамическим переменным.
Delphi осуществляет инициализацию полей класса: все числовые поля инициализируются нулем, строковые – пустой строкой, логические – значением false, указатели – значением nil.
Для вызова конструктора необходимо записать:
<имя объекта>:= <имя класса>.<имя конструктора>;
Нужно указать еще и фактические параметры, если они есть .
Например:
a:= ТСomp. Create;
Здесь появляется объект a.
Внимание! Как же так, ведь объекта еще нет, а мы уже вызываем его метод. Обратим внимание на то, что вызывается метод ТСomp.Create, а не a.Creatе.
Для освобождения памяти, занятой объектом, используется специальный метод – деструктор, который обычно имеет имя Destroy.
Деструктор осуществляет завершающую работу с полями класса, может содержать закрытие файлов, освобождение оперативной памяти, выделенной динамическим переменным. Доступ к деструктору осуществляется следующим способом:
<имя объекта>.< имя деструктора>;
Например: a .destroy;
По своей форме конструкторы и деструкторы являются процедурами, но объявляются в классе с помощью зарезервированных слов Constructor и Destructor.
Type TMyClass=class
IntField:Integer;
Constructor Create(а:integer);
Destructor Destroy;
end;
Любые поля объекта, а так же методы класса, оперирующие с его полями, могут вызываться только после создания объекта с помощью вызова конструктора:
var a: ТСomp;
begin
a.re:=0;{ошибка,
объект пока не создан}
a:= ТСomp. Create; {создается объект a}
a.re:=0;
. . . . .
a. destroy; {уничтожение объекта}
end.
Обращение к деструктору объекта будет ошибочным, если объект не создан конструктором и если адрес объекта nil, поэтому для удаления объекта следует вызвать метод free, который сначала проверяет, не равен ли адрес объекта nil , а затем вызывает метод destroy.
Например: a. free; – уничтожение объекта.
Методы destroy, create есть и у общего предка всех классов TObject, поэтому если в классе-потомке не указан конструктор или деструктор, то он наследуется от общего класса-родителя.
Например:
type
Тcomp = class
re,im:real;
procedure input (x,y:real);
{конструктор и деструктор явно }
. . . . . { не указаны, они наследуются от класса TObject }
end;
procedure Тcomp.input;
begin re:=x;
im:=y;
end;
var a,b:Тcomp;
begin
a:= Тcomp.create; {вызывается конструктор}
a.input (6,10);
. . . . .
a.free {вызывается деструктор}
end.