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