Они часто используются взаимозаменяемо при обсуждении, и часто я думаю, что они работают вместе для достижения одной и той же цели, и хотя следующее может быть не совсем точным, оно может обеспечить некоторое значимое различие, если необходимо провести различие:
Когда речь идет об инкапсуляции, часто она реализуется как процедурный / функциональный механизм. Для базового состояния существует некоторый тип защиты, и для доступа через защиту требуется соблюдение определенных протоколов (чтение или изменение требуемого состояния). Инкапсуляция также дает возможность возникновения побочных эффектов из-за доступа (например, каскадного изменения состояния или уведомления / инициирования события / выдачи сигнала, когда объект, представляющий интерес, читается или изменяется), так что можно инициировать последующие действия. Опять же, я часто думаю о инкапсуляции как о концепции, которая реализуется как процедура.
Я вижу, что концепция сокрытия данных похожа на инкапсуляцию; однако механизм является структурным и работает на другом уровне. На практике, вместо обеспечения механизма защиты и побочных эффектов посредством процедуры, состояние защищается и подвергается воздействию через структурные механизмы языка и среды выполнения. Этими типами охранников могут быть предложения видимости, определения типов, наследование и тому подобное. Побочные эффекты, которые вы можете использовать от структурно охраняемых объектов, опять-таки зависят от языка и времени выполнения: возможно, активация объекта, подсчет ссылок или что-то в этом роде.