Sobes.tech
Junior — Middle
205

Можете привести пример реализации, которая нарушает или соблюдает принцип Барбары Лисков?

Компании, где спрашивали
AndersenAndersen
Верме

Ответ от нейросети

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.