Junior — Middle
233
Можете привести пример реализации, которая нарушает или соблюдает принцип Барбары Лисков?
Сұралған компаниялар
Верме
AI-дан жауап
sobes.tech AI
Принцип Барбары Лисков (Liskov Substitution Principle, LSP) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами базового класса без нарушения корректности программы.
Пример нарушения LSP во Flutter:
class Bird {
void fly() {
print('Птица летит');
}
}
class Ostrich extends Bird {
@override
void fly() {
throw Exception('Страусы не умеют летать');
}
}
void main() {
Bird bird = Ostrich();
bird.fly(); // Ошибка во время выполнения
}
Здесь подкласс Ostrich нарушает LSP, так как замена базового класса Bird на Ostrich приводит к ошибке.
Пример соблюдения LSP:
abstract class Bird {
void move();
}
class FlyingBird extends Bird {
@override
void move() {
print('Птица летит');
}
}
class Ostrich extends Bird {
@override
void move() {
print('Страус бегает');
}
}
void main() {
List<Bird> birds = [FlyingBird(), Ostrich()];
for (var bird in birds) {
bird.move(); // Работает корректно для всех птиц
}
}
Здесь метод move реализован в базовом классе абстрактно, и каждый подкласс реализует его по-своему, не нарушая LSP.