Директивы видимости


Ключевая идея объектного подхода заключается в сокрытии информации. В хорошо спроектированном классе никакие изменения внутри не должны отражаться на пользователях данного класса. Директивы видимости, используемые в объектной модели языка Паскаль, позволяют ограничить доступность элементов класса.

Существует четыре уровня сокрытия информации, которые задаются директивами Private (закрытый), Public (общедоступный), Protected (защищенный) и Published (публикуемый). Наиболее строгой директивой является Private, которая ограничивает видимость атрибутов и методов класса тем модулем, в котором расположен данный класс. Директива Public наоборот, наименее строга, и обеспечивает доступ к объявлениям класса из любого модуля, имеющего доступ к данному модулю.

Директива Protected внутри модуля, в котором объявлен класс, действует аналогично директиве Private, а извне модуля – аналогично директиве Private. Однако вне модуля доступ к защищенным полям данных и методов все же возможен внутри производного класса. При создании классов директива Private должна использоваться только для полей и методов, действительно зависящих от класса. Любые поля и методы, доступ к которым из производных классов может потребоваться, должны быть объявлены в разделе Protected.

Для директивы Published правила видимости аналогичны Public, но разница между ними заключается в том, что Published указывает компилятору добавлять информацию о типе времени выполнения (Run-Time Type Information, RTTI) для всех объявлений этого раздела. Информация RTTI необходима инспектору объектов при работе с компонентами на форме в среде Borland® Delphi.

Распределим методы и поля по уровням доступности:

 

TFigure = class

Private

fColor: Byte;

fThickness: Byte;

fCanvas: TCanvas;

Public

constructor Create;

destructor Destroy; override;

procedure SetColor(Value: Byte);

procedure SetThickness(Value: Byte);

procedure PrepareCanvas;

end;

Свойства классов

Другим способом сохранения целостности объекта является применение свойств. Свойствав объектной модели языка Паскаль предназначены для обеспечения доступа к скрытым атрибутам класса. Обратимся к классу TFigure и введем свойства:

 

TFigure = class

Private

fColor: Byte;

fThickness: Byte;

fCanvas: TCanvas;

Protected

procedure SetColor(Color: Byte);

procedure SetThickness(Thickness: Byte);

property Color: Byte read fColor write SetColor;

property Thickness: Byte read fThickness write SetThickness;

Public

constructor Create;

destructor Destroy;

procedure PrepareCanvas;

end;

 

Для определения свойств используется зарезервированное слово Property, вслед за которым задается имя свойства, затем его тип и спецификаторы чтения-записи. По принятому соглашению все методы доступа начинаются с приставки Get и Set для получения и установки значений полей соответственно. Возможны три комбинации для режима чтения-записи: запись и чтение полей (наличие директив read и write), только запись (write only) и только чтение (read only).

В примере свойство Color предназначено для модификации и чтения поля fColor, а свойство fThickness – поля fThickness. Чтение будет производиться непосредственно путем обращения к полям, а запись – с помощью методов записи SetColor и SetThickness.

Доступ к свойствам похож на обычный доступ к полям данных, однако компилятор всегда транслирует обращения к свойствам в вызовы соответствующих методов доступа. Например, присваивание:

 

Color:=16;

 

будет транслировано в вызов:

 

SetColor(16);

 

Таким образом, свойства предоставляют пользователю интерфейс, полностью скрывающий реализацию объекта, и обеспечивают контроль доступа к нему со стороны внешних объектов.



Дата добавления: 2021-12-14; просмотров: 240;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.