Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

Инкапсуляция


 Предыдущая страница     |     Следующая страница
Добавить в избанное Обсудить в форуме Написать автору сайта

     Объединение кода   и   данных  вместе  в  объектах  называется инкапсуляцией.  Если Вы любите докапываться до сути,  то Вы  можете обеспечить  такое  количество  методов,  чтобы пользователю объекта никогда не потребовался прямой  доступ  к  полям  объекта.  Подобно 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 программирование: Бурлаков Михаил

Используются технологии uCoz