Принцип инкапсуляции выразительно устанавливается законом Деметры . «Для любого класса C и для любого метода M, связанного с C, все объекты, которым M посылает сообщение, должны быть экземплярами классов, ассоциированными со следующими классами:
В терминах UML закон гласит, что объект должен иметь доступ только к тем объектам, с которыми непосредственно связан (классы объектов непосредственно соединены ассоциацией).
Смысл состоит в том, что метод должен обладать лишь ограниченным знанием модели классов. Метод может проходить по связям для получения соседних объектов и вызова их методов, но он не должен обладать возможностью прохождения по вторичной связи от своего соседа к сторонним объектам, поскольку вторичная связь не является для него непосредственно видимой. Для обхода неподсоединенных объектов полагается вызывать соответствующие методы соседних объекта. Этот подход уменьшает воздействие на методы изменений в сети ассоциаций.
Аналогично, следует избегать применения вторичного метода к результату вызова метода, если только класс результата не является уже известным в качестве класса атрибута, аргумента, соседнего объекта или класса результата из низкоуровневой библиотеки. Вместо этого для выполнения комбинированного метода следует написать новый метод в исходном целевом классе.
У инкапсуляции имеются две основные мотивировки:
При отсутствии инкапсуляции в пределе метод мог бы обходить все ассоциации модели классов.