Anne Tasso. 3 e édition Groupe Eyrolles, 2000, 2002, 2005, ISBN :

Documents pareils
Java Licence Professionnelle CISII,

Programmer en JAVA. par Tama

Package Java.util Classe générique

Premiers Pas en Programmation Objet : les Classes et les Objets

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

ACTIVITÉ DE PROGRAMMATION

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Java Licence Professionnelle CISII,

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Plan du cours. Historique du langage Nouveautés de Java 7

Utilisation d objets : String et ArrayList

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction au langage C

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

as Architecture des Systèmes d Information

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

4. Groupement d objets

Une introduction à Java

Programme Compte bancaire (code)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...


TD3: tableaux avancées, première classe et chaînes

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours 1: Java et les objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours d initiation à la programmation en C++ Johann Cuenin

Les chaînes de caractères

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

TP, première séquence d exercices.

Notions fondamentales du langage C# Version 1.0

Programmation C. Apprendre à développer des programmes simples dans le langage C

Les structures. Chapitre 3

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Algorithmique et Programmation, IMA

Chapitre 10. Les interfaces Comparable et Comparator 1

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Langage Java. Classe de première SI

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Bases de programmation. Cours 5. Structurer les données

Exercices sur les interfaces

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation Par Objets

Initiation à l algorithmique

TP1 : Initiation à Java et Eclipse

Programmation C++ (débutant)/instructions for, while et do...while

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Le langage C. Séance n 4

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

UE C avancé cours 1: introduction et révisions

Flux de données Lecture/Ecriture Fichiers

Cours Informatique Master STEP

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Programmation par les Objets en Java

Programmation Objet Java Correction

Gestion distribuée (par sockets) de banque en Java

INITIATION AU LANGAGE JAVA

Derrière toi Une machine virtuelle!

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Conventions d écriture et outils de mise au point

PROGRAMMATION PAR OBJETS

Auto-évaluation Programmation en Java

Introduction à MATLAB R

Chapitre VI- La validation de la composition.

TD/TP PAC - Programmation n 3

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Claude Delannoy. 3 e édition C++

Le prototype de la fonction main()

Cours 14 Les fichiers

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Les arbres binaires de recherche

Examen Médian - 1 heure 30

Objets et Programmation. origine des langages orientés-objet

Projet de programmation (IK3) : TP n 1 Correction

Problèmes liés à la concurrence

Java 1.5 : principales nouveautés

INF 321 : mémento de la syntaxe de Java

Cours 1 : La compilation

RMI le langage Java XII-1 JMF

F. Barthélemy. 17 mai 2005

Un ordonnanceur stupide

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Programmation avec des objets : Cours 7. Menu du jour

Java c est quoi? Java pourquoi?

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Transcription:

Anne Tasso 3 e édition 2005 Groupe Eyrolles, 2000, 2002, 2005, ISBN : 2-212-11679-9

chapitre n 10 Collectionner un nombre indéterminé d objets Les dictionnaires Pour améliorer la recherche d éléments complexes dans une liste, la technique consiste à organiser les données, non plus par rapport à un indice, mais par rapport à une clé explicite. De cette façon, la recherche d un objet dans la liste s effectue, non plus sur l ensemble des données qui le composent, mais sur une clé unique qui lui est associée. L organisation de données, par association d une clé à un ensemble de données, est appelée un dictionnaire. Dans un dictionnaire, chaque définition est associée au mot qu elle définit et non pas à sa position (numérique) dans le dictionnaire. Manipulation d un dictionnaire Le type HashMap proposé par le langage Java permet de réaliser simplement l association cléélément. Les méthodes associées à ce type sont la création, la suppression, la consultation ou la modification d une association. Pour utiliser un dictionnaire, il est nécessaire de le déclarer de la façon suivante : HashMap listeclassée = new HashMap() ; Ainsi déclaré, listeclassée est un objet de type HashMap, sur lequel on peut appliquer des méthodes de la classe HashMap. Les méthodes les plus couramment utilisées sont décrites au tableau ci-après. Opération Place dans le dictionnaire l association clé objet. Retourne l objet associé à la clé spécifiée en paramètre. Supprime dans le dictionnaire l association clé objet à partir de la clé spécifiée en paramètre. Retourne le nombre d associations définies dans le dictionnaire. Fonction Java put(clé, objet) get(clé) remove(clé) size() Éditions Eyrolles 293

partie n 3 Outils et techniques orientés objet Exemple : créer un dictionnaire d étudiants Pour mieux comprendre l utilisation de tels objets, modifions le programme de gestion d une classe d étudiants de façon à organiser les données à partir d une clé définie par le programme. Définir une clé d association En supposant qu un étudiant soit totalement identifiable par son nom et son prénom, la clé d association des données est définie comme étant une chaîne de caractères majuscules, dont le premier caractère coïncide avec le premier caractère du prénom de l étudiant et dont les caractères suivants correspondent au nom de l étudiant. De cette façon, chaque clé est déterminée par programme, indépendamment de l utilisateur, en fonction des informations fournies par ce dernier. La traduction de cet algorithme en langage Java est la suivante : private String créeruneclé(etudiant e) { String tmp; tmp = (e.quelprénom()).charat(0) + e.quelnom(); return tmp.touppercase(); À partir des données d un étudiant e passées en paramètres, la méthode créeruneclé() retourne une chaîne de caractères majuscules (tmp.touppercase()), composée du premier caractère du prénom de l étudiant ((e.quelprénom()).charat(0)), suivi de son nom (e.quelnom()). Les données nom et prénom de la classe Etudiant sont privées. Il est donc nécessaire d utiliser les méthodes d accès en consultation quelprénom() et quelnom() pour connaître le contenu de ces données. Ces méthodes, à insérer dans le fichier Etudiant.java, sont décrites comme suit : public String quelnom() { return nom; public String quelprénom() { return prénom; La création d une clé peut également être réalisée simplement à partir des nom et prénom de l étudiant, stockés non pas dans un objet Etudiant, mais dans deux String distincts. Comment surcharger la méthode créeruneclé() de façon à traiter cette alternative? 294 Éditions Eyrolles

chapitre n 10 Collectionner un nombre indéterminé d objets La méthode est surchargée de la façon suivante : private String créeruneclé(string p, String n) { String tmp ; tmp = p.charat(0)+ n ; return tmp.touppercase(); Les deux méthodes créeruneclé() à insérer dans la classe Classe, sont déclarées en mode private car elles constituent un traitement interne propre au mode de stockage de l information. L application et l utilisateur n ont nullement besoin d en connaître l existence pour créer la liste des étudiants d une classe. Création du dictionnaire Pour créer le dictionnaire d une classe d étudiants, nous devons tout d abord définir un objet de type HashMap puis stocker dans cet objet les étudiants, en les associant à leur clé. Ces deux opérations sont réalisées dans le programme suivant : import java.util.* ; public class Classe { private HashMap listeclassée ; public Classe() { listeclassée = new HashMap(); public void ajouteunetudiant() { Etudiant nouveau = new Etudiant(); String clé = créeruneclé(nouveau) ; if (listeclassée.get(clé)== null) listeclassée.put(clé, nouveau) ; else System.out.println("Cet etudiant a deja ete saisi!") ; Ce programme est constitué des deux méthodes suivantes : Le constructeur Classe(), qui fait appel au constructeur de la classe HashMap afin de déterminer l adresse du premier élément de la listeclassée. ajouteunetudiant(), qui place un élément dans le dictionnaire grâce à la méthode put(clé, nouveau), qui ajoute l association clé-nouveau dans le dictionnaire listeclassée. L objet nouveau est de type Etudiant. Il est créé par l intermédiaire du constructeur Etudiant() et clé est aussi un objet de type String calculé à partir de la méthode créeruneclé(). Éditions Eyrolles 295

partie n 3 Outils et techniques orientés objet L ajout successif de deux associations ayant la même clé a pour résultat de détruire la première association. C est pourquoi il convient de tester, avant de placer le nouvel étudiant dans le dictionnaire, si ce dernier n est pas déjà défini dans la listeclassée. C est ce que réalise le test suivant : if (listeclassée.get(clé) == null) listeclassée.put(clé, nouveau) ; En effet, en testant le résultat de la méthode get(clé), le programme recherche dans le dictionnaire s il existe un étudiant associé à la clé calculée, correspondant à l étudiant que l on souhaite insérer dans la liste (nouveau). Si cette association n existe pas, l élément retourné par la méthode est null, et l interpréteur ajoute la nouvelle association clé nouveau dans le dictionnaire. Dans le cas contraire, le programme affiche un message précisant que l étudiant existe déjà. Rechercher et supprimer un élément du dictionnaire Une fois le dictionnaire réalisé, les opérations permettant la recherche ou la suppression d un étudiant sont décrites par les méthodes suivantes, à insérer dans le fichier Classe.java : public void rechercheunetudiant(string p, String n) { String clé = créeruneclé(p, n); Etudiant eclassé = (Etudiant) listeclassée.get(clé); if (eclassé!= null) eclassé.afficheunetudiant(); else System.out.println(p + " " + n + " est inconnu! "); public void supprimeunetudiant(string p, String n) { String clé = créeruneclé(p, n); Etudiant eclassé = (Etudiant) listeclassée.get(clé); if (eclassé!= null) { listeclassée.remove(clé); System.out.println(p + " " + n + " a ete supprime "); else System.out.println(p + " " + n + " est inconnu! "); Ces méthodes fonctionnent toutes deux sur le même modèle. Les nom et prénom de l étudiant à traiter sont fournis en paramètres des méthodes afin de calculer la clé d association. Ensuite, l étudiant est recherché dans la liste à partir de cette clé (get(clé)). S il est trouvé, il est soit affiché (eclassé.afficheunetudiant(), pour la méthode rechercheunetudiant()), soit supprimé (listeclassée.remove(clé)), pour la méthode supprimeunetudiant()). 296 Éditions Eyrolles

chapitre n 10 Collectionner un nombre indéterminé d objets Afficher un dictionnaire Pour afficher tous les éléments d un dictionnaire, nous devons le parcourir élément par élément. Il existe différentes techniques pour réaliser ce parcours. Nous vous en proposons une, qui utilise un outil du langage Java, défini par la classe Collection. Une collection est un outil du package java.util, qui facilite le parcours de listes de données, quelles qu elles soient. Ainsi, le parcours dans une collection d objets s effectue par l intermédiaire d un objet de type Iterator que l on applique à la collection. La classe Iterator contient les méthodes hasnext() et next(). La première méthode détermine s il existe encore des éléments dans la collection sur laquelle est appliquée l itérateur ; la seconde permet l accès à l élément suivant dans la collection. La méthode affichelesetudiants() utilise cette technique pour réaliser le parcours de la listeclassée. public void affichelesetudiants() { if(listeclassée.size()!= 0){ Collection c = listeclassée.values(); for(iterator i = c.iterator() ; i.hasnext();) { Etudiant e = (Etudiant) i.next(); e.afficheunetudiant(); else System.out.println("Il n y a pas d etudiant dans cette liste") ; La collection est initialisée grâce à la méthode values() de la classe HashMap, qui renvoie sous forme de collection la liste des associations clé-valeur effectivement stockées. Le parcours de cette collection est ensuite réalisé à l aide d une boucle for et d un itérateur associé à la collection (Iterator i = c.iterator()). La boucle vérifie s il existe encore des clés dans la liste (i.hasnext()). Si tel est le cas, le programme passe à l élément suivant dans la liste (i.next()) et l affiche (e.afficheunetudiant()). Les types génériques Les types génériques ont été mis en place avec la nouvelle version du compilateur pour offrir en premier lieu la possibilité de décrire des comportements identiques, indépendamment du type de données. L apport des «génériques» permet également de rendre le code plus robuste et simplifie grandement la programmation. Notre objectif n est pas ici de décrire toutes les fonctionnalités des types génériques, mais d examiner comment ces derniers simplifient la manipulation des collections d objets (ArrayList et HashMap) et permettent d éviter les erreurs lors de l exécution des applications manipulant des collections de données. Éditions Eyrolles 297

partie n 3 Outils et techniques orientés objet Attention, pour les lecteurs développant leurs applications sous Eclipse, les types génériques ne sont pas reconnus avec la version actuelle (Eclipse 3.0). Si vous souhaitez les utiliser, vous devez choisir un autre mode de développement (voir l annexe «Contenu et exploitation du CD- Rom», section «Installation d un environnement de développement»). Les collections stockent tout type d objets Comme nous avons pu le constater dans la section «Les listes», l ajout de valeurs à l intérieur d une liste ou d un dictionnaire ne peut s effectuer qu au travers d objets. Il est impossible d insérer un simple entier dans une liste, par exemple : ArrayList listevaleur = new ArrayList(); listevaleur.add(100); Ici, l ajout de la valeur numérique 100 provoque une erreur de compilation ayant pour message «The method add (int, Object) in the type ArrayList is not applicable for the arguments (int)». Pour insérer une valeur numérique, il convient de forcer le type simple (int, char, double, etc.) à devenir un objet, comme le montre l instruction suivante : listevaleur.add(new Integer(100)); Dans cette situation, la valeur numérique 100 est transformée en un «objet» contenant la valeur 100. Cette dernière peut alors être insérée dans une liste de type ArrayList. Cela fait, rien ne nous interdit d insérer dans la même liste, listevaleur, une nouvelle valeur comme suit : listevaleur.add("22"); La chaîne de caractères «22» n est pas un nombre mais un objet de type String. Il peut donc être inséré dans la liste listevaleur sans qu aucune erreur ne soit détectée lors de la compilation. La liste contient deux objets de types différents. Cependant, un problème se pose lors de la consultation de la liste. En effet, pour connaître la valeur enregistrée dans une liste, il convient de connaître son type. Pour récupérer la valeur 100, nous devons écrire : Integer valeur1 = (Integer) listevaleur.get(0); Mais il n est pas possible de récupérer la valeur «22» de la même façon. En effet, écrire : Integer valeur2 = (Integer) listevaleur.get(1); provoque une erreur d exécution ayant pour message : «Exception in thread "main" java.lang.classcastexception : java.lang.string». L interpréteur ne peut transformer une chaîne de caractères en un entier. La solution consistant à transformer la valeur "22" en String est valide. Mais elle oblige à connaître, avant consultation, le type de chaque donnée enregistrée pour chaque indice. Cela peut devenir très vite complexe à gérer. 298 Éditions Eyrolles

chapitre n 10 Collectionner un nombre indéterminé d objets Les génériques forcent le contrôle du type de données Pour éviter ce genre d erreur, la solution consiste à forcer le type de la liste à une seule forme de données, en utilisant les types génériques. Grâce à cette nouvelle structure, les listes ou encore les dictionnaires sont déclarés comme des listes d entiers, de chaînes de caractères ou d étudiants. Ils ne peuvent contenir aucune autre forme de données que celles spécifiées lors de la déclaration. La structure de déclaration d une liste utilisant des types génériques s écrit : ArrayList<Integer> listevaleur = new ArrayList<Integer>(); si la liste traitée ne doit contenir que des entiers, ou encore : ArrayList<Etudiant> listeetudiant = new ArrayList<Etudiant>(); pour définir une liste ne contenant que des objets de type Etudiant. Le terme <type> permet d indiquer au compilateur le type de données pouvant être traité par la liste ainsi créée. Il se traduit en français par «l objet listevaleur est une liste ne contenant que des entiers» ou «l objet listeetudiant est une liste ne contenant que des étudiants». De cette façon, une instruction du type : listevaleur.add("22"); entraîne une erreur décelable dès la phase de compilation. En effet, listevaleur, grâce au générique <Integer>, ne peut contenir que des entiers et «22» est de type String. L ambiguïté est levée bien avant la phase d exécution. Pour déclarer un dictionnaire d étudiants à l aide des types génériques, il convient d écrire : HashMap<String, Etudiant> listeclassée = new HashMap<String, Etudiant> (); Le premier terme placé entre < > indique que la clé d association est de type String, alors que le second définit le type des données (élément) enregistrées dans le dictionnaire. Les génériques simplifient le parcours des listes Grâce aux types génériques et à la nouvelle syntaxe de la boucle for, l affichage des éléments d une liste ou d un dictionnaire est simplifié. Ainsi avant la version 1.5 du compilateur, nous devions pour parcourir une liste d étudiants, écrire les instructions suivantes : Etudiant tmp ; ➊for (int i = 0; i < nbetudiants ; i++) { ➋ tmp = (Etudiant)liste.get(i) ; tmp.afficheunetudiant(); Éditions Eyrolles 299

partie n 3 Outils et techniques orientés objet ➊ La boucle for utilise un compteur permettant le parcours de la liste élément par élément, à partir de leur indice d enregistrement. ➋ Lors de la consultation de la liste, il est obligatoire d utiliser les mécanismes du «cast» pour s assurer que l objet extrait à l aide de la méthode get() soit du type attendu. Avec les types génériques, il n est plus nécessaire d utiliser le mécanisme du «cast», et la boucle for s écrit beaucoup plus simplement, comme le montre les instructions ci-après : ArrayList<Etudiant> listeetudiant = new ArrayList<Etudiant> (); for (Etudiant e : listeetudiant) e.afficheunetudiant(); La boucle for se traduit littéralement de la façon suivante : «pour chaque étudiant e contenu dans la liste listeetudiant, afficher son contenu». De la même façon, il n est plus nécessaire d utiliser un Iterator pour parcourir un dictionnaire. Ainsi, avec les instructions : ➊HashMap<String, Etudiant> dico = new HashMap<String, Etudiant> (); ➋ Collection<Etudiant> lc = dico.values(); ➌for ( Etudiant e : lc) e.afficheunetudiant(); le parcours du dictionnaire s effectue à partir d une collection d étudiants (➋) grâce à l utilisation du type générique <Etudiant>. Cette opération est valide, l objet dico contenant uniquement des objets de type Etudiant et des clés d association de type String (➊). Pour finir, la boucle for (➌) se traduit par l expression : «pour chaque étudiant e contenu dans la collection lc, afficher son contenu». Exemple : l application GestionClasse L emploi des types génériques transforme légèrement la classe Classe. La déclaration de la propriété listeclassée et le constructeur de la classe s écrivent à l aide des instructions : private HashMap<String, Etudiant> listeclassée ; public Classe() { listeclassée = new HashMap<String, Etudiant> (); La méthode permettant l affichage de la liste des étudiants s écrit : public void affichelesetudiants() { if (listeclassée.size()!= 0) { Collection<Etudiant> c = listeclassée.values(); for ( Etudiant e : c) e.afficheunetudiant(); else System.out.println("Il n y a pas d etudiant dans cette liste") ; 300 Éditions Eyrolles

chapitre n 10 Collectionner un nombre indéterminé d objets Ces transformations sont à insérer dans le fichier Classe.java. Ensuite, la gestion des étudiants d une classe est totalement achevée en écrivant l application GestionClasse comme suit : public class GestionClasse { public static void main (String [] argument) { byte choix = 0 ; Classe C = new Classe(); String prénom, nom; do { System.out.println("1. Ajoute un etudiant"); System.out.println("2. Supprime un etudiant"); System.out.println("3. Affiche la classe"); System.out.println("4. Affiche un etudiant"); System.out.println("5. Sortir"); System.out.println(); System.out.print("Votre choix : "); choix = Lire.b(); switch (choix) { case 1 : C.ajouteUnEtudiant(); break; case 2 : System.out.print("Entrer le prenom de l'etudiant : "); prénom = Lire.S(); System.out.print("Entrer le nom de l'etudiant : "); nom = Lire.S(); C.supprimeUnEtudiant(prénom, nom); break; case 3 : C.afficheLesEtudiants(); break; case 4 : System.out.print("Entrer le prenom de l'etudiant : "); prénom = Lire.S(); System.out.print("Entrer le nom de l'etudiant : "); nom = Lire.S(); C.rechercheUnEtudiant(prénom, nom); break; case 5 : System.exit(0) ; default : System.out.println("Cette option n'existe pas "); while ( choix!= 5); Éditions Eyrolles 301

partie n 3 Outils et techniques orientés objet Chaque option du menu utilise une méthode de la classe Classe. Ces options offrent la possibilité d ajouter, de supprimer et de consulter tout ou partie du dictionnaire, formé au fur et à mesure des choix de l utilisateur. L exécution de cette application peut avoir, par exemple, pour résultat à l écran : 1. Ajoute un etudiant 2. Supprime un etudiant 3. Affiche la classe 4. Affiche un etudiant 5. Sortir Votre choix : 1 Entrer le nom de l'etudiant : R. Entrer le prenom de l'etudiant : Sylvain Combien de notes pour l'etudiant Sylvain R. : 2 Entrer la note n 1 : 15 Entrer la note n 2 : 14 1. Ajoute un etudiant 2. Supprime un etudiant 3. Affiche la classe 4. Affiche un etudiant 5. Sortir Votre choix : 1 Entrer le nom de l'etudiant : C. Entrer le prenom de l'etudiant : Gaelle Combien de notes pour l'etudiant Gaelle C. : 2 Entrer la note n 1 : 16 Entrer la note n 2 : 12 1. Ajoute un etudiant 2. Supprime un etudiant 3. Affiche la classe 4. Affiche un etudiant 5. Sortir Votre choix : 4 Entrer le prenom de l'étudiant recherche : Entrer le nom de l'étudiant recherche : C. Gaelle est inconnu! 1. Ajoute un etudiant 2. Supprime un etudiant 3. Affiche la classe 4. Affiche un etudiant C. Gaelle 302 Éditions Eyrolles

chapitre n 10 Collectionner un nombre indéterminé d objets 5. Sortir Votre choix : 4 Entrer le prenom de l'étudiant recherche : Entrer le nom de l'étudiant recherche : C. Les notes de Gaelle C. sont : 16.0 12.0 Sa moyenne vaut 14.0 1. Ajoute un etudiant 2. Supprime un etudiant 3. Affiche la classe 4. Affiche un etudiant 5. Sortir Votre choix : 5 Gaelle Lors du premier choix 4, l utilisateur a inversé les nom et prénom de l étudiante. La clé qui en découle n existe pas dans le dictionnaire. Le programme ne peut donc pas retrouver les informations concernant cette étudiante. Ainsi, grâce aux objets de type HashMap, il est possible d organiser, sans beaucoup d efforts de programmation, des données de façon à pouvoir rechercher, modifier ou supprimer un élément dans une liste. Pourtant, l application GestionClasse possède encore un inconvénient majeur : elle perd la mémoire En effet, à chaque exécution, les données doivent de nouveau être saisies au clavier. Les données stockées dans la mémoire vive de l ordinateur se perdent à l arrêt du programme. Pour corriger ce défaut, le programme doit pouvoir enregistrer les informations traitées dans un fichier sur le disque dur. Cet enregistrement des données est aussi appelé archivage de données. Éditions Eyrolles 303