Inspiré par cette réponse:
Le principe de substitution de Liskov exige que
- Les conditions préalables ne peuvent pas être renforcées dans un sous-type.
- Les post-conditions ne peuvent pas être affaiblies dans un sous-type.
- Les invariants du supertype doivent être conservés dans un sous-type.
- Contrainte d'historique (la "règle d'historique"). Les objets ne sont considérés comme modifiables que par leurs méthodes (encapsulation). Étant donné que les sous-types peuvent introduire des méthodes qui ne sont pas présentes dans le supertype, l'introduction de ces méthodes peut permettre des changements d'état dans le sous-type qui ne sont pas autorisés dans le supertype. La contrainte d'historique l'interdit.
J'espérais que quelqu'un publierait une hiérarchie de classe qui viole ces 4 points et comment les résoudre en conséquence.
Je cherche une explication détaillée à des fins pédagogiques sur la façon d'identifier chacun des 4 points de la hiérarchie et la meilleure façon de le corriger.
Remarque:
J'espérais publier un exemple de code pour que les gens travaillent, mais la question elle-même est de savoir comment identifier les hiérarchies défectueuses :)