Инкапсуляция (программирование)
Материал из 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:Інкапсуляція