Інкапсуляція (програмування)

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

Приклади на Java та С++

На Java:

class Point {

  //можливий доступ лише з методів даного класу
  private int x, y; 

  //можливий доступ лише з методів даного класу
  private boolean visibility; 

  void createPoint(int a, int b) {
    x = a; y = b;
    visibility = true;
  }

  void setVisibility(boolean visibility) { 
    this.visibility = visibility;
  }

  int getX() { 
    return x; 
  }

  int getY() { 
    return y; 
  }
}

На С++:

class Point {

  //можливий доступ лише з методів даного класу
   int x, y; 
   bool visibility; 

public:
  void createPoint(int a, int b) {
    x = a; y = b;
    visibility = true;
  }

  void setVisibility(bool visibility) { 
    this->visibility = visibility;
  }

  int getX() { 
    return x; 
  }

  int getY() { 
    return y; 
  }
};

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

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

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

Див. також

Література

  • Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. Объектно-ориентированный анализ и проектирование с примерами приложений. — 3. — М. : Вильямс, 2008. — С. 8185.(рос.)
  • Пышкин Е. В. Основные концепции и механизмы объектно-ориентированного программирования. — СПб. : БХВ-Петербург, 2005. — С. 3035.(рос.)
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.