UML : composition vs. agrégation Java : classes de l'API et structures de données Master 2 LITL Programmation pour le TAL (SLT0905V) Java - La classe Object, les listes Franck Sajous/CLLE-ERSS http://fsajous.free.fr/ Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 1/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (un grand classique) On a déjà vu des cas où l'on énonçait (rapidement) : telle classe est composée de telle autre Un assemblage complexe (ex : mur) est composé de briques. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 2/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (un grand classique) On a déjà vu des cas où l'on énonçait (rapidement) : telle classe est composée de telle autre Un assemblage complexe (ex : mur) est composé de briques. Pas besoin de nom d'association : le losange plein (noirci) dénote la relation de composition. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 2/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (un grand classique) On a déjà vu des cas où l'on énonçait (rapidement) : telle classe est composée de telle autre Un assemblage complexe (ex : mur) est composé de briques. Pas besoin de nom d'association : le losange plein (noirci) dénote la relation de composition. Il existe un type d'association proche, appelée agrégation (représenté par un losange vide). Exemple : Une population, ou un club, est un agrégat de personnes. Si une personne appartient un club donné, peut appartenir simultanément à un autre club. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 2/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (2) Quelle diérence ? Le caractère exclusif. Si un brique appartient à un mur M1 , elle ne peut pas appartenir simultanément au mur M2 → composition. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 3/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (2) Quelle diérence ? Le caractère exclusif. Si un brique appartient à un mur M1 , elle ne peut pas appartenir simultanément au mur M2 → composition. Une personne appartenant à un club donné (les anciens du Master ECIL) peut simultanément appartenir à un autre club (le cercle littéraire des épluchures de patates) : les deux clubs se partagent la personne → agrégation. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 3/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (2) Quelle diérence ? Le caractère exclusif. Si un brique appartient à un mur M1 , elle ne peut pas appartenir simultanément au mur M2 → composition. Une personne appartenant à un club donné (les anciens du Master ECIL) peut simultanément appartenir à un autre club (le cercle littéraire des épluchures de patates) : les deux clubs se partagent la personne → agrégation. (cas standard) Un ÷il appartient à/compose un humain de manière exclusive : composition. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 3/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (2) Quelle diérence ? Le caractère exclusif. Si un brique appartient à un mur M1 , elle ne peut pas appartenir simultanément au mur M2 → composition. Une personne appartenant à un club donné (les anciens du Master ECIL) peut simultanément appartenir à un autre club (le cercle littéraire des épluchures de patates) : les deux clubs se partagent la personne → agrégation. (cas standard) Un ÷il appartient à/compose un humain de manière exclusive : composition. Mais entre ÷il et couleur : composition ou association simple ? Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 3/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (2) Quelle diérence ? Le caractère exclusif. Si un brique appartient à un mur M1 , elle ne peut pas appartenir simultanément au mur M2 → composition. Une personne appartenant à un club donné (les anciens du Master ECIL) peut simultanément appartenir à un autre club (le cercle littéraire des épluchures de patates) : les deux clubs se partagent la personne → agrégation. (cas standard) Un ÷il appartient à/compose un humain de manière exclusive : composition. Mais entre ÷il et couleur : composition ou association simple ? Peut-on dire qu'un ÷il possède une couleur ? Est composé d'une couleur ? Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 3/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition et agrégation (2) Quelle diérence ? Le caractère exclusif. Si un brique appartient à un mur M1 , elle ne peut pas appartenir simultanément au mur M2 → composition. Une personne appartenant à un club donné (les anciens du Master ECIL) peut simultanément appartenir à un autre club (le cercle littéraire des épluchures de patates) : les deux clubs se partagent la personne → agrégation. (cas standard) Un ÷il appartient à/compose un humain de manière exclusive : composition. Mais entre ÷il et couleur : composition ou association simple ? Peut-on dire qu'un ÷il possède une couleur ? Est composé d'une couleur ? C'est plutôt une propriété → association. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 3/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition, agrégation, association simple Le choix de modélisation ne s'impose pas toujours de manière triviale. Dans ces cas-là, dessinez un diagramme d'objets (et glosez !). Diagramme de classe Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 4/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition, agrégation, association simple Le choix de modélisation ne s'impose pas toujours de manière triviale. Dans ces cas-là, dessinez un diagramme d'objets (et glosez !). Diagramme de classe Diagramme d'objets Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 4/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Composition, agrégation, association simple Le choix de modélisation ne s'impose pas toujours de manière triviale. Dans ces cas-là, dessinez un diagramme d'objets (et glosez !). Diagramme de classe Diagramme d'objets Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 4/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } Point et ObjetGraphique sont des classes dénies par l'utilisateur ; Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } et ObjetGraphique sont des classes dénies par l'utilisateur ; la classe String fait partie de l'API Java. Elle étend directement la classe Object ; Point Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } et ObjetGraphique sont des classes dénies par l'utilisateur ; la classe String fait partie de l'API Java. Elle étend directement la classe Object ; Point étend ObjetGraphique ; Point Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } et ObjetGraphique sont des classes dénies par l'utilisateur ; la classe String fait partie de l'API Java. Elle étend directement la classe Object ; Point étend ObjetGraphique ; ObjetGraphique étend (directement) la classe Object ; Point Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } et ObjetGraphique sont des classes dénies par l'utilisateur ; la classe String fait partie de l'API Java. Elle étend directement la classe Object ; Point étend ObjetGraphique ; ObjetGraphique étend (directement) la classe Object ; donc Point étend (indirectement) la classe Object. Point Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Everything is Object En Java, toute classe qui n'étend pas explicitement une autre classe étend directement la classe Object class Point extends ObjetGraphique { ... } et ObjetGraphique sont des classes dénies par l'utilisateur ; la classe String fait partie de l'API Java. Elle étend directement la classe Object ; Point étend ObjetGraphique ; ObjetGraphique étend (directement) la classe Object ; Point API : doc de la classe Object → rien de bien intéressant, mais. . . Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 5/14 UML : composition vs. agrégation Java : classes de l'API et structures de données API vs. classes utilisateurs Jusqu'ici, nous avons déni toutes les classes que nous utilisions. Java dispose d'un nombre important de classes regroupées dans une API (Application programming interface) Il s'agit de classes +/- prêtes à l'emploi regroupées en packages E.g. la paquet java.io contient des classes liées aux entrées/sorties (chiers, notamment) javax.swing contient des classes servant à construire des IHM java.util contient des classes structures de données telles que liste ordonnées liste des classes : http://docs.oracle.com/javase/7/docs/api/ pour utiliser une classe d'un paquet donné de l'API dans une classe utilisateur : import nompaquet; Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 6/14 UML : composition vs. agrégation Java : classes de l'API et structures de données La classe String Chaînes constantes, objets String Chaînes constantes déjà rencontrées : System.out.println ("Bonjour"); "Bonjour" = chaîne constante, codée en dur dans le programme. Utilisation d'objets de type String : String chaine = new String ("Bonjour"); System.out.println (chaine); System.out.println ("Longueur = " + chaine.length()); chaine = chaine.concat (" le monde"); System.out.println (chaine); String chaine2 = chaine.replace ("jour", "ne nuit"); System.out.println (chaine2); voir la doc de l'API ! Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 7/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Les tableaux Liste ordonnée, de taille xe, d'éléments du même type. Syntaxe : type nomtableau []; type nomtableau [] = new type[taille]; type : type des éléments que contiendra le tableau. taille : nombre d'éléments maximum que peut contenir le tableau. indice du premier élément du tableau : 0 taille du tableau : nom_tableau.length (de type int) indice du dernier élément du tableau : nom_tableau.length - 1 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 8/14 UML : composition vs. agrégation Java : classes de l'API et structures de données Tableaux, exemples int tableauEntiers [ ] ; t a b l e a u E n t i e r s = new i n t [ 5 ] ; f o r ( i n t i = 0 ; i < t a b l e a u E n t i e r s . l e n g t h ; i ++) tableauEntiers [ i ] = ( i ∗ i ); f o r ( i = 0 ; i < t a b l e a u E n t i e r s . l e n g t h ; i ++) System . o u t . p r i n t l n ( " Le c a r r é de " + S t r i n g . v a l u e O f ( i ) + " est " + String . valueOf ( t a b l e a u E n t i e r s [ i ] ) ) ; d o u b l e t a b l e a u F l o t t a n t s [ ] = { 3 . 2 , 5 . 4 , − 6.458}; System . o u t . p r i n t l n ( t a b l e a u F l o t t a n t s . l e n g t h ) ; // a f f i c h e : 3 P o i n t M o b i l e segment = new P o i n t M o b i l e [ 2 ] ; P o i n t M o b i l e pm1 = new P o i n t M o b i l e ( 3 , 2 ) ; t a b l e a u P o i n t [ 0 ] = pm1 ; P o i n t M o b i l e pm2 = new P o i n t M o b i l e ( ) ; t a b l e a u P o i n t [ 1 ] = pm2 ; t a b l e a u P o i n t [ 1 ] . setX ( 7 ) ; t a b l e a u P o i n t [ 1 ] . setY ( 4 ) ; 0 1 segment tableauEntier : Franck Sajous/CLLE-ERSS 0 1 4 Séance 5 9 16 Java, Object et listes 9/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. "on va se servir des classes de l'API contenues dans le paquet java.util" Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. "on déclare et instancie tableau comme une variable de type ArrayList" Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 1 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 1 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 1 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 1 deuxième élément du tableau Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 1 deuxième élément du tableau, dont on sait qu'il est de type PointMobile Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 1 ... on peut donc lui appliquer les méthodes de cette classe Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 1 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList Tableaux, à taille variable, d'objets de types potentiellement hétérogènes. 0 Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 10/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérations 0 Franck Sajous/CLLE-ERSS Séance 5 1 Java, Object et listes 11/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérations 0 1 première itération (i = 0) : ache Indice 0 : java.lang.String Indice 0 : Premier element Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 11/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérations 0 1 première itération (i = 0) : ache Indice 0 : java.lang.String Indice 0 : Premier element deuième itération (i = 1) : ache Indice 1 : graph.PointMobile Indice 1 : [PointMobile-PointM-1] (0, 0) Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 11/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérations 0 1 première itération (i = 0) : ache Indice 0 : java.lang.String Indice 0 : Premier element deuième itération (i = 1) : ache Indice 1 : graph.PointMobile Indice 1 : [PointMobile-PointM-1] (0, 0) Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 11/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérations 0 1 première itération (i = 0) : ache Indice 0 : java.lang.String Indice 0 : Premier element deuième itération (i = 1) : ache Indice 1 : graph.PointMobile Indice 1 : [PointMobile-PointM-1] (0, 0) ce n'est pas la méthode toString() de la classe Object qui s'exécute, mais celle de la classe réelle de l'objet Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 11/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérateur ArrayList tableau = new ArrayList(); ... Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 12/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérateur ArrayList tableau = new ArrayList(); ... Deux manières d'itérer sur une liste : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 12/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérateur ArrayList tableau = new ArrayList(); ... Deux manières d'itérer sur une liste : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 12/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList, itérateur ArrayList tableau = new ArrayList(); ... Deux manières d'itérer sur une liste : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 12/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList typés On peut spécier le type d'éléments que l'on va mettre dans la liste : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 13/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList typés On peut spécier le type d'éléments que l'on va mettre dans la liste : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 13/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList typés On peut spécier le type d'éléments que l'on va mettre dans la liste : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 13/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList d'objets un raccourci pour : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 14/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList d'objets un raccourci pour : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 14/14 UML : composition vs. agrégation Java : classes de l'API et structures de données ArrayList d'objets un raccourci pour : Franck Sajous/CLLE-ERSS Séance 5 Java, Object et listes 14/14