Sobes.tech
Junior — Middle
97

Бағдарламаның логикасын бұзбай, бір типті басқа типпен ауыстыру үшін Лисковтің орынбасу қағидаты қолданылатын жағдайдың мысалын келтіре аласыз ба?

Сұралған компаниялар
Магнит Тех
МТС БанкМТС Банк

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 там, где нужен полёт, не нарушая принцип Лисков.