<<
>>

Лекция 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 Основные понятия и отличительные черты ООП:

  1. Классификация папиллярных узоров, ногтевых фаланг пальцев рук
  2. ПАТОГЕНЕТИЧЕСКИЕ МЕХАНИЗМЫ НАРКОМАНИИ
  3. Применение права: понятие, признаки, стадии. Акты правоприменения.
  4. Формирование научной среды