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.