Junior — Middle
66
Können Sie ein Beispiel für eine Situation geben, in der das Liskov-Prinzip bei der Verwendung von Vererbung oder Subklassenersetzung verletzt wird?
Antwort von AI
sobes.tech KI
Принцип подстановки Лисков (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.