Μπορείς να δώσεις ένα παράδειγμα μιας κατάστασης όπου εφαρμόζεται η αρχή του Liskov για την αντικατάσταση ενός τύπου με έναν άλλο χωρίς να παραβιάζεται η λογική του προγράμματος;
sobes.tech AI
Απάντηση από 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 там, где нужен полёт, не нарушая принцип Лисков.