Sobes.tech
Back to questions
Junior — Middle
78

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

Companies where asked
Магнит Тех
МТС БанкМТС Банк

Answer from AI

sobes.tech AI

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

Пример из iOS: есть базовый класс Bird с методом fly(). Если мы создадим подкласс Penguin, который не умеет летать, то замена Bird на Penguin нарушит логику, если где-то вызывается fly().

Правильный подход — выделить интерфейс или базовый класс для летающих птиц, например FlyingBird, и реализовать fly() только там. Тогда Penguin будет наследоваться от Bird, но не от FlyingBird. Это позволит заменить объекты FlyingBird на подклассы без нарушения логики.

class Bird {
  func eat() {
    print("Птица ест")
  }
}

protocol FlyingBird {
  func fly()
}

class Sparrow: Bird, FlyingBird {
  func fly() {
    print("Воробей летит")
  }
}

class Penguin: Bird {
  // Пингвин не летает, fly() не реализует
}

Так можно безопасно использовать объекты FlyingBird там, где нужен полёт, не нарушая принцип Лисков.