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