Sobes.tech
Junior — Middle

Puoi fare un esempio di una situazione in cui viene violato il principio di Liskov di Solid?

sobes.tech AI

Risposta dell'AI

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

Пример нарушения:

Представим, что есть базовый класс Bird с методом fly(). Подкласс Penguin наследует Bird, но пингвины не умеют летать. Если в коде, где ожидается любой Bird, вызывается fly(), то для Penguin это приведёт к ошибке или неправильному поведению.

class Bird {
  void fly() {
    print('Летит');
  }
}

class Penguin extends Bird {
  @override
  void fly() {
    throw Exception('Пингвины не умеют летать');
  }
}

void makeBirdFly(Bird bird) {
  bird.fly();
}

void main() {
  Bird sparrow = Bird();
  Bird penguin = Penguin();

  makeBirdFly(sparrow); // Работает
  makeBirdFly(penguin); // Ошибка, нарушение принципа Лисков
}

В этом случае Penguin нарушает принцип Лисков, так как не может заменить Bird без изменения поведения.