Инкапсуляция (программирование)

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

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

  • Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью директив: public, private, protected.
  • Пользователь не может влиять на работу объекта, кроме как через интерфейс. Реализутеся с помощью использования закрытых данных и методов, значения которых берутся из открытого интерфейса при создании объекта.

Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием).

Предостережение: Одна из наиболее распространенных ошибок — делать сокрытие реализации только ради сокрытия. Целями, достойными усилий, являются:

  • предельная локализация изменений при необходимости таких изменений,
  • прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.

Образ в пример: ложка, опущенная в стакан, не меняет его свойств и не становится частью стакана, хотя и помогает пить из него чай; в то же время, сахар, растворенный в чае с помощью ложки, делает его сладким.

Часто инкапсуляция может быть достигнута простейшими организационными мерами: знание того, что «вот так-то делать нельзя» иногда является самым эффективным средством инкапсуляции!

Содержание

Примеры

C++

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

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

C#

public class A 
{
 public int a; // открытый интерфейс
 public int b; // открытый интерфейс
 public int ReturnSomething(); // открытый интерфейс
 private int Aa = a; //безопасное использование открытого интерфейса
 private int Ab = b; //безопасное использование открытого интерфейса
 private void DoSomething(); // скрытый метод.
};

Delphi

В Delphi для создания скрытых полей или методов их достаточно объявить в секции private.

  TMyClass = class
  private
    FMyField: Integer;
    procedure SetMyField(const Value: Integer);
    function GetMyField: Integer;
  protected
  public
    property MyField: Integer read GetMyField write SetMyField;
  end;

Для создания интерфейса доступа к скрытым полям в Delphi введены свойства.

PHP5

class A 
{
 private $a; // скрытое свойство
 private $b; // скрытое свойство
 private function DoSomething() //скрытый метод
 {  
  //actions
 }
 
 public function ReturnSomething() //открытый интерфейс
 { 
  //actions
 }
};

В этом примере закрыты свойства $a и $b для класса A с целью предотвращения повреждения этих свойств другим кодом которому необходимо предоставить только права на чтение.

См. также

de:Datenkapselung (Programmierung) en:Encapsulation_(computer_science) fr:Encapsulation (programmation) it:Incapsulamento (informatica) ja:カプセル化 lt:Inkapsuliacija nl:Inkapseling pl:Enkapsulacja pt:Encapsulamento sv:Inkapsling (Information Hiding) uk:Інкапсуляція

Личные инструменты

Served in 0.140 secs.