• Aucun résultat trouvé

UE 2I002 (ex LI230) : éléments de programmation par objets avec Java TD9 - ArrayList, UML

N/A
N/A
Protected

Academic year: 2022

Partager "UE 2I002 (ex LI230) : éléments de programmation par objets avec Java TD9 - ArrayList, UML"

Copied!
17
0
0

Texte intégral

(1)

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/

(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

Creation

maListeInt = new ArrayList<Integer>();

maListeChar = new ArrayList<Character>();

maListeStr = new ArrayList<String>();

ArrayList<Object> maListe;

(5)

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

Type get(int i) renvoie l’entrée de la case numéro i. Comme pour les tableaux, les cases des ArrayList sont 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, Doubleou Integer. À partir de java 1.5, java ´n sait ˙z convertir un Integer ou un Double 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 é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 de l’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 classes correspondantes (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 element2 ; 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’est pas modifiée.

2. Il y a une ambiguïté si on appelle l.remove(5) sur une ArrayList<Integer>. S’agit-il de supprimer la valeur 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 (on supprime l’élément qui est dans la case d’indice 5) ; si on appelle l.remove(new Integer(5), c’est la valeur 5 qui sera 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

public class A {

private int x = 0;

private int y = 0;

public A(int x, int y){

this.x =x;

this.y =y;

}

public String toString(){

return "x="+x+"y="+ y;

} }

import java.util.ArrayList;

public class B{

private ArrayList<A> listA;

public B(){listA = new ArrayList<A>();}

public void ajouterA(A a){listA.add(a);}

public void removeA(A a){listA.remove(a);}

public void afficherListe(){

for (int i =0; i <listA.size(); i++){

System.out.println(listA.get(i));

} }

} public class Test {

public static void main(String [] args){

B b = new B();

A a1 = new A(0,2);

A a2 = new A(2,3);

b.ajouterA(a1);

b.ajouterA(a2);

System.out.println("Liste A");

b.afficherListe();

$ java Test Liste A

x=0 y=2 x=2 y=3

(9)

ArrayList

public class A {

private int x = 0;

private int y = 0;

public A(int x, int y){

this.x =x;

this.y =y;

}

public String toString(){

return "x="+x+"y="+ y;

} }

import java.util.ArrayList;

public class B{

private ArrayList<A> listA;

public B(){listA = new ArrayList<A>();}

public void ajouterA(A a){listA.add(a);}

public void removeA(A a){listA.remove(a);}

public void afficherListe(){

for (int i =0; i <listA.size(); i++){

System.out.println(listA.get(i));

} }

} public class Test {

public static void main(String [] args){

...

b.removeA(a1);

System.out.println("Liste A apres remove " + a1);

b.afficherListe();

} }

Liste A apres remove x=0 y=2 x=2 y=3

(10)

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

public class LigneCommande{


public static void main(String[] args){

for (int i=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ÉTHODE MAIN CHAPITRE 6. UTILISATION D’OBJETS : STRING ET ARRAYLIST

La mé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 un entier qui est 0 en cas d’égalité, un entier positif si l’objet est plus grand que la paramètre et un entier né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ètre de 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ù le programme 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 trois un

deux trois

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 sous forme d’une chaîne.

> java LigneCommande un 12 56 deux un

12 56 deux

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

réaliser la conversion, il faut utiliser la méthode Integer.parseInt et lui donner en paramètre la

chaîne à convertir.

(11)

Diagramme UML

# $PSSFTQPOEBODF 6.-+BWB

# "HSÏHBUJPO FU DPNQPTJUJPO

%FVY TPVTUZQFT EBTTPDJBUJPOT QFSNFUUFOU EF QSÏDJTFS VO TFOT QBSUJDVMJFS Ë DFT SFMBUJPOT MBHSÏHBUJPO FU MB DPNQPTJUJPO &MMFT QFVWFOU ÏHBMFNFOU ÐUSF EJSJHÏFT

1 *

A B

1 *

A B

1 *

A B

1 *

A B

'ĶĴłĿIJ #ŝŜ o &YFNQMFT EF DPNQPTJUJPOT FU EBHSÏHBUJPOT

-BHSÏHBUJPO FTU VOF BTTPDJBUJPO BWFD SFMBUJPO EF TVCPSEJOBUJPO TPVWFOU OPNNÏF

SFQSÏTFOUÏF QBS VO USBJU SFMJBOU MFT EFVY DMBTTFT FU EPOU MPSJHJOF TF EJTUJOHVF EF MBVUSF FYUSÏNJUÏ MB DMBTTF TVCPSEPOOÏF QBS VO

MPTBOHF DSFVY 6OF EFT DMBTTFT wSFHSPVQFw EBVUSFT DMBTTFT 0O QFVU

EJSF RVF MPCKFU VUJMJTF PV QPTTÒEF VOF JOTUBODF EF MB DMBTTF

-B

DPNQPTJUJPO

FTU VOF BTTPDJBUJPO MJBOU MF DZDMF EF WJF EFT EFVY DMBTTFT DPODFSOÏFT 6OF BT TPDJBUJPO EF DPNQPTJUJPO TJOUFSQSÒUF DPNNF VOF DMBTTF FTU DPNQPTÏF EF VO PV QMVTJFVST ÏMÏNFOU EF MBVUSF DMBTTF &MMF FTU SFQSÏTFOUÏF QBS VO USBJU SFMJBOU MFT EFVY DMBTTFT FU EPOU MPSJHJOF TF EJT UJOHVF EF MBVUSF FYUSÏNJUÏ MB DMBTTF DPNQPTBOU QBS VO

MPTBOHF QMFJO 0O QFVU EJSF RVF MPCKFU

FTU DPNQPTÏ JOTUBODF EF MB DMBTTF FU EPOD TJ MPCKFU EF UZQF FTU EÏUSVJU MFT PCKFUT EF UZQF RVJ MF DPNQPTFOU TPOU ÏHBMFNFOU EÏUSVJU $F TFSB ÏHBMFNFOU TPVWFOU MFT PCKFUT EF UZQF RVJ DSÏFSPOU MFT PCKFUT EF UZQF

# $PSSFTQPOEBODF 6.-+BWB

+BWB QFSNFU EF QSPHSBNNFS UPVU NPEÒMF TPVT GPSNF EF EJBHSBNNF EF DMBTTF 6.- UFM RVF QSÏTFOUÏ DJEFTTVT 7PJDJ RVFMRVFT FYFNQMFT EF DPSSFTQPOEBODF FOUSF MF NPEÒMF 6.- FU MF DPEBHF +BWB

# $MBTTFT FU NFNCSFT

+ calculerDureePret() : int + getAge() : int

+ surnom : String - nom : String - prenom : String

# dateNaissance : Date Personne

# $MBTTFT BCTUSBJUFT

"OOFYF # %JBHSBNNF EF DMBTTFT 6.-

+ calculerDureePret() : int + setAgeMajorite(a : int) + getAge() : int

+ surnom : String - nom : String - prenom : String

# dateNaissance : Date - ageMajorite : int = 18

Personne

# *OUFSGBDFT

+ afficher()

<<interface>>

IAffichable

# )ÏSJUBHF

- nom : String Personne

- iD : int

Adherent

# 3ÏBMJTBUJPO

+ afficher()

<<interface>>

IAffichable

+ imprimer()

<<interface>>

IImprimable

+ afficher() + imprimer() - nom : String - fichier : File

Image

# "TTPDJBUJPOT

A1 B1

(12)

Diagramme UML

public abstract class IAffichable{

public abstract void afficher();

}

"OOFYF # %JBHSBNNF EF DMBTTFT 6.-

+ calculerDureePret() : int + setAgeMajorite(a : int) + getAge() : int

+ surnom : String - nom : String

- prenom : String

# dateNaissance : Date - ageMajorite : int = 18

Personne

# *OUFSGBDFT

+ afficher()

<<interface>>

IAffichable

# )ÏSJUBHF

- nom : String Personne

- iD : int

Adherent

# 3ÏBMJTBUJPO

+ afficher()

<<interface>>

IAffichable

+ imprimer()

<<interface>>

IImprimable

+ afficher() + imprimer() - nom : String - fichier : File

Image

# "TTPDJBUJPOT

A1 B1

<<abstract>>

Class abstract

(13)

Diagramme UML

public abstract class IAffichable{

public abstract void afficher();

}

"OOFYF # %JBHSBNNF EF DMBTTFT 6.-

+ calculerDureePret() : int + setAgeMajorite(a : int) + getAge() : int

+ surnom : String - nom : String

- prenom : String

# dateNaissance : Date - ageMajorite : int = 18

Personne

# *OUFSGBDFT

+ afficher()

<<interface>>

IAffichable

# )ÏSJUBHF

- nom : String Personne

- iD : int

Adherent

# 3ÏBMJTBUJPO

+ afficher()

<<interface>>

IAffichable

+ imprimer()

<<interface>>

IImprimable

+ afficher() + imprimer() - nom : String - fichier : File

Image

# "TTPDJBUJPOT

A1 B1

<<abstract>>

Class abstract

"OOFYF # %JBHSBNNF EF DMBTTFT 6.-

+ calculerDureePret() : int + setAgeMajorite(a : int) + getAge() : int

+ surnom : String - nom : String

- prenom : String

# dateNaissance : Date - ageMajorite : int = 18

Personne

# *OUFSGBDFT

+ afficher()

<<interface>>

IAffichable

# )ÏSJUBHF

- nom : String Personne

- iD : int

Adherent

# 3ÏBMJTBUJPO

+ afficher()

<<interface>>

IAffichable

+ imprimer()

<<interface>>

IImprimable

+ afficher() + imprimer() - nom : String - fichier : File

Image

# "TTPDJBUJPOT

A1 B1

(14)

Diagramme UML

"OOFYF # %JBHSBNNF EF DMBTTFT 6.-

+ calculerDureePret() : int + setAgeMajorite(a : int) + getAge() : int

+ surnom : String - nom : String

- prenom : String

# dateNaissance : Date - ageMajorite : int = 18

Personne

# *OUFSGBDFT

+ afficher()

<<interface>>

IAffichable

# )ÏSJUBHF

- nom : String Personne

- iD : int

Adherent

# 3ÏBMJTBUJPO

+ afficher()

<<interface>>

IAffichable

+ imprimer()

<<interface>>

IImprimable

+ afficher() + imprimer() - nom : String - fichier : File

Image

# "TTPDJBUJPOT

A1 B1

# $PSSFTQPOEBODF 6.-+BWB

A2 * B2

Homme

Femme 0..1

0..1

mari

epouse

Personne 1 chef 0..*

subordonne

(15)

Diagramme UML

# $PSSFTQPOEBODF 6.-+BWB

A2 * B2

Homme

Femme 0..1

0..1

mari

epouse

Personne 1 chef 0..*

subordonne

(16)

Diagramme UML

# $PSSFTQPOEBODF 6.-+BWB

A2 * B2

Homme

Femme 0..1

0..1

mari

epouse

Personne 1 chef 0..*

subordonne

(17)

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

Références

Documents relatifs

Server (réponse): informations sur le serveur HTTP Date (général): estampille les messages HTTP Last-modified (serveur): date de dernière modification ETag (): identifiant de

Donner des noms explicites (classes, méthodes, attributs) Développer une documentation du code (cf cours

– et d’e↵ectuer les instructions n´ecessaires pour la cr´eation d’un objet de cette classe Les constructeurs sont appel´es quand on cr´ee (mot-cl´e new) un objet de cette

On ne peut pas utiliser l’opérateur « point » (.) sur les variables de la classe Chien ailleurs que dans la classe Chien

UE 2I002 (ex LI230) : éléments de programmation par objets avec Java!. TD4 - Composition,

‣ Un tableau est une structure de données contenant un groupe d'éléments tous du même type. ‣ Le type des éléments peut être un type primitif ou

‣ boolean, byte, short, char, int, long, float et double, sont associées des classes Boolean, Byte, Short, Character, Integer, Long, Float et Double. ‣ Ces classes ont des

6OF EFT QSPQSJÏUÏT JOEVJUFT QBS MF QPMZNPSQIJTNF FTU RVF MJOUFSQSÏUFVS +BWB FTU DBQBCMF EF USPVWFS MF USBJUFNFOU Ë FČFDUVFS MPST EF MBQQFM EVOF NÏUIPEF TVS VO PCKFU &#34;JOTJ