История изменений
Исправление AndreyKl, (текущая версия) :
Также это верно, если по какой-то цепочке наследования draw перекрыт более чем один раз.
это какая то необычная интерпритация принципа лисков. принцип в сущности то прост. на примере квадрата как подтипа прямоугольника всё просто:
У нас есть метод checkInvariants
который принимает прямоугольник
void checkInvariants(Pramougolnik pr) {
pr.setWidth(15)
pr.setHeight(20)
return pr.getWidth() == 15 && pr.getHeight() == 20
}
затем, в этот метод передаётся либо квадрат либо прямоугольник.
так вот для любого прямоугольника метод будет возвращать истину. а для квадрата ложь. Именно это и имеется ввиду когда говорят о принципе лисков. классы ведут себя по разному, инварианты нарушаются. То что вы с анонимусом можете задавать инварианты как угодно ежу впринципе понятно. Но вот чего вы никак не поймёте, так это то что _ожидаемое_ поведение для обычного класса в обычной ситуации - это посавить видтх в 15 и получить обратно 15. то же и с высотой. И нормальный программист будет ожидать нормального поведения когда будет работать с классом. а оно чёртас два нормальное. установил ширину в 15, потом никого не трогая установил высоту, а высота поменялась. А у прямоугольника не менялась. Вот в этом то и нарушение принципа. Вы с анонимусом задрали безграмотностью. книжек что ли почитайте вумных.
АПД. ну и да, это лишь пример
Исходная версия AndreyKl, :
Также это верно, если по какой-то цепочке наследования draw перекрыт более чем один раз.
это какая то необычная интерпритация принципа лисков. принцип в сущности то прост. на примере квадрата как подтипа прямоугольника всё просто:
У нас есть метод checkInvariants
который принимает прямоугольник
void checkInvariants(Pramougolnik pr) {
pr.setWidth(15)
pr.setHeight(20)
return pr.getWidth() == 15 && pr.getHeight() == 20
}
затем, в этот метод передаётся либо квадрат либо прямоугольник.
так вот для любого прямоугольника метод будет возвращать истину. а для квадрата ложь. Именно это и имеется ввиду когда говорят о принципе лисков. классы ведут себя по разному, инварианты нарушаются. То что вы с анонимусом можете задавать инварианты как угодно ежу впринципе понятно. Но вот чего вы никак не поймёте, так это то что _ожидаемое_ поведение для обычного класса в обычной ситуации - это посавить видтх в 15 и получить обратно 15. то же и с высотой. И нормальный программист будет ожидать нормального поведения когда будет работать с классом. а оно чёртас два нормальное. установил ширину в 15, потом никого не трогая установил высоту, а высота поменялась. А у прямоугольника не менялась. Вот в этом то и нарушение принципа. Вы с анонимусом задрали безграмотностью. книжек что ли почитайте вумных.