Généricité et typage statique avancé

publicité
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
Téléchargement