Sobes.tech
Senior
36

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

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

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.