Директивы видимости
Ключевая идея объектного подхода заключается в сокрытии информации. В хорошо спроектированном классе никакие изменения внутри не должны отражаться на пользователях данного класса. Директивы видимости, используемые в объектной модели языка Паскаль, позволяют ограничить доступность элементов класса.
Существует четыре уровня сокрытия информации, которые задаются директивами 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; просмотров: 318;