Чистая архитектура - Мартин, Роберт Чистая архитектура:
Речь идёт о полной взаимозаменяемости классов, реализующих интерфейс. Однако на более высоком уровне этот принцип приобретает ещё более важное значение: компоненты системы должны придерживаться контрактов, иначе приложение будет заполнено многими “специальными случаями”.
Архитектура ПО в Spring 5 Архитектура ПО в Spring 5:
- Модули взаимодействуют с помощью абстракций или конкретных реализаций? Нет смысла взаимодействовать с реализациями при наличии интерфейсов. В случае пересечения архитектурных границ интерфейсы обязательны.
- Необходимо ли приведение типов для корректной работы с ООП-объектами? Нет.
- Взаимодействие модулей организовано с помощью операторов
IF
? Нет, нужно использовать полиморфизм.
Wikipedia: LSP
Для соблюдения принципа в ряде случаев можно отказаться от наследования.
Если необходимо пользоваться функциональностью другого класса и нет
необходимости ее изменять, то можно использовать делегирование. Например, класс
3DBoard
(трехмерное поле для настольных игр) может использовать массив классов
Board
, определять нужный экземпляр в массиве по координате z
и делегировать
остальную работу именно этому экземпляру.
Композиция позволяет использовать поведение из семейства других ООП-объектов, а также изменять это поведение во время выполнения. Важный момент - корневой ООП-объект владеет своим поведением и в случае уничтожения корневого ООП-объекта его ООП-объекты-поведения тоже будут уничтожены.
Агрегация похожа на композицию, но ООП-объекты-поведения существуют и вне контекста корневого ООП-объекта.