Лекция 13. ООП (Объектно-ориентированное программирование). Введение
Введение
В языке Турбо-Паскаль средства для реализации объектно-ориентированного стиля программирования появились в 1989 г, в версии Turbo Pascal 5.5. Однако рассматривать ООП будем на примере Object Pascal - Delphi.
Рассмотрим основные идеи, включенные в Паскаль для реализации ООП:
Классы и объекты
Добавлен новый тип данных, похожий на тип Record, но отличающийся тем, что здесь "полями" могут быть не только данные, но и подпрограммы. Почему бы и нет? Ведь подпрограммы как и данные занимают память и их нужно хранить. Подпрограммы в составе этого типа называют МЕТОДАМИ. Доступ к методам производится так же, как и к полям, то есть при помощи разделителя - точки, отделяющей имя метода от имени переменной. Например, в Делфи может существовать переменная-объект по имени Form1 (она описывает окно, которое Вы видите на экране). У нее есть метод Close, который, естественно, закрывает эту форму. Чтобы закрыть форму, достаточно записать где-то среди исполняемых операторов: Form1.Close и форма будет закрыта, как только исполнение программы дойдет до этого места. Типы данных, описывающие объекты, впоследствии назвали классами, а переменные, создаваемые на основе описания класса - объектами.
Объекты размещаются в динамически распределяемой памяти, но для доступа к ним не нужно указывать символ ^. Отметим, что имена классов и типов рекомендуется начинать с T (от Type), а имена полей - с f.
Конструкторы и деструкторы
Для создания объектов (на основе информации, содержащейся в описании класса) применяют специалные методы, называемае конструкторами. Конструкторы выделяют для объекта необходимую память (из кучи), инициализируют значения переменных и другие действия, содержащиеся в их описании (в описании класса обычно содержится описание конструктора).
В этом описании заголовок конструктора имеет вид:
constructor Create; Допускаются параметры.
Обычно методы используются только ПОСЛЕ создания объекта, т е позже выполнения конструктора.
А как же исполнить сам конструктор? В языке предусмотрено использование некоторых методов (называемых методами КЛАССА) ДО создания объекта. Синтаксис вызова конструктора может иметь вид:
<переменная_этого_класса>:=<имя_класса>.Create;
В результате будет создан объект этого класса, и для доступа к его полям и методам нужно использовать переменную_этого_класса.
Для освобождения памяти, выделенной объекту и совершения других действий, необходимых при этом, используется метод, называемый ДЕСТРУКТОРОМ. Синтакис его вызова:
<имя_объекта>.Destroy;
Заметим, что для прекращения работы с объектом обычно вызывают другой метод: .Free,
который совершает предварительно некоторые полезные действия, а затем вызывает Destroy.
Свойства
Далее обнаружилось, что разрешать пользователю прямой доступ к полям объекта - опасно. Например, форма Form1 имеет высоту и ширину: Form1.height и Form1.width. Представим, что пользователь изменил значение Form1.height. Но ведь нужно перерисовать форму, чтобы она соответствовала новому значению? Поэтому предложили ИЗОЛИРОВАТЬ поля объекта, а для доступа к их значениям использовать специальные методы, названия которых рекомендуется начинать с Get - если нужно получить значение поля и Set - если нужно установить новое значение поля.
ООП хорошо описано в учебнике [ 3 ]
Текст главы "Классы" (этого учебника) можно прочесть далее