Інкапсуляція

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Інкапсуляція — один з трьох основних механізмів об'єктно-орієнтованого програмування. Йдеться про те, що об’єкт вміщує не тільки дані, але і правила їх обробки, оформлені в вигляді виконуваних фрагментів (методів). А також про те, що доступ до стану об'єкта напряму заборонено, і ззовні з ним можна взаємодіяти виключно через заданий інтерфейс (відкриті поля та методи), що дозволяє знизити зв'язність. Таким чином контролюються звернення до полів класів та їхня правильна ініціалізація, усуваються можливі помилки пов'язані з неправильним викликом методу. Оскільки користувачі працюють лише через відкриті елементи класів, то розробники класу можуть як-завгодно змінювати всі закриті елементи і навіть перейменовувати та видаляти їх, не турбуючись, що десь хтось їх використовує у своїх програмах.

Приклад на Java[ред.ред. код]

class Point {
 
  //можливий доступ лише з методів даного класу
  private int x,y; 
 
  //можливий доступ лише з методів даного класу
  private boolean _visibility; 
 
  void createPoint (int a, int b) {
   x=a; y=b;
   visible = true;
  }
  void setVisibility(boolean visibility){ 
   _visibility = visibility;
  }
 
  int getX() { 
   return x; 
  }
 
  int getY() { 
   return y; 
  }
}

У цьому прикладі клас Point інкапсулює (приховує) координати точки. Доступ до них можливий лише за певними правилами, які реалізовуються через відповідні методи. Такими правилами можуть бути, наприклад, операція створення точки (установка значень координат), а також операції “увімкнення” і “вимкнення” видимості точки, отримання координат.

Як видно з прикладу, для створення точки необхідно вказати координати точки і "увімкнути" дану точку (зробити її видимою). Якщо б клас був повністю відкритий, то можна б було вручно встановити відповідні поля класу х, y та встановити visible в true. Проте програміст може легко забути встановити якусь з координат або забути встановити видимість. Метод createPoint забезпечує виконання усіх необхідних дій, а закриття доступу до координат змушує діяти лише через використання даного методу. Інкапсульованими також можуть бути і методи класу.

В ООП рекомендується з самого початку створювати закриті поля і лише в разі крайньої необхідності надавати ширший доступ до них. Для роботи із закритими полями класів краще використовувати відповідний метод доступу (getter) та метод мутатор (setter).

Див. також[ред.ред. код]