Back to questions
Junior — Middle
118
Можешь привести пример ситуации, когда нарушается принцип Лисков из Solid?
Companies where asked
Pashapay
Answer from 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 без изменения поведения.