JackosKingLe 14/01/2008 à 19:33
La notion de "est un" n'est pas ce qui définit l'héritage!
En effet la notion du principe de Liskov est plus restrictive car elle inclue le design par contrat.
Pour qu'une instance dérivée se substitue à une instance père, il faut:
> Que la classe dérivée n'exige pas plus à son utilisateur.
> Quel la classe dérivée ne garantisse pas moins à son utilisateur.
exiger/garantir: terme de design by contract.
Si tu regardes le contrat de setWidth: height constant.
Ce contrat est violé par le carré. Il implique que le principe de liskov n'est pas respecté et que ta classe carré ne passera pas le test unitaire de la classe rectangle.