Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции програм_new_последняя версия1.doc
Скачиваний:
14
Добавлен:
14.09.2019
Размер:
697.34 Кб
Скачать

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

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

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

Пример:

Type <имя класса>=class

private . . .

protected . . .

public . . .

published . . .

end;

Т.о. поля, методы и свойства могут быть:

  1. private – личные

  2. protected – защищенные

  3. public – общие

  4. published – опубликованные

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

2) Поля, методы и свойства секции protected также доступны внутри модуля с описанным классом, но кроме этого (и это главное) они доступны в классахпотомках данного класса, в том числе и в других модулях. Это особенно необходимо для разработчиков классов – потомков.

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

4) Секция published имеет особое значение для интерфейса визуального программирования в Delphi. Все, что помещено в секцию published, доступно инспектору объекта во время разработки проекта, т.е. здесь собраны те свойства объекта, которые будут видны не только во время исполнения приложения , но и из среды разработки.

Рассмотрим пример, который иллюстрирует три области видимости:

Пример. Рассмотрим два модуля (Unit First и Unit Second)

Unit First;

interface

type TFirstObj=class

private // личные

procedure metod1;

protected // защищенные

procedure metod2;

public // общие

procedure metod3;

// методы 1,2,3 – методы класса

end;

procedure TestProc1;

implementation

Uses Dialogs;

var AFirstObj:TFirstObj; //описанный объект AFirstObj класса

// TFirstObj

procedure TestProc1;

begin AFirstObj:=TFirstObj.Create;

AFirstObj.Metod1;

AFirstObj.Metod2;

AFirstObj.Metod3; //внутри модуля класса допустимы все

// три обращения

AFirstObj.Free;

end;

procedure TFirstObj.Metod1;

begin show Message (‘1’); //вывод информации в окно сообщения

end;

procedure TFirstObj.Metod2;

begin show Message (‘2’);

Metod1;

end;

procedure TFirstObj.Metod3;

begin show Message (‘3’);

end;

End. // конец модуля First

-----------------------------------------------------------------

Unit Second; // начало модуля Second

interface

Uses First; // использует модуль First

type TSecondObj=class(TFirstObj)

procedure Metod4;

end;

procedure TestProc2; // процедура модуля Second

implementation

var AFirstObj:TFirstObj; // объект класса TFirstObj

ASecondObj:TSecondObj; // объект класса TSecondObj

procedure TSecondObj.Metod4;

begin Metod1; // не допустимо, т.к. Metod1 не доступен

// в другом модуле

Metod2; // допустимо, т.к. класс TSecondObj является

// потомком класса TFirstObj

Metod3; // допустимо, т.к. Metod3 описывается в секции

//public

end;

procedure TestProc2;

begin AFirstObj:=TFirstObj.Create;

AFirstObj.Metod1; // не допустимо т.к. Metod1

//не доступен в другом модуле

AFirstObj.Metod2; // не допустимо т.к. в описании

// Metod2 есть обращение к Metod1

AFirstObj.Metod3; // допустимо

AFirstObj.Free;

end;

. . . . . . . . . . . . . . . . . . . . .

End. // конец модуля Second

Три области видимости private, protected, public упорядочены по возрастанию видимости методов. В классах–потомках можно повысить видимость методов и свойств, но не понизить её.