Java - La classe Object, les listes - Franck Sajous

publicité
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
Téléchargement