История изменений
Исправление AndreyKl, (текущая версия) :
to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
однако ты трактуешь очень широко. просто выбери _нужные_ _тебе_ свойства, и строй для них иерархию, и у тебя будет соблюдаться принцип.
если в примере про прямоугольник и квадрат ты уберёшь инварианты для видтх и хейгхт. то у тебя, как заметил анонимус, всё сойдётся. проблема только в том что обычный программист будет ожидать эти инварианты. т.е. люди ожидают нормальных контрактов а не дурацких. но в самом принципе нужные свойства выбираешь ты сам. а затем - если у тебя иерархия сохраняет выбранные свойства - то принцип не нарушен, не сохраняет - нарушен. дурацкие свойства выбрал, но они сохранились в иерархии (как анонимус предлагал тут)? ну что ж, принцип не нарушен, но ты сам дурак.
Исходная версия AndreyKl, :
to ensure that a program continues to work as expected, calls of methods made in the program that assume the object belongs to a supertype must have the same behavior when the object actually belongs to a subtype.
однако ты трактуешь очень широко. просто выбери _нужные_ _тебе_ свойства, и строй для них иерархию, и у тебя будет соблюдаться принцип.
если в примере про прямоугольник и квадрат ты уберёшь инварианты для видтх и хейгхт. то у тебя, как заметил анонимус, всё сойдётся. проблема только в том что обычный программист будет ожидать эти инварианты. т.е. люди ожидают нормальных контрактов а не дурацких. но в самом принципе нужные свойства выбираешь ты сам. а затем - если у тебя иерархия сохраняет выбранные свойства - то принцип не нарушен - не сохраняет - нарушет. дурацкие свойства выбрал? ну что ж, принцип не нарушен, но ты сам дурак.