Kun je een voorbeeld geven van een situatie waarin het Liskov-principe wordt toegepast om het ene type te vervangen door een ander zonder de logica van het programma te verstoren?
sobes.tech AI
Antwoord van 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 там, где нужен полёт, не нарушая принцип Лисков.