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