На перегрузку методов накладывается ограничение - нельзя перегружать методы, находящиеся в области видимости published, m. е. me, которые будут использоваться в Инспекторе объектов.

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

При описании нового класса важен разумный компромисс. С одной стороны, требуется скрыть от других методы и поля, представляющие собой внутреннее устройство класса (для этого и придуманы свойства). Маловажные детали на уровне пользователя объекта будут бесполезны и только помешают целостности восприятия.

С другой стороны, если слишком ограничить того, кто будет порождать классы-потомки, и не обеспечить ему достаточный набор инструментальных средств и свободу маневра, то он и не станет использовать ваш класс.

В модели объектов языка Object Pascal существует механизм доступа к составным частям объекта, определяющий области, где ими можно пользоваться (области видимости). Поля и методы могут относиться к четырем группам (секциям), отличающимся областями видимости. Методы и свойства могут быть общими (секция public), личными (секция private), защищенными (секция protected) и опубликованными (секция published). Есть еще и пятая группа, automated, она ранее использовалась для создания объектов СОМ; теперь она присутствует в языке только для обратной совместимости с программами на Delphi версий 3-5.

Области видимости, определяемые первыми тремя директивами, таковы.

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

О Поля, свойства и методы, находящиеся в секции private, доступны только в методах класса и в функциях, содержащихся в том же модуле, что и описываемый класс. Такая директива позволяет полностью скрыть детали внутренней реализации класса. Свойства и методы из секции private можно изменять, и это не будет сказываться на программах, работающих с объектами этого класса. Единственный способ для кого-то другого обратиться к ним - переписать заново созданный вами модуль (если, конечно, доступны исходные тексты).

□ Поля, свойства и методы секции protected также доступны только внутри модуля с описываемым классом. Но - и это главное - они доступны в классах, являющихся потомками данного класса, в том числе и в других модулях. Такие элементы особенно необходимы для разработчиков новых компонентов - потомков уже существующих. Оставляя свободу модернизации класса, они все же скрывают детали реализации от того, кто только пользуется объектами этого класса.

Рассмотрим пример, иллюстрирующий три варианта областей видимости.

unit First; interface

type

TFirstObj = class private

procedure Methodl; protected

procedure Method2; public

procedure Method3;
end;
procedure TestProcl;
unit Second;
interface uses First;

type

TSecondObj = class(TFirstObj)

procedure Method4;
end;
procedure TestProc2;

implementation

uses dialogs;
var AFirstObj: TFirstObj;
procedure TestProcl;
begin
AFirstObj := TFirstObj.Create;
AFirstObj.Methodl;
{допустимо} AFirstObj.Method2;
{допустимо} AFirstObj.Method3;
{допустимо} AFirstObj.Free;
end;

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс