1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent
2 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde (B) CLASSES GÉNÉRIQUES À SPÉCIALISER : ArrayList Résumé dun choix possible entre les 2 méthodes dutilisation des classes ensemblistes classe JeuDominos // Var. instance privées -joueurs:ArrayList -joueurQuiDoitJouer:int -jeuEnCours:boolean -pioche:Pioche -ldj:LigneDeJeu classe Joueur // Var. instance privées -donne:ArrayList -nom:String -score:int classe Pioche // Var. instance privées -pioche:ArrayList classe LigneDeJeu // Var. instance privées -ldj:ArrayList Lécriture de quelques méthodes est présentée en cours Encapsulation directe Encapsulation dans une classe ad hoc De plus, on a implicitement dans lidée quun objet JeuDominos fasse jouer un joueur en lui fournissant la pioche et la ligne de jeu......si ces 2 derniers objets nexistaient pas (au travers de classes dédiées), il serait difficile de demander à un joueur de jouer car comment pourrait-il piocher ou poser son domino sur la ligne de jeu ? Ici, on na pas jugé utile de créer une classe Joueurs cest donc le jeu de dominos lui-même qui devra gérer les joueurs et leurs tour de jouer (on a ajouter 2 variables pour cela)
3 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde -= private += public $ = static classe JeuDominos // Variable dinstance -joueurs:ArrayList -joueurQuiDoitJouer:int -jeuEnCours:boolean -pioche:Pioche -ldj:LigneDeJeu // Méthodes dinstance +createJeuNormal():void +jeuDominosToString():String +size():int +jouerUnCoup():boolean +JeuDominos() // Cons. dun jeu vide classe Pioche // Variable dinstance -pioche:ArrayList // Méthodes dinstance +piocheToString():String +add(Domino d):void +isEmpty():boolean +size():int +piocheUnDomino():Domino +Pioche() // Cons. de pioche vide Classe Joueur // Variable dinstance -laDonne:ArrayList -nom:String // Méthodes dinstance +donneToString():String +add(Domino d):void +isEmpty():boolean +size():int +extractDomino(int rg):Domino +extractDomino(Domino d):Domino +jouerUnCoup(Pioche pioche, LigneDeJeu ldj):boolean +getDominoMaxValueToPlay(LigneDeJeu ldj):Domino // Cons. de donne vide +DonneJoueur() // Variable dinstance -ldj:ArrayList // Méthodes dinstance +ligneDeJeuToString():String +addToRight(Domino d):boolean +addToLeft(Domino d):boolean... // Cons. de ligne vide +LigneDeJeu() classe LigneDeJeu
4 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Maintenant !
5 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde (B) CLASSES GÉNÉRIQUES À SPÉCIALISER : TreeMap La classe générique TreeMap Exemples de spécialisation de la classe générique : TreeMap représente, dès lors, la classe des dictionnaires de joueurs accessibles par une entrée entière (leur numéro dordre) TreeMap représente, dès lors, la classe des dictionnaires de livres accessibles par une entrée ISBN (leur propre Isbn) si on veut les instancier, on peut utiliser un constructeur par défaut : new TreeMap ( )instancie un dictionnaire de joueurs vide new TreeMap ( )instancie un dictionnaire de livres vide si on voulait les instancier tout en conservant leurs références, on pourrait faire : TreeMap mapJoueurs = new TreeMap ( ) TreeMap mapLivres = new TreeMap ( ) TreeMap se spécialise à laide de 2 noms de classes dobjets : une classe qui représente les clés K et une autre des valeurs V
6 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde (B) CLASSES GÉNÉRIQUES À SPÉCIALISER : TreeMap Quest-ce quun dictionnaire ? Un dictionnaire est une entité qui gère un ensemble de valeurs V à laide de clés daccès uniques K. On peut créer de nouvelles entrées (K,V) : ex: mapLivres.put( unIsbn, unLivre ) mapJoueur.put(1, new Joueur("Marc")) Voir remplacement en On peut retrouver des entrées V à partir de clés K : ex: Livre l1 = mapLivres.get( unIsbn ) Joueur j = mapJoueur.get( 1 ) On peut remplacer danciennes entrées (K,V) : ex: mapLivre.put( 1, new Joueur("Alain")) => lancienne valeur associée à la clé 1 est remplacée par une nouvelle Un dictionnaire gère ses données comme des couples clé/valeur (K,V) quil maintient ordonnés par les clés On peut supprimer des entrées (K,V) à partir de clés K : ex: // supprimer une entrée en particulier mapLivre.remove ( unIsbn ) mapJoueur.remove ( 2 ) ex: // supprimer toutes les entrées mapLivre.clear () ou mapJoueur.clear() Méthodes principales : On peut tester la présence ou le nombre dentrées (K,V) : ex: mapLivre.isEmpty() mapLivre.size() * Voir autoboxing * * * *
7 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde (B) CLASSES GÉNÉRIQUES À SPÉCIALISER : TreeMap Itération sur un dictionnaire De plus, il est possible ditérer sur les éléments dun dictionnaire, soit par les clés K, soit par les valeurs V : Pour itérer sur les clés K, utiliser la méthode keySet () : Pour itérer sur les valeurs V, utiliser la méthode values () : D autres méthodes sont disponibles mais nécessitent des notions avancées de Java non vues ici. TreeMap dicLivres = new TreeMap (); // ajout de livres dans le dictionnaire... dicLivres.put(unIsbn,unLivre)... // Itération sur les clés du dictionnaire for ( ISBN isbn : dicLivres. keySet ()) { System.out.println(isbn.isbnToString()); } TreeMap dicLivres = new TreeMap (); // ajout de livres dans le dictionnaire... dicLivres.put(unIsbn,unLivre)... // Itération sur les valeurs du dictionnaire for ( Livre livre : dicLivres. values ()) { System.out.println(livre.livreToString()); } Voir
8 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde (B) CLASSES GÉNÉRIQUES À SPÉCIALISER : TreeMap Ordonnancement des dictionnaires Lors des ajouts de couples clé/valeur (K,V), les dictionnaires maintiennent automatiquement un ordre selon les clés. Mais cette ordre ne peut être réalisé que sous certaines conditions : - soit les clés implémentent linterface Comparable - soit une méthode de comparaison est fournie à la construction du dictionnaire* // INTERFACE définissant la qualité comparable POUR LES CLES de dictionnaires : public interface Comparable { int compareTo ( K key );// Compare la clé courante (this) avec lobjet key spécifié // Retourne une valeur négative, zéro ou positive // suivant que this est plus petite, égale ou plus grande // que lobjet key fourni } * cette seconde technique ne sera vu que plus tard
9 (B) CLASSES GÉNÉRIQUES À SPÉCIALISER : TreeMap Ordonnancement de dictionnaires à laide de linterface Comparable Maintenant, on peut créer un dictionnaire de livres basé sur des clés ISBN. Exemple :TreeMap dicLivres = new TreeMap (); Implémentation simpliste à revoir ! Sinon, la plupart des classes du JDK implémentent déjà linterface Comparable. On peut donc les utiliser directement comme des clés pour des dictionnaires. Exemples :TreeMap dicJoueurs = new TreeMap (); TreeMap dicLivres = new TreeMap (); Déclaration dimplémentation de linterface Comparable Méthode de linterface devant être implémentée (à ajouter à la classe) Méthode de linterface devant être implémentée (à ajouter à la classe)
10 Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Acta est fabula