Инкапсуляция начинается там, где заканчивается абстракция. Абстракция говорит: «Вам разрешено смотреть на объект с высоким уровнем детализации». Инкапсуляция гласит: «Кроме того, вам не разрешено смотреть на объект на каком-либо другом уровне детализации».
— Code Complete
Итак, что мы здесь видим?
Абстракция больше связана с кластеризацией похожих объектов: абстрактные часы не означают ничего конкретного о механизме часов, они могут быть электронными, кварцевыми или автоматическими.
Механизм реализации в ООП: абстрактный класс.
Инкапсуляция больше связана с предоставлением интерфейса взаимодействия: можно считывать время с часов, подзаряжать их, брать с собой, но что здесь самое главное — не вглядываясь в детали выполнение.
Автоматические и кварцевые часы снаружи выглядят одинаково, но механически они разные внутри.
Внутренние части часов инкапсулированы.
Механизм реализации в ООП: интерфейс.
Что это значит практически?
Нижний уровень абстракции обеспечивает более подробный интерфейс:
- Абстрактно, все часы являются часами, не может быть подробного интерфейса, все, что мы знаем на этом уровне — это часы showTime()
- Тогда мы можем определить более низкий уровень абстракции: часы-хронометр. Здесь мы точно знаем, интерфейс будет предоставлять функции start()
и stop()
Объекты с одинаковым интерфейсом можно заменить: в зависимости от ситуации вы можете заменить механический хронометр на электронный.
Объекты более низкого уровня абстракции могут заменить объекты более высокого уровня: если вам нужны какие-либо часы (просто чтобы посмотреть время), вам подойдет хронометр, т.к. он имеет showTime()
и, как дополнение к нему, start()
и stop().
Вот ссылка на ЛСП