Chapitre 5 Généricité et typage avancé Jean Privat Université du Québec à Montréal INF7845 — Principes avancés des langages à objets Hiver 2011 Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 1 / 10 Généricité ou polymorphisme paramétrique Origine Inventée par ML Popularisée par Ada Idée Des types paramètrent d’autres types Paramètres Sur les classes Sur les méthodes Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 2 / 10 Exemple c l a s s P i l e <T> { void e m p i l e r (T) ; T depiler () ; T sommet ( ) ; Pile () ; } P i l e <A s s i e t t e > pa = new P i l e <A s s i e t t e >() ; Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 3 / 10 Vocabulaire Classe paramétrée Paramétrée par des types formels Doit être instanciée pour être utilisée Type formel N’a de sens que dans la classe paramétrée Peut jouer tous les rôles d’un type Type concret N’est pas formel Ne contient pas de type formel Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 4 / 10 Le rôle des classes Questions De la classe paramétrée ou de ses instantiations, qui sont les vraies classes ? Un type formel est-il une classe ? Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 5 / 10 Types formels Variations sur la borne Non bornée Bornée (ou contrainte) F-bornée Variations sur le « sens » de la borne Plus restreint (extends en Java) Plus large (super en Java) Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 6 / 10 Généricité et sous-typage Entre classe paramétrée et ses instances Pile <T> et Pile <Assiette> Entre instances d’une même classe paramétrée Pile <Assiette> et Pile < Vaisselle > Entre type paramétrés Pile < Assielle > et Collection <Assiette> Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 7 / 10 Spécialisation de classes génériques Possible si on fait les choses proprement Expliciter les liens entre les types formels Respecter les contraintes de bornes Cas le l’héritage multiple Ne pas instantier le même paramètre fomel de façon différente (même indirectement) Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 8 / 10 Variations autour de la généricité Implémentation hétérogène (C++) Effacement de types (Java) Jokers (Java) Généricité F-bornée Types ancrés Type virtuels Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 9 / 10 Exercice : Hiérarchie des collections Identifiez les relations et propriétés des classes suivantes : Collection : un ensemble d’éléments (répétitions possible) Set : un ensemble d’éléments uniques Map : un dictionnaire (tableau associatif) List : une liste d’éléments Array : un tableau d’éléments ArrayMap : un tableau associatif implémenté avec un tableau HashMap : un tableau associatif implémenté avec une table de hachage Jean Privat (UQAM) 05 — Généricité INF7845 — Hiver 2011 10 / 10