Sobes.tech
Junior — Middle

Ar galėtumėte pateikti pavyzdį, kaip taikyti Liskovo principą praktiniame kode ar sistemoje?

sobes.tech AI

Atsakymas iš AI

Принцип подстановки Лисков (Liskov Substitution Principle) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами базового класса без нарушения корректности программы.

Пример на Dart (Flutter):

abstract class Bird {
  void fly();
}

class Sparrow implements Bird {
  @override
  void fly() {
    print('Воробей летит');
  }
}

class Ostrich implements Bird {
  @override
  void fly() {
    throw Exception('Страус не умеет летать');
  }
}

void makeBirdFly(Bird bird) {
  bird.fly();
}

void main() {
  makeBirdFly(Sparrow()); // Работает корректно
  makeBirdFly(Ostrich()); // Нарушение принципа Лисков
}

В этом примере класс Ostrich нарушает принцип Лисков, так как не может корректно заменить Bird (не умеет летать). Чтобы соблюсти принцип, лучше разделить интерфейсы, например, выделить интерфейс летающих птиц.