ArrayList, UML - LCQB

publicité
!
!
!
UE 2I002 (ex LI230) : éléments de
programmation par objets avec Java
TD9 - ArrayList, UML
Juliana Silva Bernardes
[email protected]
http://www.lcqb.upmc.fr/julianab/teaching/JAVA/
Sumary
‣ArrayList
‣Paramètre de la méthode main
‣Diagramme UML
2
ArrayList
‣ Un programme a souvent besoin de pouvoir gérer une liste d’éléments.
‣ La taille de cette liste d’éléments va varier tout au long du programme.
‣ C’est possible, mais pas très simple changer la taille d’un tableau. ‣ Java fournit les classes nécessaires pour traiter les tableaux de taille variable : ArrayList
3
ArrayList
‣ La classe ArrayList permet donc de construire des tableaux de taille variable.
‣ De la même manière qu’un tableau d’int, de char,de String une ArrayList
contient des valeurs d’un type donné (Un object):
Declaration
ArrayList<Integer> maListeInt;
ArrayList<String> maListeStr;
ArrayList<Character> maListeChar;
ArrayList<Object> maListe;
Creation
maListeInt = new ArrayList<Integer>();
maListeChar = new ArrayList<Character>();
maListeStr = new ArrayList<String>();
4
ArrayList
CHAPITRE 6.
Utilisation
UTILISATION D’OBJETS : STRING
6.10.ET
CONTENU
ARRAYLIST
DE LA CLASSE ARRAYLIST
Le objets
minimum
sevital
manipulent essentiellement à travers des méthodes.
‣ Les
Les méthodes
qui suiventretourne
permettent la
d’obtenir
la même
chose
qu’avec un tableau normal, mais en
size()
longueur
d’une
ArrayList
‣ La méthode
gagnant, en plus, la possibilité d’ajouter une nouvelle case, ou de supprimer une case existante.
Dans le texte qui suit, Type correspond au type des éléments de l’ArrayList. Pour une ArrayList
int
taille=
maListe.size();
de String,
par exemple,
on remplacera Type
par String
int size() : fonction qui renvoie la longueur d’une ArrayList ; La fonction booléenne isEmpty
permet de savoir si une liste est vide.
pour
les tableaux,
les
cases
des i.
ArrayList
sont numérotées
en
‣ Comme
Type get(int
i) renvoie
l’entrée de
la case
numéro
Comme pour les tableaux,
les cases des ArrayList
commençant
à 0. en commençant à 0. Le type de l’objet retourné est celui précisé lors de la créasont numérotées
Type
tion de l’ArrayList. Pour nous ce sera donc String, Double ou Integer. À partir de
java 1.5, java
ń sait ż convertir
Integer
un Double
get(int
i) renvoie
l’entréeunde
la caseou
numéro
i en int ou double. La fonction
suivante permet donc de calculer la somme des éléments d’une ArrayList d’entiers :
public static int somme(ArrayList<Integer> liste) {
int s=0;
for (int i= 0; i < liste.size(); i++) {
s= s + liste.get(i);
}
return s;
}
add(Type element) ajoute un élément à la fin de la liste. Pour construire la liste [2,3,5, 7, 11], on
5
écrira donc :
ArrayList
Utilisation
add(Type element) ajoute un élément à la fin de la liste. Pour construire la liste [2,3,5, 7, 11], on écrira donc
ArrayList<Integer> liste = new ArrayList<Integer>(); !
liste.add(2); liste.add(3); liste.add(5);
liste.add(7); liste.add(11);
‣ Notez qu’en toute rigueur, add prend un argument du type précisé lors de la
création de l’ArrayList, c’est-à-dire Integer dans notre cas. Il faudrait donc
écrire :
liste.add(new Integer(2)); liste.add(new Integer(3)); // etc...
Pour simplifier java 1.5 a introduit un système de conversion automatique entre les types de
base int, double, … et les classes correspondantes (Integer, Double, Character et Boolean.
6
ArrayList
Utilisation
set(int i, Type element) remplace l’ancienne valeur qui était dans la case i par element
liste [2,3,5, 7, 11],
liste.set(0, 5)
liste [5,3,5, 7, 11],
remove(int i) supprime l’élément qui est dans la case i;
liste.remove(0)
liste [3,5, 7, 11],
7
ArrayList
publicclassA{
privateintx=0;
privateinty=0;
publicA(intx,inty){
this.x=x;
this.y=y;
}
publicStringtoString(){
return"x="+x+"y="+y;
}
}
importjava.util.ArrayList;
publicclassB{
privateArrayList<A>listA;
publicB(){listA=newArrayList<A>();}
publicvoidajouterA(Aa){listA.add(a);}
publicvoidremoveA(Aa){listA.remove(a);} publicvoidafficherListe(){
for(inti=0;i<listA.size();i++){
System.out.println(listA.get(i));
} }
}
publicclassTest{
publicstaticvoidmain(String[]args){
Bb=newB();
Aa1=newA(0,2);
Aa2=newA(2,3); b.ajouterA(a1);
b.ajouterA(a2); System.out.println("ListeA");
b.afficherListe(); 8
$ java Test
Liste A
x=0 y=2
x=2 y=3
ArrayList
publicclassA{
privateintx=0;
privateinty=0;
publicA(intx,inty){
this.x=x;
this.y=y;
}
publicStringtoString(){
return"x="+x+"y="+y;
}
}
importjava.util.ArrayList;
publicclassB{
privateArrayList<A>listA;
publicB(){listA=newArrayList<A>();}
publicvoidajouterA(Aa){listA.add(a);}
publicvoidremoveA(Aa){listA.remove(a);} publicvoidafficherListe(){
for(inti=0;i<listA.size();i++){
System.out.println(listA.get(i));
} }
}
publicclassTest{
publicstaticvoidmain(String[]args){
...
b.removeA(a1);
System.out.println("ListeAapresremove"+a1);
b.afficherListe();
} }
Liste A apres remove x=0 y=2
x=2 y=3
9
tring[], c’est à dire un tableau de chaînes de caractères. Ce paramètre permet de transinformations entre la ligne de commande et le programme java. Prenons un exemple où le
me se contente d’afficher les valeurs passées sur la ligne de commande.
Paramètre de la méthode main
‣ Depuis le début, nous utilisons systématiquement la méthode main avec un
ss LigneCommande{
c staticparamètre
void main(String[]
args){
de type
String[], un tableau de chaînes de caractères.
or (int i=0; i < args.length; i++){
‣ Ce paramètre permet de transférer des informations entre la ligne de commande et
Terminal.ecrireStringln(args[i]);
le programme java.
>java LigneCommande un deux trois
publicclassLigneCommande{
publicstaticvoidmain(String[]args){
un
un exemple
:
d’exécution
for(inti=0;i<args.length;i++){
deux
System.out.println(args[i]);
LigneCommande
un deux trois
}
trois
}
}
0
1
2
¨un¨ ¨deux¨ ¨trois¨
ns que même si l’on passe un nombre en paramètre, celui-ci est contenu dans le tableau sous
ne chaîne.
La tableau
cette aexécution
a trois
cases.est
bleau args
dans args
cettedans
exécution
trois cases.
Sa valeur
LigneCommande un 12 56 deux
10
+BWB QFSNFU EF QSPHSBNNFS UPVU NPEÒMF TPVT GPSNF EF EJBHSBNNF EF DMBTTF 6.- UFM RVF
ÏTFOUÏ DJEFTTVT 7PJDJ RVFMRVFT FYFNQMFT EF DPSSFTQPOEBODF FOUSF MF NPEÒMF 6.- FU MF DPEBHF
WB
Diagramme UML
$MBTTFT FU NFNCSFT
Personne
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
+ calculerDureePret() : int
+ getAge() : int
"OOFYF # %JBHSBNNF EF DMBTTFT 6.-
$MBTTFT BCTUSBJUFT
Personne
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
- ageMajorite : int = 18
+ calculerDureePret() : int
+ setAgeMajorite(a : int)
+ getAge() : int
# *OUFSGBDFT
<<interface>>
IAffichable
Diagramme UML
*OUFSGBDFT
Class abstract
<<interface>>
<<abstract>>
IAffichable
+ afficher()
)ÏSJUBHF
Personne
- nom : String
Adherent
- iD : int
publicabstractclassIAffichable{
publicabstractvoidafficher();
}
+ setAgeMajorite(a : int)
+ getAge() : int
Diagramme UML
*OUFSGBDFT
Class abstract
*OUFSGBDFT
<<interface>>
<<abstract>>
<<interface>>
IAffichable
IAffichable
+ afficher()
+ afficher()
)ÏSJUBHF
)ÏSJUBHF
Personne
Personne
- nom: String
: String
- nom
Adherent
Adherent
- iD : int
- iD : int
3ÏBMJTBUJPO
publicabstractclassIAffichable{
publicabstractvoidafficher();
}
Diagramme UML
"TTPDJBUJPOT
A1
B1
# $PSSFTQPOEBODF 6.-+
*
A2
B2
Homme
0..1
mari
0..1
epouse
Femme
A2
B2
Diagramme UML
Homme
0..1
mari
0..1
epouse
Femme
Personne
1
chef
0..*
subordonne
Femme
Personne
Diagramme UML
1
chef
0..*
subordonne
Diagramme UML
Composition et Aggregation
‣ La composition et Aggregation peuvent être vue comme une relation “fait partie de”
‣ Aggregation peut etre partager entre plusieurs classes
‣ Composition est exclusive
‣ Aggregation, si un objet B fait partie d’un objet A alors B peut exister sans A et peut
etre associé à C.
Piece
murs
‣ Composition, si un objet B fait partie d’un objet A alors B ne peut pas exister sans A
Personne
cerveux
Téléchargement