Объектно-ориентированное программирование. Структура программного модуля
8.1. Тип данных «объект»
Объектные типы данных, по сути, являются логическим продолжением рассмотренного ранее типа запись. Если тип запись позволял группировать вместе данные различного типа, то объекты могут содержать не только данные, но и метолы (процедуры и функции) для работы с этими данными. Объектные типы описываются с помощью ключевого слова OBJECT.
Синтаксис
TYPE
<Имя>=OBJECT
<Данные и методы>
END;
Пример
TYPE
Point=OBJECT
x,y:Real;
PROCEDURE Move(Dx,Dy:Real);
END;
Методы описываются вне объектов.
Пример
PROCEDURE Point.Move(Dx,Dy:Real);
BEGIN
x:=x+Dx;
y:=y+Dy;
END;
Объекты также могут наследоваться.
Синтаксис
TYPE
<Имя>=OBJECT(<Имя родительского объекта>)
<Данные и методы>
END;
В результате наследования в так называемом дочернем (или порожденном) объекте будут присутствовать данные и методы родительского объекта, к которым будут добавлены данные и методы, описанные в дочернем. Методы родительского объекта могут быть перекрыты.
В параграфе 7.3 «Стандартные текстовые файлы» был рассмотрен пример со списком студентов. В каждой строке таблицы содержались данные различных типов, которые были сгруппированы при помощи типа запись. Однако в таблице содержались данные об объектах одинаковой структуры – студентах. Как же поступать в случаях, когда необходимо хранить список объектов, имеющих различную структуру, например геометрических фигур (прямоугольников, треугольников, кругов и т.д.), причем для любой фигуры необходимо, к примеру, вычислять площадь.
Можно представить такой набор объектов несколькими таблицами (т.е. массивами записей):
Прямоугольники | Треугольники | Круги | ||||||||
a | b | S = a∙b | a | b | c | S = … | r | S = πr2 | ||
314.16 | ||||||||||
… | … | … | … | … | … | … | … | … |
Однако может потребоваться иметь единый список всех объектов (например, если важен порядок следования объектов друг за другом). Можно попытаться представить такой список в виде единой таблицы следующим образом:
Фигура | a | b | c | r | S |
Прямоугольник | — | — | |||
Треугольник | — | ||||
Круг | — | — | — | 314.16 | |
… | … | … | … | … | … |
При таком способе организации, как видно из таблицы, остается много неиспользуемых данных, добавление новых объектов ведет к изменению структуры таблицы, необходимости добавлять туда новые столбцы (т.е. добавлять новые элементы в тип запись, описывающий строку таблицы). Количество неиспользуемых данных при этом также значительно возрастает. Кроме того, иногда вообще невозможно представить данные в таком виде.
Итак, в большинстве случаев приведенные выше примеры являются крайне неудобными для представления такого рода данных. В этом случае используется так называемый объектно-ориентированный подход, реализованный в языке Паскаль при помощи типов объект и класс. Например, у рассмотренных выше объектов есть схожие черты: они являются геометрическими фигурами и для каждой из этих фигур известен алгоритм вычисления ее площади. Таким образом, структуру этих объектов можно представить при помощи следующей схемы:
В программе реализуется базовый объект «Геометрическая фигура», который содержит только функцию для вычисления площади, причем неопределенную (так называемую, абстрактную). Далее создаются три объекта, которые наследуются от общего базового объекта, содержат соответствующие данные, и самое главное, конкретизируют функцию вычисления площади, описанную в базовом объекте.
После реализации классов можно описать массив геометрических фигур. В этот массив можно будет добавлять любую из описанных геометрических фигур со своими параметрами, и для любой фигуры из этого массива можно будет вычислять площадь. При добавлении новых объектов описываются только новые типы, наследованные от базового. Структура массива при этом не изменяется.
8.2. Тип данных «класс»
Тип данных «класс» описывается при помощи ключевого слова CLASS аналогично вышерассмотренному типу «объект». По выполняемым функциям он также практически аналогичен объектному типу, но предоставляет более мощные средства объектно-ориентированного программирования. Классы реализованы только в среде Delphi и используются, в частности, для описания визуальных элементов интерфейса (таких как формы, кнопки, поля ввода и т.д.). Например, пользовательская форма наследуется от базового класса TForm и содержит описания элементов, находящихся на ней, методов для обработки событий от этих элементов и т.д.
Пример
TYPE
TUserForm=CLASS(TForm)
Edit1:TEdit; { Поле ввода }
Button1:TButton; { Кнопка }
PROCEDURE Button1Click(Sender:TObject);
{ Метод, вызываемый по нажатии на кнопу }
. . .
END;
В результате такого описания, класс TUserForm обладает всеми свойствами класса TForm, т.е. формы (например, положением на экране, шириной, высотой, методами «Свернуть», «Закрыть» и т.д.).
Дата добавления: 2017-10-09; просмотров: 330;