|
|||||||||||||||||||
|
ИнкапсуляцияОбъединение кода и данных вместе в объектах называется инкапсуляцией. Если Вы любите докапываться до сути, то Вы можете обеспечить такое количество методов, чтобы пользователю объекта никогда не потребовался прямой доступ к полям объекта. Подобно Smalltalk и другим объектно-ориентированным языкам, Turbo Pascal дает Вам возможность принудительной инкапсуляции через использование директивы private. В этом примере мы не хотим указывать раздел private для полей и методов, вместо этого, мы ограничимся непосредственным использованием методов для доступа к данным. Примечание: Объявление полей как private означает возможность доступа к ним только через методы. Location и Point написаны так, что прямой доступ к любым внутренним полям данных совершенно не нужен: type Location = object X,Y : Integer; procedure Init(InitX, InitY : Integer); function GetX : Integer; function GetY : Integer; end; Point = object (Location) Visible : Boolean; procedure Init(InitX, InitY : Integer); procedure Show; virtual; procedure Hide; virtual; function IsVisible : Boolean; procedure MoveTo(NewX, NewY : Integer); end; Здесь есть только три поля данных: X, Y и Visible. MoveTo метод присваивает новые значения X и Y, GetX и GetY методы возвращают значения X и Y. Поэтому прямого доступа к X, Y в дальнейшем не потребуется. Show и Hide переключают булевскую переменную Visible между True и False, а IsVisible функция возвращает текущее состояние Visible. Предположив, что экземпляр типа Point называется APoint, Вы можете использовать этот набор методов для непрямого управления полями данных APoint, например: with APoint do begin Init(0, 0); {инициализирует новую точку в 0,0} Show; {делает точку видимой} end; Заметим, что к полям данных объекта доступа нет вообще, за исключением методов объекта. Предыдущая страница | Следующая страница |
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил