Лекция 3.1 Основные понятия и отличительные черты ООП
В основе ООП лежит идея объединения данных и действий, которые производятся над этими данными, в одной структуре.
Классы
В ООП базовыми единицами программ являются классы.
Класс – это структура, которая может содержать в своем составе переменные, функции и процедуры.
Переменные, в зависимости от назначения, называются полями или свойствами. Процедуры и функции, входящие в состав класса, называются методами. Классы также называются объектными типами.Для объявления классов определен структурный тип class. Объявление типа class похоже на объявление типа record, однако в классах могут содержаться не только поля-переменные, но и методы. Кроме того, в объявлении класса используется ряд специальных зарезервированных слов, определяющих область видимости полей и методов. В отличие от всех остальных типов, тип class обязательно должен быть описан как пользовательский тип в разделе type. Например, окружность описывается координатами центра и радиусом (данные). Кроме того, над окружностью можно проделывать различные действия (методы): вычислять ее длину и площадь ограниченного ею круга, проверять, находится ли некоторая точка внутри данной окружности, и т.п.:
interface // раздел интерфейса
…
type
TCircle = class
FХ, FY: Real; // координаты центра окружности
FR: Real; // радиус
function Area: Real; // заголовок метода определения
// площади
function Circumference: Real; // заголовок метода определения
// периметра
function Inside(X, Y: Real): Real; // заголовок метода определения
// вхождения точки
end;
…
implementation // раздел реализации
…
function TCircle.Circumference: Real; // реализация метода
// Circumference класса TCircle
begin
Result:= 2 * Pi * FR; // определение периметра
end;
При объявлении класса вначале описываются поля и свойства, а затем методы. В описании объектного типа присутствуют только заголовки методов, их код дается в разделе реализации - Implementation.
Для удобочитаемости кода между программистами существует ряд соглашений, например, начинать все типы с большой буквы T, т.к. класс - это объектный тип, то это касается и его. Другое соглашение, начинать все поля классов с большой буквы F (Field), поэтому координаты X, Y и радиус R записали как FR, FX и FY.
Общим предком всех классов в Delphi является класс TObject, если при объявлении класса не указан предок, то по умолчанию предком является класс TObject, например, два следующих объявления эквивалентны:
TCircle = class;
TCircle = class (TObject);
Объекты
Если класс – это объектный тип, то объект – экземпляр класса. Таким образом, объектом или экземпляром класса называется переменная объектного типа. Для обмена данными и управления объектом используются свойства или методы. Свойства объекта определяют его состояние. Технология ООП запрещает работать с объектом иначе, чем через методы, то есть изменение состояния объекта производится только через вызов методов этого объекта. Это правило позволяет гарантировать работоспособность объекта и исключить возможность приведения его в недопустимое состояние или даже к его разрушению.
Объекты могут обмениваться сообщениями. Сообщение является совокупностью данных определенного типа, передаваемых объектом-отправителем объекту-получателю, имя которого указывается в сообщении. Получатель может реагировать на сообщение. Объект можно представить как модель некоторого реального объекта или процесса, которая обладает следующими свойствами:
· поддается хранению и обработке;
· способна взаимодействовать с другими объектами и вычислительной средой за счет обмена сообщениями и реакцией на них.
В системе ООП совокупность объектов образует среду, в которой вычисления выполняются путем обмена сообщениями между объектами.
Представим ситуацию, что есть модели двух воинов, реализованные в объектах. Первый объект наносит удар по второму объекту, что выражается отправкой ему сообщения. Второй объект принимает сообщение, проверяет свое состояние и в зависимости от этого, возможно, отражает удар.
Затем наносит удар второй объект по первому. Бой будет зависеть от характеристик объектов. Пример демонстрирует случай, когда каждый из объектов отвечает за свое состояние, а сама игра определяется взаимодействием объектов.Пример объявления и использования объекта:
var Circle: TCircle;
Доступ к данным и методам объекта реализуется также как и к полям записей, например:
Var A,C: Real; I: Boolean;
…
Cirlce.FY:= 10;
Cirlce.FX:= 20;
Cirlce.FR:= 5;
A:= Cirlce.Area;
C:= Cirlce.Circumference;
I:= Cirlce.Inside(10, 15);
или
with Circle do
begin
FY:= 10;
FX:= 20;
FR:= 5;
A:= Area;
C:= Circumference;
I:= Inside(10, 15);
end;
Области видимости
Не все элементы классов должны быть доступны, даже если находятся в разделе интерфейса модуля. Только сам объект имеет право использовать свои данные (поля), прямой доступ к данным может привести к выходу объекта из строя или даже к его разрушению, например при присвоении недопустимых значений или использовании некоторых методов. Области видимости являются еще одной ступенью защиты данных и методов от несанкционированного использования, а также позволяют скрыть реализацию классов.
Область видимости задается специальным зарезервированным словом. Различается пять областей видимости:
· общие (public). Не накладывает ограничений на видимость. Поля и методы раздела public доступны для всех объектов любых модулей ссылающихся на модуль, содержащий описание класса;
· личные (private). Реализуется минимальная область видимости. Элементы раздела private не доступны в других модулях, использующих класс, и позволяют реализовать принцип черного ящика.
· защищенные (protected). Элементы раздела protected, могут быть доступны в других модулях только в классах потомках, т.е. позволяют реализовать определенный уровень прозрачности, но только для дочерних классов.
· опубликованные (published). Элементы раздела published предназначены для создания интерфейса визуального программирования и видны в инспекторе объектов.
Во время выполнения программы свойства, указанные в секции published, аналогичны свойствам категории public.· автоматизация (automated). Элементы с данной областью видимости используются для создания интерфейсов СОМ.
Области видимости указываются не для каждого элемента класса – директива задает область видимости для всех следующих за ней элементов, пока не будет указана другая директива. В классах-потомках можно изменять области видимости методов и свойств, но только в сторону расширения.
Вернемся к классу TCircle:
type
TCircle = class
private // объявлен раздел private
FХ, FY: Real; // эти поля недоступны
FR: Real; // в других модулях, т.е. являются
// личными
public // объявлен раздел public
function Area: Real; virtual; // свойства и методы общедоступны
function Circumference: Real; // и представляют интерфейс
//класса
function Inside(X, Y: Real): Real; virtual;
end;
Вопросы для самоконтроля
1. Какие преимущества дает ООП?
2. Что такое класс?
3. Что понимается под данными и методами?
4. Что такое объект и с чем его можно ассоциировать?
5. В чем отличие объекта от класса?
6. Каким образом производится вычисление при использовании ООП?
7. Какие области видимости вы знаете?
8. В чем связь между модулями и областями видимости?
9. В каких областях видимости определяется интерфейс класса?
Еще по теме Лекция 3.1 Основные понятия и отличительные черты ООП:
- Классификация папиллярных узоров, ногтевых фаланг пальцев рук
- ПАТОГЕНЕТИЧЕСКИЕ МЕХАНИЗМЫ НАРКОМАНИИ
- Применение права: понятие, признаки, стадии. Акты правоприменения.
- Формирование научной среды