Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ПА и ПО (с пояснениями).doc
Скачиваний:
10
Добавлен:
23.09.2019
Размер:
851.97 Кб
Скачать

6.2. Инкапсуляция. Св-ва

Инкапсуляция – ограничение прямого доступа к внутренним данным.

Пример использования св-в:

TAnObject = class(TObject)

FValue : TSomeType;

function GetAProperty : TSomeType;

procedure SetAProperty(ANew Value : TsomeType);

property AValue : TSomeType read GetAProperty write SetAPropety;

end;

Чисто внешнее «св-во» – поле данных. Для того чтобы обратиться к св-ву используют оператор присваивания.

var

MyObject.TAnObject;

MyObject.AValue := Value;

Св-во отличается от переменной тем, что использует два метода: чтения (read) и записи (write). Где read – функция – метод обращающийся к реальному полю данных.

Пример:

function TAnObject.GetAProperty : TSomeType

begin

GetProperty := FValue;

end;

Сл-но скрытно метод чтения вызывается методом следующим за read, а записи за write.

На основании механизма св-в осуществляется обработка сообщений, в результате удаётся избавить программиста от этих сообщений вводя механизм событий.

Особенности объявления и использования св-в:

1) если нет потребности специальных процедур чтения/записи, то их можно заменить именем поля данных

2) ограничить доступ на чтение или запись, то можно не указывать соответствующий метод (например write убрать, а оставить read):

property AValue : TSomeType write FValue;

3) св-во может быть векторным:

property APoints [Index : integer] : TPoint read GetAProperty

write SetAProperty;

В этом примере GetAProperty имеет дополнительный параметр:

function GetAProperty (Index : integer) : TPoint;

procedure SetAPOint (Index : integer; NewPoint : TPoint);

Для векторных св-в возможно объявление векторного св-ва по умолчанию (default):

property APoints [Index : integer] : TPoint read GetProperty

write SetAProperty default;

AMyObject.APoint[2] := Value;

AMyObject[2] := Value;

На основании векторных св-в в Delphi реализован ряд важных классов, такие как «строки».

4) Возможно объявление значения св-ва по умолчанию:

property APoints [Index : integer] : TPoint read GetAProperty

write SetAProperty default Value;

6.3 Наследование

Механизм наследования в целом подобно механизму наследования более ранних версий.

Delphi Поддерживает 2 объектные модели: старую и новую.

М ножественное наследование рекомендуется заменять контейнерными классами.

По прежнему методы объектов делятся на 4 разновидности: static, virtual, dynamic, abstract.

Виртуальные и динамические методы при переопределении обозначаются спецификатором override.

Так же есть еще один спецификатор overload позволяет реализовать статический полиморфизм.

Пример объявления абстрактного метода:

procedure Calculate; virtual; abstract;

В объектной модели Delphi можно переопределять поля данных, при этом переопределённое поле не доступно в потоке.

При переопределении статических методов могут изменяться списки их параметров.

Конструктор всегда статический и его параметры могут изменяться.

6.4. Области видимости

Правила работы с областями видимости во многом аналогичны С++.

В классе можно выделить 4 секции:

  • public – открытые эл-ты

  • prived – закрытые члены

  • published – св-ва которые должны быть видны в инспекторе объектов

  • protected – эл-ты могут изменяться в наследниках, но не доступны пользователю