С точки зрения проектирования интерфейсы можно разделить на:
- Изолирующий. Скрывает конструктивные особенности кода, но ссылается на конкретное внешне проявлямое поведение. Все утверждения (предикаты), которые к нему можно предъявить, должны оставаться неизменными вне зависимости от изменений внутреннего устройства. Когда это не так, говорят, что «абстракции протекают».
- Обобщающий. Представляет стабильную составляющую, как одну из граней кода, благодаря которой к нему можно обращаться единообразно, но не гарантирует полного совпадения поведения для разных кодов. Наоборот, позволяет передавать новые свойства коду, который его использует. Только часть утверждений относительно такого интерфейса остаётся неизменными, и они составляют его область применимости.
Пример изолирующего интерфейса — организация постоянного однотипного хранилища объектов без прямой зависимости клиента от нижележащего формата хранения.
Пример обобщающего — создание типизированного хранилища данных, для которого тип задаётся параметризируемо («абстрактно»). Тогда в зависимости от установленного типа данных меняется и тип хранилища, как и его совокупные свойства.
Эта сторона важна, но в популярных языках никак не обозначается. Зато они концетрируются на второстепенной для разработчика стороне интерфейса, так как она важна для самого инструментария:
- Статический. Связывание на этапе компиляции.
- Динамический. Определение конкретного поведения во время исполнения.
Комментариев нет:
Отправить комментарий