next up previous
Next: Un exemple en dehors Up: Sous-typage Previous: Appel de fonctions avec

  
Sous-classe $\not =$ Sous-type

La règle de sous-typage entre deux classes impose le sous-typage entre les types de leurs méthodes. Intuitivement, les relations être sous-classe et être sous-type semblent très proches. Dans les deux cas, on pense à une spécialisation et/ou enrichissement des types, des méthodes et/ou de leurs codes par rapport aux informations contenues dans la super-classe ou le super-type. On pourrait alors penser qu'une sous-classe est toujours un sous-type de sa super-classe, autrement dit, que être une sous-classe de est équivalent à être un sous-type de pour les mêmes classes. En simplifiant, nous parlons d'égalité Sous-classe = Sous-type.

Cette égalité n'est pas vrai de manière général. La première raison tient à ce qu'on peut être en relation de sous-typage sans être en relation de sous-classe. Par exemple, pour les versions données précédemment des classes point et colorpoint, on peut écrire une troisième classe autre, qui a la même interface que colorpoint mais qui n'hérite pas de point. La classe autre est bien un sous-type de point sans en être une sous-classe. Donc, un sous-type n'est pas toujours une sous-classe.

La deuxième raison, concerne le sens inverse de l'égalité: une sous-classe n'est pas toujours un sous-type. Nous donnons deux exemples. Le premier est en dehors d'Ocaml: il est écrit dans un langage immaginaire où le typage des objets se fait exclusivement par sous-typage. Le deuxième correspond à un vrai programme Ocaml dont l'éxécution échoue si l'on forcait cette égalité à être vraie.



 
next up previous
Next: Un exemple en dehors Up: Sous-typage Previous: Appel de fonctions avec
Maria-Viginia Aponte
2001-04-10