Sobes.tech
Junior — Middle
57

Можете привести пример ситуации, где принцип Лисков нарушается при использовании наследования или замены подкласса?

Answer from AI

sobes.tech AI

Принцип подстановки Лисков (Liskov Substitution Principle, LSP) нарушается, когда подкласс изменяет поведение базового класса так, что объекты подкласса не могут заменить объекты базового класса без изменения корректности программы.

Пример на Python:

class Bird:
    def fly(self):
        print("Я лечу")

class Sparrow(Bird):
    pass

class Ostrich(Bird):
    def fly(self):
        raise Exception("Страус не умеет летать")

# Использование
birds = [Sparrow(), Ostrich()]
for bird in birds:
    bird.fly()  # Здесь Ostrich нарушает LSP, так как вызывает исключение вместо полёта

Здесь класс Ostrich наследует Bird, но метод fly ведёт себя иначе — выбрасывает исключение, тогда как базовый класс предполагает, что метод fly всегда работает. Это нарушает LSP, так как код, работающий с объектами Bird, не сможет корректно работать с Ostrich.