next up previous
Next: Les types objets ouverts Up: Types et objets en Previous: Le type d'un objet

Typage structurel

Lorsque le typeur Ocaml compare deux types d'objets, il compare leurs structures et pas leurs noms. Par exemple

class toto  =
 object
   method getx = 3
   method move x = print_string (string_of_int x)
   method print = print_string "toto"
end;;

Les interfaces de point et toto ont la même structure: ils ont les mêmes noms et types de méthodes. Ils sont considérés égaux en Ocaml. En effet, les confondre est tout à fait naturel car ils ont la même interface de typage: ils possèdent exactement les mêmes méthodes avec les mêmes types, et donc on peut effectuer avec eux les mêmes opérations. Ils sont donc équivalents du point de vue de la sécurité du typage.

Par exemple, la fonction f est bien typée en Ocaml:

#let f (x : point) (y : toto) = if true then x else y;;
val f : point -> toto -> point = <fun>

#let p = new point 1;;
val p : point = <obj>

#let t = new toto;;
val t : toto = <obj>

# let z = f t p in z#print;;
toto- : unit = ()

# let z = f p t in z#print;;
1- : unit = ()

On dira que point et toto sont deux abbreviations différentes de la même interface de classe.



Maria-Viginia Aponte
2001-04-10