Académique Documents
Professionnel Documents
Culture Documents
Bibliographie
1. KOOR, Ressources Pédagogiques pour Développeurs,
https://koor.fr/Java/Tutorial/java_generics_introduction.wp, 07/07/2020
2. Maria Gradinariu, Java – 6 – Généricité et Collection,
https://pagesperso.lip6.fr/Maria.Gradinariu/IMG/html/c6-genericite-et-
collections.html, 10/07/2020
3. Cyrille Herby, Appréhendez la généricité en Java,
https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-
java/22404-apprehendez-la-genericite-en-java, 01/06/2019
4. Richard Grin, Généricité, Université de Nice - Sophia Antipolis, notes de cours.
5. https://fr.wikipedia.org/wiki/Généricité, 01/06/2019
6. Frédéric Gava, Introduction à la Programmation Java : généricité, le polymorphisme
paramétrique, L.A.C.L Laboratoire d’Algorithmique, Complexité et Logique, Cours de
L3 MIAGE, 01/06/2019
7. Michel Schinz, Collections et généricité, Pratique de la programmation orientée-objet
https://cs108.epfl.ch/archive/14/files/ppo14_03_collections_listes_genericite.pdf,
11/07/2020
1. Présentation
En Programmation Orientée Object (POO), la généricité est un concept permettant de
définir des algorithmes (types de données et méthodes) identiques qui peuvent être
utilisés sur de multiples types de données. Cela permet donc de réduire les quantités de
codes à produire.
2. Problématique
package genericite;
b) Si on veut pouvoir stocker un entier, on peut créer une classe SingleValueInt avec :
un constructeur SingleValueInt(int val)
une méthode (modificateur) setValue(int val)
une méthode (accesseur) int getValue()
package genericite;
1 package genericite;
2 public class ApplicationProblematique {
3
4 public static void main(String[] args) {
5 SingleValueObject svs=new SingleValueObject(new String("Ségou"));
6 System.out.println(svs.getValue());
7
8 SingleValueObject svp=new SingleValueObject(new
Person("COULIBALY"));
9 ((Person)svp.getValue()).setAge(25);
10 Person p=(Person)svp.getValue();
11 System.out.println(p.getName()+" a "+ p.getAge()+" ans");
12
13 SingleValueObject svi=new SingleValueObject(new Integer(45));
14 System.out.println((int)svi.getValue()+10);
15 }
16 }
Dans le code ci-dessus, vous pouvez constater sur les lignes n° 5, 9, 10 et 13 que pour obtenir
des objets ayant les types des trois précédents objets, nous créé respectivement sur les lignes
5 et 13 des objets de type String et Integer.
Sur les lignes 9 et 10 nous avons placé entre parenthèses la classe Person pour transformer
la valeur obtenue suite à l’invocation de la méthode getValue(). Cela est appelée
transtypage ou cast, car elle transforme la valeur retournée par la méthode en type Person.
Constat : avec cette solution, nous devons toujours faire recours au transtypage pour générer
des types concrets à partir d’un objet commun (brut).
Java 5 met à notre disposition, un moyen plus simple pour gérer de tels problèmes. C’est la
généricité.
package genericite;
package genericite;
System.out.println("=====================================");
System.out.println("======================================");
}
4. Limitations de la généricité
Pour des raisons historiques, la généricité en Java possède les limitations suivantes :
la création de tableaux dont les éléments ont un type générique est interdite,
les tests d'instance impliquant des types génériques sont interdits,
les transtypages (casts) sur des types génériques ne sont pas sûrs, c’est à dire qu'ils
produisent un avertissement lors de la compilation et un résultat éventuellement
incorrect à l'exécution,
la définition d'exceptions génériques est interdite.
Les listes (List<E>), les ensembles (Set<E>), les piles (Stack<E>), les files d’attente
(Queue<E>) sont des objets qui regroupent plusieurs éléments en une seule entité.
en commun :
o mêmes questions : est-ce qu’elles contiennent des éléments ? combien ?
o mêmes opérations : on peut ajouter ou enlever un élément à la structure,
on peut vider la structure. On peut aussi parcourir les éléments contenus
dans la structure.
implémentations différentes
Collection<E> : méthodes de base pour parcourir, ajouter, enlever des éléments.
Set<E> : cette interface représente un ensemble, et donc, ce type de collection n’admet
aucun doublon.
List<E> : cette interface représente une séquence d’éléments : l’ordre d’ajout ou de
retrait des éléments est important (doublons possibles).
Queue<E> : file d’attente : il y a l’élément en tête et il y a les éléments qui suivent.
L’ordre d’ajout ou de retrait des éléments est important (doublons possibles).
Deque<E> : cette interface ressemble aux files d’attente, mais les éléments importants
sont les éléments en tête et en queue.
Map<K,V> : cette interface représente une relation binaire (surjective) : chaque élément
est associé à une clé et chaque clé est unique (mais on peut avoir des doublons pour les
éléments).
SortedSet<E> : est la version ordonnée d’un ensemble.
SortedMap<K,V> : est la version ordonnée d’une relation binaire ou les clés sont
ordonnées.
ArrayList<E> : stocke les éléments dans un tableau qui est « redimensionné » par
copie au besoin. C’est une classe qui implémente l’interface List<E>.
LinkedList<E> : stocke les éléments dans des nœuds chaînés entre eux.
Ces interfaces sont génériques, c’est-à-dire on peut leur donner un paramètre pour
indiquer qu’on a une collection de Person, de Integer, de String, etc...
Exemple :
package genericite;
public class PN {
private String phonenumber;
public PN() {}
public PN(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
}
package genericite;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
System.out.println("=====================================================
==");
System.out.println("=====================================================
==");
System.out.println("Les éléments sont :" + pBook);
}