Sobes.tech
Junior — Middle
103

Ar galite pateikti pavyzdį, iliustruojantį Liskovo pakaitos principą objektinio programavimo srityje?

Atsakymas iš AI

sobes.tech AI

Принцип подстановки Лисков (Liskov Substitution Principle, LSP) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами суперкласса без нарушения корректности программы.

Пример:

// Суперкласс
class Bird {
    void fly() {
        System.out.println("Птица летит");
    }
}

// Подкласс, корректно расширяющий поведение
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Воробей летит");
    }
}

// Нарушение LSP
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Страус не умеет летать");
    }
}

// Использование
void makeBirdFly(Bird bird) {
    bird.fly(); // Ожидается, что птица может летать
}

// Если передать Ostrich, метод fly() выбросит исключение, нарушая LSP.

Чтобы соблюдать LSP, лучше разделить иерархию:

interface Flyable {
    void fly();
}

class Bird {}

class Sparrow extends Bird implements Flyable {
    public void fly() { System.out.println("Воробей летит"); }
}

class Ostrich extends Bird {
    // Не реализует Flyable, так как не умеет летать
}

Так объекты подклассов можно использовать без неожиданного поведения.