LINUX.ORG.RU

История изменений

Исправление 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, потом никого не трогая установил высоту, а высота поменялась. А у прямоугольника не менялась. Вот в этом то и нарушение принципа. Вы с анонимусом задрали безграмотностью. книжек что ли почитайте вумных.