Определение

Назначение инкапсуляции - сокрытие информации в одной части приложения от других частей. Цель такого сокрытия информации - отделение изменяемых частей приложения от неизменных (или разделение частей, меняющихся с разной скоростью / по разным причинам).

При правильной инкапсуляции клиентский код не будет знать детали инкапсулированной реализации состояния или поведения, а это - сокращение числа зависимостей. То есть с точки зрения клиентского кода лучше вызвать один метод без параметров, чем знать подробности реализации, вроде количества, порядка и смысла аргументов.

Дисциплина

Источники

Примеры

Простейшая форма - приватные поля класса, описываюшие его состояние. Можно инкапсулировать согласованные наборы данных и даже поведение путем вынесения их в отдельный класс.

Оценка качества инкапсуляции на уровне классов:

  • Сделаны ли члены класса минимально доступными?
  • Избегает ли класс предоставления доступа к своим данным-членам?
  • Скрывает ли класс детали реализации от других классов в максимально возможной степени, допускаемой языком программирования?
  • Избегает ли класс предположений о своих клиентах, в том числе о производных классах?
  • Независим ли класс от других классов? Слабо ли он связан?

Источник: Качество классов

Синонимы

  • Сокрытие информации
  • Концептуализация и абстрагирование идеи, т.к. это побочный эффект инкапсуляции. Чтобы “спрятать” куда-то данные и поведение, нужно создать новую абстракцию и каким-то образом ее назвать (определить концепт).

Ловушки

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