Liskov İlkesi'nin, programın mantığını bozmadan bir türü başka bir türle değiştirmek için kullanıldığı bir duruma örnek verebilir misin?
sobes.tech yapay zeka
AI'dan gelen yanıt
Принцип подстановки Лисков (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 там, где нужен полёт, не нарушая принцип Лисков.