Sobes.tech
Junior — Middle
233

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

Сұралған компаниялар
AndersenAndersen
Верме

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.