Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
UE 2I002 (ex LI230) : éléments de programmation par objets avec Java
TD9 - ArrayList, UML
!!!
Juliana Silva [email protected]
http://www.lcqb.upmc.fr/julianab/teaching/JAVA/
2
‣ArrayList
‣Paramètre de la méthode main
‣Diagramme UML
Sumary
3
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
4
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):
ArrayList<Integer> maListeInt;
ArrayList<Character> maListeChar;
ArrayList<String> maListeStr;
Declaration
CreationmaListeInt = new ArrayList<Integer>();
maListeChar = new ArrayList<Character>();
maListeStr = new ArrayList<String>();
ArrayList<Object> maListe;
5
ArrayList
int taille= maListe.size();
Utilisation
‣ Les objets se manipulent essentiellement à travers des méthodes.
‣ La méthode size() retourne la longueur d’une ArrayList
‣Comme pour les tableaux, les cases des ArrayList sont numérotées en commençant à 0.
Type get(int i) renvoie l’entrée de la case numéro i
CHAPITRE 6. UTILISATION D’OBJETS : STRING ET ARRAYLIST6.10. CONTENU DE LA CLASSE ARRAYLIST
Le minimum vital
Les méthodes qui suivent permettent d’obtenir la même chose qu’avec un tableau normal, mais engagnant, 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 ArrayListde String, par exemple, on remplacera Type par String
int size() : fonction qui renvoie la longueur d’une ArrayList ; La fonction booléenne isEmptypermet de savoir si une liste est vide.
Type get(int i) renvoie l’entrée de la case numéro i. Comme pour les tableaux, les cases des ArrayListsont numérotées en commençant à 0. Le type de l’objet retourné est celui précisé lors de la créa-tion de l’ArrayList.Pour nous ce sera donc String, Double ou Integer.À partir dejava 1.5, java n sait z convertir un Integer ou un Double en int ou double. La fonctionsuivante 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écrira donc :
ArrayList<Integer> l= new ArrayList<Integer>();l.add(2); l.add(3); l.add(5);l.add(7); l.add(11);
Notez qu’en toute rigueur, add prend un argument du type précisé lors de la création del’ArrayList, c’est-à-dire Integer dans notre cas. Il faudrait donc écrire :
l.add(new Integer(2));l.add(new Integer(3));// etc...
Cependant, pour simplifier la vie des programmeurs, java 1.5 a introduit un système de conver-sion automatique entre les types de base int, double, char, boolean et les classescorrespondantes (Integer, Double, Character et Boolean.
set(int i, Type element) remplace l’ancienne valeur qui était dans la case i par element. Logique-ment, i doit être inférieure à la size() de l’ArrayList.
remove(int i) supprime l’élément qui est dans la case i ;remove(Type element) supprime la première occurrence de l’élément de valeur element 2 ; si l’élé-
ment est présent plusieurs fois, il ne sera enlevé qu’une seule fois. Le contenu des cases est dé-calé, et la longeur de l’ArrayList diminue de 1. Si l’élément n’est pas présent, la liste n’estpas modifiée.
2. Il y a une ambiguïté si on appelle l.remove(5) sur une ArrayList<Integer>. S’agit-il de supprimer lavaleur 5, ou la valeur de la case numéro 5 ? Si on passe un int, c’est la première méthode remove qui sera appelée (onsupprime l’élément qui est dans la case d’indice 5) ; si on appelle l.remove(new Integer(5), c’est la valeur 5 quisera supprimée.
NFA031 c⃝CNAM 2012 9
6
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
‣ 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 :
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.
ArrayList<Integer> liste = new ArrayList<Integer>(); !
liste.add(2); liste.add(3); liste.add(5); liste.add(7); liste.add(11);
liste.add(new Integer(2)); liste.add(new Integer(3)); // etc...
7
ArrayList
Utilisation
set(int i, Type element) remplace l’ancienne valeur qui était dans la case i par element
liste.set(0, 5)
liste [2,3,5, 7, 11],
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],
8
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();
$ java Test Liste A x=0 y=2 x=2 y=3
9
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
10
Paramètre de la méthode main
‣Depuis le début, nous utilisons systématiquement la méthode main avec un paramètre de type String[], un tableau de chaînes de caractères.
‣Ce paramètre permet de transférer des informations entre la ligne de commande et le programme java.
>java LigneCommande un deux trois
un deux trois
publicclassLigneCommande{ publicstaticvoidmain(String[]args){ for(inti=0;i<args.length;i++){ System.out.println(args[i]); } }}
La tableau args dans cette exécution a trois cases.
6.7. PARAMÈTRE DE LA MÉTHODEMAINCHAPITRE 6. UTILISATION D’OBJETS : STRING ET ARRAYLIST
Laméthode compareTo fait une comparaison d’ordre selon le code unicode de chaque caractère.Cela correspond à l’ordre alphabétique uniquement pour les caractères sans accent. Elle renvoie unentier qui est 0 en cas d’égalité, un entier positif si l’objet est plus grand que la paramètre et un entiernégatif si c’est le paramètre qui est plus grand.
6.7 Paramètre de la méthode main
Depuis le début de l’année, nous utilisons systématiquement la méthode main avec un paramètrede type String[], c’est à dire un tableau de chaînes de caractères. Ce paramètre permet de trans-férer des informations entre la ligne de commande et le programme java. Prenons un exemple où leprogramme se contente d’afficher les valeurs passées sur la ligne de commande.
public class LigneCommande{public static void main(String[] args){
for (int i=0; i < args.length; i++){Terminal.ecrireStringln(args[i]);
}}
}
Voici un exemple d’exécution :
> java LigneCommande un deux troisundeuxtrois
La tableau args dans cette exécution a trois cases. Sa valeur est 0 1 2¨un¨ ¨deux¨ ¨trois¨
Notons que même si l’on passe un nombre en paramètre, celui-ci est contenu dans le tableau sousforme d’une chaîne.
> java LigneCommande un 12 56 deuxun1256deux
La tableaux args vaut 0 1 2 3¨un¨ ¨12¨ ¨56¨ ¨trois¨
Si l’on veut transformer une de ces chaînes en un entier, il faut utiliser une fonction de conversion.
6.8 Conversion entre chaînes et autres types
Il est parfois utile de convertir une chaîne de caractère en une valeur d’un autre type. Par exemple,on peut vouloir transformer une chaîne qui ne contient que des chiffres en un nombre entier. Pourréaliser la conversion, il faut utiliser la méthode Integer.parseInt et lui donner en paramètre lachaîne à convertir.
6 NFA031 c⃝CNAM 2012
Diagramme UML
*1A B
*1A B
*1A B
*1A B
����±��
� �
�� � �
��
+ calculerDureePret() : int+ getAge() : int
+ surnom : String- nom : String- prenom : String# dateNaissance : Date
Personne ������ ����� �������� Ƈ������ ������ ������Ś������� ������ ������ Ś������� ������ ��� Ś��������� ���� �������������Ś������ ��� �����������������ſƀ ƇŜŜŜƈ������ ��� ������ſƀ ƇŜŜŜƈ
ƈ
+ calculerDureePret() : int+ setAgeMajorite(a : int)+ getAge() : int
+ surnom : String- nom : String- prenom : String# dateNaissance : Date- ageMajorite : int = 18
Personne ������ �������� ����� �������� Ƈ������ ������ ������Ś������� ������ ������Ś������� ������ ��� Ś��������� ���� �������������Ś������� ������ ��� ����������� ʰ ɨɯ Ś������ ��� �����������������ſƀ ƇŜŜŜƈ������ ������ ���� ��������������ſ��� �ƀ ƇŜŜŜƈ������ ��� ������ſƀ ƇŜŜŜƈ
ƈ
+ afficher()
<<interface>>IAffichable
��������� ����������� Ƈ���� ��������ſƀŚ
ƈ
- nom : StringPersonne
- iD : intAdherent
������ ����� �������� ������� �������� Ƈ������� ��� �� Ś
ƈ
+ afficher()
<<interface>>IAffichable
+ imprimer()
<<interface>>IImprimable
+ afficher()+ imprimer()
- nom : String- fichier : File
Image
������ ����� ����� ���������� �����������ř ����������� Ƈ������� ������ ��� Ś������� ��� �������Ś������ ���� ��������ſƀƇŜŜŜƈ������ ���� ��������ſƀƇŜŜŜƈ
ƈ
A1 B1 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ
ƈ
Diagramme UML
publicabstractclassIAffichable{ publicabstractvoidafficher();}
+ calculerDureePret() : int+ setAgeMajorite(a : int)+ getAge() : int
+ surnom : String- nom : String- prenom : String# dateNaissance : Date- ageMajorite : int = 18
Personne ������ �������� ����� �������� Ƈ������ ������ ������Ś������� ������ ������Ś������� ������ ��� Ś��������� ���� �������������Ś������� ������ ��� ����������� ʰ ɨɯ Ś������ ��� �����������������ſƀ ƇŜŜŜƈ������ ������ ���� ��������������ſ��� �ƀ ƇŜŜŜƈ������ ��� ������ſƀ ƇŜŜŜƈ
ƈ
+ afficher()
<<interface>>IAffichable
��������� ����������� Ƈ���� ��������ſƀŚ
ƈ
- nom : StringPersonne
- iD : intAdherent
������ ����� �������� ������� �������� Ƈ������� ��� �� Ś
ƈ
+ afficher()
<<interface>>IAffichable
+ imprimer()
<<interface>>IImprimable
+ afficher()+ imprimer()
- nom : String- fichier : File
Image
������ ����� ����� ���������� �����������ř ����������� Ƈ������� ������ ��� Ś������� ��� �������Ś������ ���� ��������ſƀƇŜŜŜƈ������ ���� ��������ſƀƇŜŜŜƈ
ƈ
A1 B1 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ
ƈ
<<abstract>>
Class abstract
Diagramme UML
publicabstractclassIAffichable{ publicabstractvoidafficher();}
+ calculerDureePret() : int+ setAgeMajorite(a : int)+ getAge() : int
+ surnom : String- nom : String- prenom : String# dateNaissance : Date- ageMajorite : int = 18
Personne ������ �������� ����� �������� Ƈ������ ������ ������Ś������� ������ ������Ś������� ������ ��� Ś��������� ���� �������������Ś������� ������ ��� ����������� ʰ ɨɯ Ś������ ��� �����������������ſƀ ƇŜŜŜƈ������ ������ ���� ��������������ſ��� �ƀ ƇŜŜŜƈ������ ��� ������ſƀ ƇŜŜŜƈ
ƈ
+ afficher()
<<interface>>IAffichable
��������� ����������� Ƈ���� ��������ſƀŚ
ƈ
- nom : StringPersonne
- iD : intAdherent
������ ����� �������� ������� �������� Ƈ������� ��� �� Ś
ƈ
+ afficher()
<<interface>>IAffichable
+ imprimer()
<<interface>>IImprimable
+ afficher()+ imprimer()
- nom : String- fichier : File
Image
������ ����� ����� ���������� �����������ř ����������� Ƈ������� ������ ��� Ś������� ��� �������Ś������ ���� ��������ſƀƇŜŜŜƈ������ ���� ��������ſƀƇŜŜŜƈ
ƈ
A1 B1 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ
ƈ
<<abstract>>
Class abstract
+ calculerDureePret() : int+ setAgeMajorite(a : int)+ getAge() : int
+ surnom : String- nom : String- prenom : String# dateNaissance : Date- ageMajorite : int = 18
Personne ������ �������� ����� �������� Ƈ������ ������ ������Ś������� ������ ������Ś������� ������ ��� Ś��������� ���� �������������Ś������� ������ ��� ����������� ʰ ɨɯ Ś������ ��� �����������������ſƀ ƇŜŜŜƈ������ ������ ���� ��������������ſ��� �ƀ ƇŜŜŜƈ������ ��� ������ſƀ ƇŜŜŜƈ
ƈ
+ afficher()
<<interface>>IAffichable
��������� ����������� Ƈ���� ��������ſƀŚ
ƈ
- nom : StringPersonne
- iD : intAdherent
������ ����� �������� ������� �������� Ƈ������� ��� �� Ś
ƈ
+ afficher()
<<interface>>IAffichable
+ imprimer()
<<interface>>IImprimable
+ afficher()+ imprimer()
- nom : String- fichier : File
Image
������ ����� ����� ���������� �����������ř ����������� Ƈ������� ������ ��� Ś������� ��� �������Ś������ ���� ��������ſƀƇŜŜŜƈ������ ���� ��������ſƀƇŜŜŜƈ
ƈ
A1 B1 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ
ƈ
Diagramme UML
+ calculerDureePret() : int+ setAgeMajorite(a : int)+ getAge() : int
+ surnom : String- nom : String- prenom : String# dateNaissance : Date- ageMajorite : int = 18
Personne ������ �������� ����� �������� Ƈ������ ������ ������Ś������� ������ ������Ś������� ������ ��� Ś��������� ���� �������������Ś������� ������ ��� ����������� ʰ ɨɯ Ś������ ��� �����������������ſƀ ƇŜŜŜƈ������ ������ ���� ��������������ſ��� �ƀ ƇŜŜŜƈ������ ��� ������ſƀ ƇŜŜŜƈ
ƈ
+ afficher()
<<interface>>IAffichable
��������� ����������� Ƈ���� ��������ſƀŚ
ƈ
- nom : StringPersonne
- iD : intAdherent
������ ����� �������� ������� �������� Ƈ������� ��� �� Ś
ƈ
+ afficher()
<<interface>>IAffichable
+ imprimer()
<<interface>>IImprimable
+ afficher()+ imprimer()
- nom : String- fichier : File
Image
������ ����� ����� ���������� �����������ř ����������� Ƈ������� ������ ��� Ś������� ��� �������Ś������ ���� ��������ſƀƇŜŜŜƈ������ ���� ��������ſƀƇŜŜŜƈ
ƈ
A1 B1 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ
ƈ
A2 B2* ������ ����� �ɩ Ƈ������� ���������ʳ�ɩʴ �ɩ� ŚŜŜŜ
ƈ
Homme
Femme
0..1
0..1
mari
epouse
������ ����� ����� Ƈ������� ���� ������ ŚŜŜŜ
ƈ
������ ����� ���� Ƈ������� ����� ���� ŚŜŜŜ
ƈ
Personne 1chef
0..*subordonne
������ ����� �������� Ƈ������� ���������ʳ��������ʴ �����������Ś������� �������� ���� ŚŜŜŜ
ƈ
Diagramme UML A2 B2* ������ ����� �ɩ Ƈ
������� ���������ʳ�ɩʴ �ɩ� ŚŜŜŜ
ƈ
Homme
Femme
0..1
0..1
mari
epouse
������ ����� ����� Ƈ������� ���� ������ ŚŜŜŜ
ƈ
������ ����� ���� Ƈ������� ����� ���� ŚŜŜŜ
ƈ
Personne 1chef
0..*subordonne
������ ����� �������� Ƈ������� ���������ʳ��������ʴ �����������Ś������� �������� ���� ŚŜŜŜ
ƈ
Diagramme UML
A2 B2* ������ ����� �ɩ Ƈ������� ���������ʳ�ɩʴ �ɩ� ŚŜŜŜ
ƈ
Homme
Femme
0..1
0..1
mari
epouse
������ ����� ����� Ƈ������� ���� ������ ŚŜŜŜ
ƈ
������ ����� ���� Ƈ������� ����� ���� ŚŜŜŜ
ƈ
Personne 1chef
0..*subordonne
������ ����� �������� Ƈ������� ���������ʳ��������ʴ �����������Ś������� �������� ���� ŚŜŜŜ
ƈ
Diagramme UML
Composition et Aggregation
‣ La composition et Aggregation peuvent être vue comme une relation “fait partie de”
‣Composition, si un objet B fait partie d’un objet A alors B ne peut pas exister sans A
Piece murs
‣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.
Personne cerveux