Atelier de programmation objet avancée
TP : Les collections
Lors de cet atelier, nous allons essayer de manipuler les structures de données de type
collections, y compris les collections simples ("list" et "set") et les tableaux associatifs
("map"), dans un contexte concret afin de découvrir leurs modes de fonctionnement et leur
utilité.
Notions de base :
a. Les collections
Une collection est une structure de données qui représente un ensemble d'éléments de
même type. Les collections implémentent toutes une interface appelée "Collection" qui
présente un ensemble de méthodes visant la gestion des collections.
D'autres sous-interfaces étendent l'interface Collection:
• List : permet la gestion de collections pouvant contenir des doublons; les classes
implémentant cette interface sont :
✓ ArrayList (liste de tableaux);
✓ LinkedList (liste chaînée);
• Set : permet la gestion de collections ne pouvant contenir aucun doublon; les classes
implémentant cette interface sont:
✓ HashSet (table de hachage);
✓ TreeSet (arbre).
Remarque : les collections se situent au niveau du package "[Link]".
Le type de données que l'on souhaite placer dans la structure est défini lors de la création de
cette dernière. Par exemple, pour une liste de chaine de caractères, la création se fera comme
suit :
List<String> liste1 = new ArrayList<String>();
Un autre type de structure de données utilisable en Java est le "Map". Ce dernier range les
éléments par paire clé/valeur. Deux enregistrements d'une même "Map" ne pourront jamais
avoir la même clé. On retrouve principalement deux classes qui implémentent l'interface
"Map" : "HashMap" et "TreeMap".
b. Les itérateurs
Un itérateur est un objet qui permet de parcourir les structures de données. Par exemple, le
parcours de la liste nommée "liste1" peut se faire de la manière suivante :
ListIterator it = [Link](); //itérateur qui pointe sur le premier élément
1
while([Link]()) // vérifier qu'il y a encore des éléments non parcourus
{
String elem = [Link](); // accès à l'élément pointé par l'itérateur et
// déplacement de ce dernier vers l'élément suivant
...
}
Remarque : les "Maps" ne permettent pas d'être parcourus à l'aide d'un itérateur. Toutefois, il
est possible de le faire en extrayant l’ensemble des valeurs avec la méthode "values()", en les
plaçant dans une collection équivalente itérable (dans le cours, on a proposé une deuxième
méthode pour le parcours des éléments d'une "Map". A vous de choisir la méthode qui vous
conviendra).
Exemple :
HashMap <Integer, String> M = new HashMap <Integer, String> ();
ArrayList <String> A = new ArrayList<String>([Link]()); // les valeurs de la Map sont
//placées dans l'ArrayList "A"
Travail à faire :
L'objectif du travail est de développer un programme qui permettra une simple gestion des
groupes d'étudiants dans un institut, leurs notes et leurs moyennes. Le travail comporte trois
parties qui sont dépendantes.
Lancez "Eclipse" et créez un nouveau projet Java nommé "TP1".
NB : tous les attributs des différentes classes à développer doivent être privés.
a. Partie 1
On souhaite représenter les étudiants à travers une classe nommée "Etudiant". En effet, un
étudiant est caractérisé par :
• un identifiant (entier);
• un nom (chaine);
• un prénom (chaine);
• un nom du groupe (chaine);
• une liste de "cours" (Liste de taille indéfinie de type "Arraylist")
Une classe "Cours" permettra de modéliser un cours. Chaque cours est définit à travers:
• un intitulé (chaine);
• la note obtenue pour ce cours (réel de type "double").
1. Créez la classe "Cours". Cette classe doit définir un constructeur avec arguments, les
getters, les setters et une méthode "affiche( )" qui permet d'afficher l'intitulé du cours et
la note obtenue.
2
2. Créez la classe "Etudiant". Cette classe doit aussi contenir un constructeur avec
paramètres, les getters, les setters et une méthode "affiche( )" qui affiche toutes les
données d'un étudiant y compris la liste de ses cours et les notes obtenues.
3. Créez une classe nommée "Test" (classe principale) et ajoutez les instructions
nécessaires qui permettent de créer et afficher trois étudiants ayant chacun trois notes
dans les trois matières suivantes: "java", "c++" et "anglais".
b. Partie 2
Une classe "Groupe" permet de regrouper un ensemble d'étudiants. Cette classe est
caractérisée par :
• un nom de groupe (chaine),
• la liste des étudiants (un tableau associatif de type "HashMap" qui permet de mémoriser
les données des étudiants appartenant à un groupe. Utilisez l'identifiant comme clé du
tableau associatif, la valeur sera l'objet "Etudiant" correspondant)
1. Créez la classe "Groupe". Cette classe doit contenir un constructeur avec arguments,
les getters et les setters des attributs.
2. Ajoutez à cette classe les méthodes suivantes :
• public boolean AjoutEtud(Etudiant E) : Cette méthode permet d'ajouter
l'étudiant "E", passé en paramètre, au groupe. Elle retourne "True" si l'ajout est
effectué avec succès, "False" sinon.
• public void afficheListeEtud() : Cette méthode permet d'afficher toutes les
données de tous les étudiants d'un groupe.
• public boolean rechercheEtud(int id) : Cette méthode permet de rechercher un
étudiant dans un groupe à travers son identifiant "id", passé en paramètre. Elle
retourne "True" si l'étudiant existe dans le groupe, "False" sinon.
• public boolean suppEtud(int id) : Cette méthode permet de supprimer un
étudiant d'un groupe à travers son identifiant "id", passé en paramètre. Elle
retourne "True" si l'étudiant est supprimé du groupe, "False" sinon.
c. Partie 3
On souhaite mettre en place une classe capable de réaliser des statistiques sur les
Etudiants et leurs notes. Cette classe sera nommée "Stats".
1. Ajoutez la classe "Stats". Cette classe contiendra uniquement les méthodes statiques
suivantes :
• public static double getMoy(Etudiant E) : Cette méthode permet de calculer et
retourner la moyenne des notes de l'étudiant "E", passé en paramètre.
• public static double getMaxNote(Etudiant E) : Cette méthode permet de
rechercher et retourner la meilleure note de l'étudiant "E", passé en paramètre.
• public static double getMoyGrp(Groupe G) : Cette méthode permet de calculer
et retourner la moyenne générale des étudiants du groupe "G", passé en paramètre.
3
• public static int getMeilEtudGrp(Groupe G) : Cette méthode permet de
rechercher et retourner l'identifiant de l'étudiant du groupe "G", passé en
paramètre, ayant la meilleure moyenne.
• public static int getMoEtudJava(Groupe G) : Cette méthode permet de
rechercher et retourner l'identifiant de l'étudiant du groupe "G", passé en
paramètre, ayant la mauvaise note en "Java". S'il y a plusieurs étudiants qui ont la
même mauvaise note, cette méthode doit retourner la valeur "-1".
• public static void getEtudReus(Groupe G) : Cette méthode doit afficher les
noms et les prénoms de tous les étudiants de Groupe "G", passé en paramètre, qui
ont une moyenne supérieure ou égale à "10".