Sobes.tech
Junior — Middle
148

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

Сұралған компаниялар
Pashapay

AI-дан жауап

sobes.tech 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 без изменения поведения.