Sobes.tech
Назад к вопросам
Senior
3

Что такое принцип Барбары Лисков (LSP)? Можете привести пример нарушения?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

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

Пример нарушения LSP:

class Rectangle {
    protected int width, height;
    public void setWidth(int w) { width = w; }
    public void setHeight(int h) { height = h; }
    public int getArea() { return width * height; }
}

class Square extends Rectangle {
    @Override
    public void setWidth(int w) {
        width = height = w;
    }
    @Override
    public void setHeight(int h) {
        width = height = h;
    }
}

Здесь Square наследует Rectangle, но изменяет поведение методов setWidth и setHeight так, что нарушается ожидание, что ширина и высота можно менять независимо. Если код работает с Rectangle и ожидает, что можно менять ширину и высоту отдельно, то при передаче Square поведение изменится, что нарушает LSP.