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

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

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

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

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

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

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

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

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

Примеры

C++

<source lang="cpp"> class A {

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

}; </source>

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

C#

<source lang="csharp"> public class A {

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

}; </source>

Delphi

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

<source lang="delphi">

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

</source>

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

PHP5

<source lang="php"> class A {

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

}; </source>

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

См. также

bs:Zatvorenost 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:Інкапсуляція

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....