17
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/

éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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/

Page 2: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

2

‣ArrayList

‣Paramètre de la méthode main

‣Diagramme UML

Sumary

Page 3: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

Page 4: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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;

Page 5: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

Page 6: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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...

Page 7: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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],

Page 8: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

Page 9: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

Page 10: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

Page 11: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ

ƈ

Page 12: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

Page 13: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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 ������ ����� �ɨ Ƈ������� �ɨ �ɨ ŚŜŜŜ

ƈ

Page 14: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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

������ ����� �������� Ƈ������� ���������ʳ��������ʴ �����������Ś������� �������� ���� ŚŜŜŜ

ƈ

Page 15: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

Diagramme UML A2 B2* ������ ����� �ɩ Ƈ

������� ���������ʳ�ɩʴ �ɩ� ŚŜŜŜ

ƈ

Homme

Femme

0..1

0..1

mari

epouse

������ ����� ����� Ƈ������� ���� ������ ŚŜŜŜ

ƈ

������ ����� ���� Ƈ������� ����� ���� ŚŜŜŜ

ƈ

Personne 1chef

0..*subordonne

������ ����� �������� Ƈ������� ���������ʳ��������ʴ �����������Ś������� �������� ���� ŚŜŜŜ

ƈ

Page 16: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

Diagramme UML

A2 B2* ������ ����� �ɩ Ƈ������� ���������ʳ�ɩʴ �ɩ� ŚŜŜŜ

ƈ

Homme

Femme

0..1

0..1

mari

epouse

������ ����� ����� Ƈ������� ���� ������ ŚŜŜŜ

ƈ

������ ����� ���� Ƈ������� ����� ���� ŚŜŜŜ

ƈ

Personne 1chef

0..*subordonne

������ ����� �������� Ƈ������� ���������ʳ��������ʴ �����������Ś������� �������� ���� ŚŜŜŜ

ƈ

Page 17: éléments de programmation par objets avec Java TD9 - Université Pierre et … · 2017. 1. 25. · programmation par objets avec Java TD9 - ArrayList, UML!!! ... CHAPITRE6. UTILISATIOND’OBJETS

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