Последние версии языка Turbo Pascal расширены возможностью обрабатывать новый тип данных - объекты. Идея объекта заключается в объединении данных и алгоритмов обработки этих данных. Данные называют полями объекта, алгоритмы - методами, а само объединение — инкапсуляцией.Методы работают с полями и внешними данными, и именно они реализуют идею объекта. Объекты владеют свойством наследования,которое обеспечивает использование объектом-потомком полей и методов объекта-предка. Каждый объект может иметь произвольное количество потомков и лишь одного предка, что дает возможность создавать иерархические деревья наследования. Потомок может перекрывать некоторые методы предка, то есть метод с одним именем может выполняться по-разному для различных объектов. Это называют полиморфизмомметодов.
1. Инкапсуляция.Создание нового объекта аналогично созданию новой записи:
type<имя объекта> = object
<поля объекта> : <тип полей>;
<декларации методов объекта>;
end;
Создадим, например, объект TPoint — тип точка, содержащий координаты точки и следующие методы: засвечивания, гашения и перемещения точки. Описание типа имеет вид
typeTPoint = object
Private
X, Y : integer; {Координаты}
Public
constructorCreate(a, b : integer);
{Инициализирует поля координат числами а и b}
procedure On;
{Рисует точку текущим цветом}
procedure Off;
{Стирает точку - рисует ее цветом фона}
procedureDraw(color : word); virtual;
{Рисует точку цветом color}
procedureMove(dx, dy : integer);
{Перемещает точку по экрану на dx вправо и на dy вниз}
end;
Метод Create создает объект и заполняет его поля конкретными значениями. Такую процедуру называют конструктором и вместо служебного слова procedureиспользуют слово constructor.
Значение ключевого слова virtualв описании метода Draw будет разъяснено ниже.
Директива privateделает поля и методы объекта доступными внешним процедурам того же модуля (программы). Чтобы избежать ошибок, значение полей объекта желательно менять с помощью методов. Например, поменять расположение точки можно с помощью метода Move.
Директива publicобеспечивает доступность элементов объекта для процедур из других модулей. Компоненты, описанные как protected,будут доступны лишь потомкам данного объекта.
<декларации добавленных и переопределенных методов>;
end;
Проиллюстрируем механизм наследования созданием, исходя из типа точки, иерархического дерева типов других объектов -типа окружность, типа линия, типа прямоугольник:
TRect
Tline Tcircle
Tpoint
Тип TPoint выбран родительским, так как он имеет общие для всех графических объектов свойства: координаты, методы засвечивания, гашения и движения, которые вполедствии будут унаследованы другими объектами. Тип TCircle (окружность) как потомок типа TPoint будет дополнен полем радиуса(R), тип TLine (отрезок) - полями смещений (ShiftX, ShiftY) второго конца отрезка вдоль осей ОХ и OY. Тип TRect (прямоугольник) во всем аналогичный типу TLine: противоположные вершины прямоугольника задаются координатами точки и ее смещением. Во всех унаследованных объектах перекрываться будут лишь конструктор и метод Draw.