Вдохновленный этим ответом:
Лиск принцип замещения требует , что
- Предпосылки не могут быть усилены в подтипе.
- Постусловия не могут быть ослаблены в подтипе.
- Инварианты супертипа должны быть сохранены в подтипе.
- Ограничение истории («правило истории»). Объекты считаются изменяемыми только через их методы (инкапсуляция). Поскольку подтипы могут вводить методы, которых нет в супертипе, введение этих методов может разрешить изменения состояния в подтипе, которые недопустимы в супертипе. Ограничение истории запрещает это.
Я надеялся, что кто-нибудь опубликует иерархию классов, которая нарушает эти 4 пункта и как их решить соответствующим образом.
Я ищу подробное объяснение для образовательных целей о том, как определить каждый из 4 пунктов в иерархии и как лучше всего это исправить.
Примечание:
я надеялся опубликовать пример кода для людей, чтобы работать над ним, но сам вопрос заключается в том, как определить неисправные иерархии :)