Généricité Contrainte

La généricité contrainte est un raffinement de la généricité. Examinons la classe DICTIONARY, qui stocke des associations entre une clé et une valeur:

Dans cette définition (tiré des librairies standards), on retrouve les 2 éléments génériques de l'association : le type de la clé K et le type de la valeur stockée V. Le type de la clé est contraint (grâce à l'opérateur ->) par le type HASHABLE (une classe héritant de HASHABLE doit définir une méthode hash_code permettant de calculer une clé de hachage). Cela signifie que, lors de la déclaration d'un dictionnaire, la classe correspondant à la clé devra être une descendante de la classe HASHABLE. L'intérêt de cette généricité contrainte est que l'on sait, de cette façon, que la clé, dont le type K n'est pas connu, dispose (au moins) des primitives accessibles sur des objets de type HASHABLE. Dans ce cas précis, HASHABLE ne fournit qu'une seule primitive, celle qui retourne le code de hachage associé à l'objet.

Grâce à la généricité contrainte, on sait dans le code de DICTIONARY que K est compatible avec HASHABLE et donc que l'on peut écrire:

Ainsi, l'association entre des clients d'un magasin et des informations relatives à ces clients pourrait par exemple être simplement stockée dans un objet de type

DICTIONNARY[CLIENT, STRING]

Car la classe STRING, qui implante les chaînes de caractères, fait partie de la bibliothèque standard et hérite de la classe HASHABLE.

Les Structures de Contrôle >>