Vous êtes sur la page 1sur 9

Programmation générique

Master WISD
AU: 2017/2018
Introduction
 La programmation générique implique d'écrire du code qui puisse être
réutilisé pour des objets de types différents
 écrire un code source unique utilisable avec des objets de types quelconques.
 Nous n'avons plus besoin, par exemple, de programmer des classes
différentes pour collecter et gérer les objets des objets de n'importe quelle
classe.
 Par exemple définir une classe permettant de manipuler des ensembles
d’objets de différentes classes.

11/12/2017 -A.Y- 2
Notion de classes génériques
Une classe générique est une classe comprenant un ou plusieurs attributs de type
paramétrable (classe paramétrée).
Une classe générique peut se présenter comme suit:
Il s’agit d’une classe Couple qui modélise une paire de deux éléments du même type.
public class Couple <T> { public void afficher(){
private T premier, deuxieme; System.out.println("Premier élément: "+premier
public Couple(){ +"\nDeuxième élément: "+deuxieme);
premier=null; }
deuxieme=null; public T getPremier(){
} return premier;
public Couple(T p1, T p2){ }
premier=p1; public void setPremier(T valeur){
deuxieme=p2; premier=valeur;
} }
}

11/12/2017 -A.Y- 3
Notion de classes génériques
 On note la présence d’un type générique nommé ici T (appelé aussi
paramètre de type) qui apparaît dans la déclaration de classe Couple.
 Il sert à préciser que, dans la définition de classe T représente un type
quelconque.
 Ce paramètre T peut alors être utilisé là où un type précis peut l’être
normalement.
 Ici, on le rencontre dans les déclarations des attributs et dans l’entête de la
classe et ces méthodes.

11/12/2017 -A.Y- 4
Notion de classes génériques
Utilisation de la classe Couple:
 Lors de la déclaration d’un objet de type Couple, on devra préciser le type
effectif correspondant à T, de cette manière :
 Couple<Integer>ci;

 Couple<String> cs;

 La seule contrainte à respecter à ce niveau est que ce type doit


obligatoirement être une classe ; ainsi la déclaration suivante serait rejetée :
 Couple <int> ci ; // erreur : int n’est pas une classe
 L’appel du constructeur devra également préciser le type voulu.

 cs = new Couple<String> (str1, str2) ;

11/12/2017 -A.Y- 5
Notion de classes génériques
 Il est possible, au moment de la définition de la classe, d’imposer certaines
contraintes.
 On peut par exemple imposer à la classe correspondant à un paramètre de
type d’être dérivée d’une classe donnée ou d’implémenter une ou plusieurs
interfaces.
class Couple <T extends Personne> {
// la définition précédente reste inchangée
}
Ici on impose au type désigné par T de dériver de la classe Personne, comme par
exemple Etudiant, Employe, ….

11/12/2017 -A.Y- 6
Notion de classes génériques
Remarques
 On ne peut pas créer des tableaux d’éléments d’un type générique:

Couple <Point> courbe[]= new Couple<Point>[100];


 Il est impossible de lever une exception (throw) à l’aide d’un objet d’une classe
générique : throw (Couple<String>)  Erreur de compilation
 Un attribut statique ne peut pas être d’un type paramétré :

static T minMax ;

11/12/2017 -A.Y- 7
Méthodes génériques
 La même démarche peut s’appliquer aux méthodes.
 On peut définir une seule méthode avec des paramètres de type; on parle
alors de "méthodes génériques".
Exemple:
class Tableau {

public static <T> T getMilieu(T[] tab) {
return tab[tab.length/2];
}

}

11/12/2017 -A.Y- 8
Méthodes génériques
 il est possible d’imposer le type voulu pour T lors de l’appel de la méthode(Si
on veut davantage de vérifications à la compilation).
 On utilise la syntaxe suivante :

NomClasse.<type>nomMethode().
Exemple:
String jours[]={"Lundi", "Mardi", …, "Dimanche"};
String jour= Tableau.getMilieu(jours);
//ou aussi Tableau.<String>getMilieu(jours);

11/12/2017 -A.Y- 9

Vous aimerez peut-être aussi