Бағдарламаның логикасын бұзбай, бір типті басқа типпен ауыстыру үшін Лисковтің орынбасу қағидаты қолданылатын жағдайдың мысалын келтіре аласыз ба?
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 там, где нужен полёт, не нарушая принцип Лисков.