Senior
Cos'è il principio di Barbara Liskov (LSP)? Puoi fare un esempio di violazione?
sobes.tech AI
Risposta dell'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.