L означает Liskov Substitution Principle (Принцип подстановки Барбары Лисков).
Этот принцип гласит, что объекты базового класса должны быть заменяемыми объектами производного класса без нарушения корректности выполнения программы. Иными словами, если S является подтипом T, то объекты типа T могут быть заменены объектами типа S.
Пример нарушения:
java
В этом примере Square нарушает LSP, потому что метод setHeight в Square также изменяет width, что не ожидается от Rectangle. Код, написанный для работы с Rectangle, может некорректно работать с Square.
Пример соблюдения:
java
Здесь RectangleWithLSP и SquareWithLSP реализуют один и тот же интерфейс Shape, и их методы ведут себя ожидаемым образом, что соответствует LSP.
Соблюдение LSP помогает создавать более гибкие, расширяемые и поддерживаемые системы, предотвращая неожиданное поведение при использовании подтипов.