Инструменты пользователя

Инструменты сайта


examination:oop:question5

5. Инкапсуляция данных и скрытие информации.

Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.

    class A 
    {
    public:
        int a, b; //данные открытого интерфейса
        int ReturnSomething(); //метод открытого интерфейса
    private:
        int Aa, Ab; //скрытые данные
        void DoSomething(); //скрытый метод
    };

Класс А инкапсулирует свойства Aa, Ab и метод DoSomething, представляя внешний интерфейс ReturnSomething, a, b.

Пример из жизни

Например, кофеварка. Простая снаружи: кнопка, индикатор, отверстия,… И, конечно, кофе:

Но внутри… (картинка из пособия по ремонту)

Масса деталей. Но мы можем пользоваться ей, совершенно не зная об этом.

Кофеварки — довольно-таки надежны, не правда ли? Можно пользоваться годами, и только когда что-то пойдет не так — придется нести к мастеру.

Секрет надежности и простоты кофеварки — в том, что все детали отлажены и спрятаны внутри. Если снять с кофеварки защитный кожух, то использование её будет более сложным (куда нажимать?) и опасным (током ударить может). Здесь, как мы увидим, объекты очень схожи с кофеварками. (C)


1. Инкапсуляция в ООП – сосредоточение и сокрытие атрибутов и методов в классе или объекте. Можно осуществлять на 2-х уровнях – класса и объекта.

2. Смысл: инкапсуляция означает, что реализация атрибутов и методов скрыта от пользователя объекта или класса.

3. Цель: организовать доступ пользователя к атрибутам и методам так, чтобы предотвратить несанкционированное использование.

4. Инкапсуляция является развитием принципа модульности в построении ПО.

6. Защита от ошибок программиста заключается в неразрешенных объектах, способах использования методов (атрибутов).

7. Сокрытие позволяет программисту изменять реализацию класса, не изменяя его возможностей для пользователя (не менять интерфейс).

8. Развитие методов модульного программирования.

9. Понятие инкапсуляции является развитием областей видимости в типизированных языках.

10. 2 уровня защиты: - к переменной определенного типа нельзя применять действия, непредусмотренные этим типом; - правила видимости типов;

Скрывать можно и атрибуты, и методы.

Инкапсуляция модели ООП

1. Сосредоточение атрибутов и методов в объекте или классе осуществляется размещением методов и атрибутов в частях класса.

2. сокрытие атрибутов и методов осуществляется введением правил видимости для атрибутов и методов в объекте или классе.

3. концептуальная модель ООП предполагает 2 области видимости: - методы видны для всех пользователей класса - методы видны только для объектов данного класса

В общем случае методы могут быть:

- методами объекта, для которого вызван метод - атрибутами дружественного объекта того же класса

Пример:

Класс Точка Атрибуты: целый Х, целый У. Методы: Переместить в точку (точка Q)

{

  x=Q.x
  y=Q.y
};

4. Правило 2 допускает 2 толкования:

1) Атрибуты класса видимы в телах всех методов класса, включая методы того объекта, для которого вызван метод.

Пример1:

Класс Точка Атрибуты: целый Х, целый У. Методы:

Переместить в точку (точка Q) /* атрибут того объекта, для которого будет вызван этот метод */

2) Атрибуты класса видимы только в телах методов того объекта, для которого вызван метод.

Пример2:

Класс Точка Атрибуты: целый Х, целый У.

Методы:

Целый ПолучитьХ(); Целый ПолучитьУ();

Переместить в точку (точка Q) {

 X=Q.ПолучитьХ();
 Y=Q.ПолучитьУ();

};

5. Два указанных толкования породили 2 направления развития ОО языков. Толкование 1) породило направление, в котором область видимости атрибута – весь класс (симула). Толкование 2) породило направление, где областью видимости является объект, т.е. атрибуты класса видимы только объекту, для которого вызваны (small tolk)

6. В концептуальной модели ООП интерфейс класса образуют все методы класса

Особенности реализации инкапсуляции в классе языка С++

1. В классе С++ члены-данные и члены-функции подчиняются общим правилам задания доступа.

2. В С++ уровни доступа членов класса определяются видом секции, в которой размещено определение или описание членов класса (методы не могут быть отнесены к атрибутам).

3. В С++ предлагаются 3 уровня доступа (открытый, закрытый, защищенный). В концептуальной модели

– открытый для методов и закрытый для атрибутов.

4. В С++ уровень доступа, определенный для всех членов класса, является одинаковым для всех объектов класса. В концептуальной модели – для внешних пользователей класса уровень доступа для всех членов класса является общим для всех объектов.

Концептуальная модель допускает 2 толкования для внутреннего пользователя класса.

5. В С++ из правила, сформулированного в пункте 4 есть единственное исключение. Если объект некоторого класса передается в функцию-член того же класса в качестве параметра, то эта функция имеет прямой доступ к членам передаваемого объекта.

Пример: реализация прямого доступа к члену объекта класса, передаваемому функции-члену того же класса в качестве параметра.

Class Point
  {
      int X;
      int Y;
      public:
      void MoveToPoint(Point Q)
         {
             X=Q.X;  Y=Q.Y;
          }
   }

6. Член-функция класса С++ может напрямую обращаться только к членам того объекта, для которого она вызвана.

7. Класс С++ может «открывать класс» для авторизированных пользователей. «Открывать класс» означает, что класс предоставляет доступ к закрытым и защищенным членам класса функциям, которые членами этого класса не являются.

Авторизированные пользователи – те сущности программы, которым класс предоставляет возможность использовать закрытые сущности класса.

Сущности – все или частично функции других классов или функции, не принадлежащие никакому классу.

В С++ такие сущности имеют атрибут friend и называются друзьями класса.

8. Уровни доступа, установленные в классе могут быть переданы классу по наследству либо с изменениями, либо без них.

examination/oop/question5.txt · Последние изменения: 2014/01/15 08:22 (внешнее изменение)