title: Système nominatif de types
text: # Système nominatif de types
  
  Un système nominatif de types est une classe majeure de système de types en programmation informatique. C'est avec lui qu'on détermine la compatibilité et l'équivalence de types par la déclaration explicite et/ou le nommage des types. On utilise les systèmes nominatifs pour déterminer si des types sont équivalents ou pour savoir si un type est un sous-type d'un autre.
  
  Ce système est en contraste avec le système structurel, où les comparaisons sont fondées sur la structure des types en question et donc ces types ne nécessitent pas de déclarations explicites.
  
  ## Typage nominatif
  
  Un typage nominatif signifie que deux variables ont un type compatible si elles apparaissent soit dans la même déclaration, soit dans des déclarations qui utilisent le même nom de type.
  
  Notez que beaucoup de langages fournissent l'alias de types ou la possibilité de déclarer plusieurs noms pour le même type ; la fonctionnalité C/C++ typedef en est un exemple. C, C++ et Java sont tous des langages qui utilisent la compatibilité par noms de types.
  
  De manière similaire, le sous-typage nominatif signifie qu'un type est un sous-type d'un autre si et seulement s'il est explicitement déclaré comme tel dans sa définition.
  
  Des langages typés nominalement imposent typiquement qu'un sous-type ainsi déclaré est structurellement compatible. Néanmoins, Eiffel permet à des sous-types non structurellement compatibles d'être déclarés. Mais les sous-types qui sont structurellement compatibles par accident et non déclarés comme sous-type ne sont pas considérés comme sous-type.
  
  C, C++ et Java utilisent le typage nominatif et le sous-typage nominatif.
  
  C et C++ permettent un sous-typage structurel pour les types anonymes : en effet, on considère comme équivalents deux types anonymes s'ils ont la même structure même si les types sont « décrits » dans des parties différentes de code.
  
  Certains langages sous-typés de manière nominative, tels que Java, permettent aux classes d'être déclarées comme finales, indiquant qu'aucun sous-typage supplémentaire n'est autorisé.
  
  On considère que le sous-typage nominatif est utile pour prévenir des équivalences de type accidentelles ; on considère donc qu'une sécurité de type est meilleure que le typage structurel. Le prix en est la flexibilité réduite : ainsi, le typage nominal ne permet pas à des super-types d'être créés sans la modification des sous-types existants.
  
  