Найти тему
Легко в’IT

Принцип подстановки Барбары Лисков

Теперь про третий принцип из обоймы принципов SOLID. Имя ему "Принцип подстановки Барбары Лисков" (он же Liskov substitution principle, он же LSP)

По этому принципу, подклассы должны быть способны заменять свои родительские классы, от которых они наследуются без изменения правильности выполнения программы. Ну то есть, что код, который ожидает экземпляр базового класса, должен также корректно работать с экземпляром подкласса без неожиданных побочных эффектов.

Если класс не соблюдает принцип LSP, то это может привести к ошибкам выполнения программы, ухудшению ее поддерживаемости и расширяемости, ну и ограничениям в работе с подклассами.

Как водится, пример, когда класс нарушает этот принцип. Если базовый класс описывает методы для чтения и записи определенных свойств, то подкласс, расширяющий этот класс, не должен ограничивать чтение и запись этих свойств, иначе это приведет к неочевидности работы нового класса, ведь программист, который будет его использовать готовым ожидает, что аналогичные с базовым классом методы, будут работать так же.
Иными словами, если в базовом классе описания гитар, мы можем получить ее свойства в виде материала деки, метериала резонатора, количества струн и типа гитары, то в классе-наследнике как минимум должны передаваться эти же самые свойства. Если будет передаваться больше свойств, то это не будет нарушением принципа.