Принцип замещения Барбары Лисков (Liskov Substitution Principle).
Согласно этому принципу, объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы.
Иными словами, если класс B является подтипом класса A, тогда любой объект типа A в программе может быть заменен на объект типа B, и при этом программа продолжит работать корректно.
Этот принцип помогает создавать более гибкую и устойчивую к изменениям архитектуру, минимизируя побочные эффекты при работе с наследованием.
Нарушение LSP:
swift
В примере Square нарушает LSP, так как изменение одного измерения (width или height) также меняет другое. Если мы используем объект Square там, где ожидался Rectangle, это может привести к неожиданному поведению, так как код, работающий с Rectangle, может предполагать возможность независимого изменения сторон.
Соответствие LSP:
Чтобы соблюсти LSP в данном случае, можно разделить иерархию или использовать композицию вместо наследования для Square. Например, ввести общий интерфейс или протокол для фигур, которые имеют площадь, и реализовать его в Rectangle и Square.
swift
Теперь Square и Rectangle реализуют общий протокол Shape, и мы можем использовать объекты обоих классов там, где ожидается Shape, без нарушения ожидаемого поведения.