Закоулки мозга

Чистая архитектура - Мартин, Роберт Чистая архитектура:

Речь идёт о полной взаимозаменяемости классов, реализующих интерфейс. Однако на более высоком уровне этот принцип приобретает ещё более важное значение: компоненты системы должны придерживаться контрактов, иначе приложение будет заполнено многими “специальными случаями”.

Архитектура ПО в Spring 5 Архитектура ПО в Spring 5:

  • Модули взаимодействуют с помощью абстракций или конкретных реализаций? Нет смысла взаимодействовать с реализациями при наличии интерфейсов. В случае пересечения архитектурных границ интерфейсы обязательны.
  • Необходимо ли приведение типов для корректной работы с ООП-объектами? Нет.
  • Взаимодействие модулей организовано с помощью операторов IF? Нет, нужно использовать полиморфизм.

Wikipedia: LSP

Для соблюдения принципа в ряде случаев можно отказаться от наследования.

Если необходимо пользоваться функциональностью другого класса и нет необходимости ее изменять, то можно использовать делегирование. Например, класс 3DBoard (трехмерное поле для настольных игр) может использовать массив классов Board, определять нужный экземпляр в массиве по координате z и делегировать остальную работу именно этому экземпляру.

Композиция позволяет использовать поведение из семейства других ООП-объектов, а также изменять это поведение во время выполнения. Важный момент - корневой ООП-объект владеет своим поведением и в случае уничтожения корневого ООП-объекта его ООП-объекты-поведения тоже будут уничтожены.

Агрегация похожа на композицию, но ООП-объекты-поведения существуют и вне контекста корневого ООП-объекта.