Junior — Middle
Ar galite pateikti pavyzdį situacijos, kai pažeidžiamas Solid Liskov principas?
sobes.tech AI
Atsakymas iš 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 без изменения поведения.