Скрытие информации - это когда разработчик специально решает ограничить доступ к деталям реализации. Этот принцип старше, чем объектно-ориентированный дизайн, но часто используется.
Простой пример - определение констант в C, например, #define NAME_SIZE 15
Код (клиенты) константы не должен знать ее значение и не будет обеспокоен, если вы (дизайнер) решите изменить ее ценность позже. Они не должны делать предположения о том, что на самом деле 15, потому что вы можете решить изменить его.
Абстракция - это когда вы имеете дело с агрегатом, например, автомобиль - это абстракция деталей, таких как шасси, мотор, колеса и т. Д. Абстракции позволяют нам думать о сложных вещах в более простой способ.
Инкапсуляция - это то, как мы определяем уровень детализации элементов, составляющих наши абстракции. Хорошая инкапсуляция применяется для сокрытия информации, чтобы обеспечить ограничение деталей. Например, мой Автомобиль в действительности состоит из всех его частей, но он предоставляет мне (водителю) только тот интерфейс, который соответствует моим потребностям, и не более того. Я могу управлять дверями, замками, окнами, освещением, звуковым сигналом, люком в крыше, направлением движения, ускорением, замедлением и т. Д. Хотя мне может быть любопытно управлять деталями «как» всех этих вещей, капсулирование предотвращает меня видеть больше.
Если реализация моего автомобиля изменится (я перехожу с двигателя внутреннего сгорания на электрический или гибридный), потому что я, как водитель, знаю только ограниченный интерфейс, мне не нужно менять способ управления автомобилем. Абстракция позволяет мне просто знать, что я за рулем автомобиля, вместо сотен кусочков металла, резины и т. Д.
Примером, где информация скрывалась как , а не часть автомобиля, может быть воздушная заслонка . Мои родители рассказали мне, как те работали в машинах, которые они водили ... это была деталь с двигателем внутреннего сгорания, которая бесполезна в электромобиле.