Vous êtes sur la page 1sur 69

Initiation la programmation oriente-objet

avec le langage Java


Ple Informatique io:-io:{
:,8 couis Fauiiel
:o:, Saint-Etienne Cedex o:
Gauthier Picard
gauthiei.picaid(emse.fi
Institut Henii Fayol, ENSM.SE
Laurent Vercouter
lauient.veicoutei(insa-iouen.fi
LITIS, INSA Rouen
Table des matires
: Introduction au langage Java :
:.: Enviionnement Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
:.:.: Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
:.:.: Inteipitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
:.: Piogiammation oiiente-objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
:.:.: Classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
:.:.: Objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i Syntaxe du langage ,
:.: Types de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
:.:.: Types piimitifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
:.:.: Tableaux et matiices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
:.:., Chaines de caiacties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
:.: Opiateuis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
:., Stiuctuies de contiole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
:.,.: Instiuctions conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . .
:.,.: Instiuctions itiatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :o
:.,., Instiuctions break et continue . . . . . . . . . . . . . . . . . . . . . . . . . ::
lments de programmation Java :
,.: Piemieis pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
,.:.: Classe HelloWorld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
,.:.: Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
,.: Vaiiables et mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
,.:.: Visibilit des champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
,.:.: Vaiiables et mthodes de classe . . . . . . . . . . . . . . . . . . . . . . . . . :o
{ Hritage :
.: Piincipe de lhiitage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
.:.: Rednition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :o
.:.: Polymoiphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ::
.: Inteifaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
., Classes abstiaites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
. Classes et mthodes gniiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
Gestion des exceptions i,
,.: Dclaiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :,
,.: Inteiception et tiaitement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . :
,., Classes dexception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,o
,. Classication des eiieuis en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,o
iii
Table des matires
o Gestion des entres/sorties simples
o.: Flux dentie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
o.:.: Lectuie des enties claviei . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
o.:.: Lectuie paitii dun chiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
o.:., Lectuie dobjets eniegistis . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,o
o.: Flux de soitie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
o.:.: Eciituie sui la soitie standaid cian . . . . . . . . . . . . . . . . . . . . . ,,
o.:.: Eciituie dans un chiei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
o.:., Eciituie dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
A Applications graphiques (package swing) {
A.: Le schma Modle-Vue-Contioleui . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
A.: Composants giaphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.:.: Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.:.: Containeis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
A.:., Exemple dinteiface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
A., Contioleuis dvnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,:
A.,.: Evnements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,:
A.,.: Inteiface Listenei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,:
A.,., Exemple de contioleui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,:
B Diagramme de classes UML
B.: Repisentation des classes et inteifaces . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B.:.: Les classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B.:.: Les membies de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B.:., Les classes abstiaites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,o
B.:. Les inteifaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,o
B.: Les ielations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B.:.: Lhiitage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B.:.: La ialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B., Les associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,,
B.,.: Diiection des associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,8
B.,.: Agigation et composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
B. Coiiespondance UML-Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
B..: Classes et membies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
B..: Classes abstiaites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
B.., Inteifaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . oo
B.. Hiitage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . oo
B.., Ralisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . oo
B..o Associations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . oo
iv
Table des matires
La plupait des piogiammes donns en exemple dans ce couis sont tlchaigeables lURL :
http://www.emse.fr/~picard/cours/1A/java
v
Table des matires
vi
Chapitre 1
Introduction au langage Java
Le langage Java est un langage gnialiste de piogiammation synthtisant les piincipaux lan-
gages existants lois de sa ciation en :, pai Sun Microsystems. Il peimet une piogiammation
oiiente-objet ( linstai de SmallTalk et, dans une moindie mesuie, C++), modulaiie (langage
ADA) et iepiend une syntaxe tis pioche de celle du langage C.
Outie son oiientation objet, le langage Java a lavantage dtie modulaire (on peut ciiie des
poitions de code gniiques, c--d utilisables pai plusieuis applications), rigoureux (la plupait
des eiieuis se pioduisent la compilation et non lexcution) et portable (un mme piogiamme
compil peut sexcutei sui diients enviionnements). En contie-paitie, les applications Java ont
le dfaut dtie plus lentes lexcution que des applications piogiammes en C pai exemple.
1.1 Environnement Java
Java est un langage inteipit, ce qui signie quun piogiamme compil nest pas diiectement
excutable pai le systme dexploitationmais il doit tie inteipit pai unautie piogiamme, quon
appelle inteipiteui. La guie :.: illustie ce fonctionnement.
FicUvi :.: Inteipitation du langage
Un piogiammeui Java ciit son code souice, sous la foime de classes, dans des chieis dont
lextension est .java. Ce code souice est alois compil pai le compilateui javac en un langage
appel bytecode et eniegistie le isultat dans un chiei dont lextension est .class. Le bytecode
1
Chapitre 1. Introduction au langage Java
ainsi obtenu nest pas diiectement utilisable. Il doit tie inteipit pai la machine virtuelle de Java
qui tiansfoime alois le code compil en code machine compihensible pai le systme dexploita-
tion. Cest la iaison poui laquelle Java est un langage poitable : le bytecode ieste le mme quelque
soit lenviionnement dexcution.
En :oo, Sun Miciosystems est iachet pai Oiacle Coipoiation qui fouinit doinavant les
outils de dveloppement Java SE(Standard Edition) contenus dans le Java Development Kit (JDK).
Au moment o est ciit ce liviet, la deiniie veision stable est le JDK :.,.
1.1.1 Compilation
La compilation seectue pai la commande javac suivie dun ou plusieuis nom de chieis
contenant le code souice de classes Java. Pai exemple, javac MyProg.java compile la classe My-
Prog dont le code souice est situ dans le chiei MyProg.java. La compilation ncessite souvent la
picision de ceitains paiamties poui seectuei coiiectement, notamment loisque le code souice
fait ifience ceitaines classes situes dans dauties ipeitoiies que celui du code compil. Il faut
alois ajoutei loption -classpath suivie des ipeitoiies (spais pai un ; sous Windows et : sous
Unix) des classes ifiences. Pai exemple :
javac -classpath /prog/exos1:/cours MyProg.java
compileia le chiei MyProg.java si celui-ci fait ifience dauties classes situes dans les i-
peitoiies /prog/exos1 et /cours. Le isultat de cette compilation est un chiei nomm My-
Prog.class contenant le bytecode coiiespondant au souice compil. Ce chiei est ci pai dfaut
dans le ipeitoiie o la compilation sest pioduite. Il est cependant foitement souhaitable de ne
pas mlangei les chieis contenant le code souice et ceux contenant le bytecode. Un ipeitoiie de
destination o seia ci le chiei MyProg.class peut tie picis pai loption -d, pai exemple :
javac -d /prog/exos1 -classpath /cours MyProg.java
1.1.2 Interprtation
Le bytecode obtenu pai compilation ne peut tie excut qu laide de linteipiteui. Lex-
cution seectue pai la commande java suivie du nom de la classe excutei (sans lextension
.class). Comme lois de la compilation, il se peut que des classes dauties ipeitoiies soient n-
cessaiies. Il faut alois utilisei loption -classpath comme dans lexemple qui suit :
java -classpath /prog/exos1:/cours MyProg
1.2 Programmation oriente-objet
Chaque langage de piogiammation appaitient une famille de langages dnissant une ap-
pioche ouune mthodologie gniale de piogiammation. Pai exemple, le langage Cest unlangage
de piogiammation procdurale cai il suppose que le piogiammeui sintiesse en piioiit aux trai-
tements que son piogiamme devia eectuei. Un piogiammeui C commenceia pai identiei ces
tiaitements poui ciiie les fonctions qui les ialisent sui des donnes piises comme paiamties
dentie.
La piogiammation oriente-objet (intioduite pai le langage SmallTalk) piopose une mtho-
dologie centie sui les donnes. Le piogiammeui Java va daboid identiei un ensemble dobjets,
tel que chaque objet iepisente un lment qui doit tie utilis ou manipul pai le piogiamme,
sous la foime densembles de donnes. Ce nest que dans un deuxime temps, que le piogiam-
meui va ciiie les tiaitements, en associant chaque traitement un objet donn. Un objet peut
2
1.2. Programmation oriente-objet
tie vu comme une entit iegioupant un ensemble de donnes et de mthodes (lquivalent dune
fonction en C) de tiaitement.
1.2.1 Classe
Un objet est une vaiiable (piesque) comme les auties. Il faut notamment quil soit dclai
avec son type. Le type dun objet est un type complexe (pai opposition aux types piimitifs entiei,
caiactie, ) quon appelle une classe.
Une classe iegioupe un ensemble de donnes (qui peuvent tie des vaiiables piimitives ou des
objets) et un ensemble de mthodes de tiaitement de ces donnes et/ou de donnes extiieuies
la classe. On paile dencapsulation poui dsignei le iegioupement de donnes dans une classe.
Pai exemple, une classe Rectangle utilise poui instanciei des objets iepisentant des iec-
tangles, encapsule entieis : la longueui et la laigeui du iectangle ainsi que la position en abscisse
et en oidonne de loiigine du iectangle (pai exemple, le coin en haut gauche). On peut alois
imaginei que la classe Rectangle implmente une mthode peimettant de dplacei le iectangle qui
ncessite en entie deux entieis indiquant la distance de dplacement en abscisse et en oidonne.
Laccs aux positions de loiigine du iectangle se fait diiectement (i.e. sans passage de paiamtie)
loisque les donnes sont encapsules dans la classe o est dnie la mthode. Un exemple, ciit
en Java, de la classe Rectangle est donn ci-dessous :
class Rectangle {
int longueur;
int largeur ;
int origine_x;
int origine_y;
void deplace(int x, int y) {
this.origine_x = this.origine_x + x ;
this.origine_y = this.origine_y + y ;
}
int surface() {
return this.longueur * this.largeur ;
}
}
Poui ciiie un piogiamme avec un langage oiient-objet, le piogiammeui ciit uniquement
des classes coiiespondant aux objets de son systme. Les tiaitements eectuei sont piogiamms
dans les mthodes de ces classes qui peuvent faiie appel des mthodes dauties classes. En gn-
ial, on dnit une classe, dite excutable, dont une mthode peut tie appele poui excutei le
piogiamme.
Encapsulation
Lois de la conception dun piogiamme oiient-objet, le piogiammeui doit identiei les objets
et les donnes appaitenant chaque objet mais aussi des dioits daccs quont les auties objets sui
ces donnes. Lencapsulation de donnes dans un objet peimet de cachei ou non leui existence
aux auties objets du piogiamme. Une donne peut tie dclaie en accs :
public : les auties objets peuvent accdei la valeui de cette donne ainsi que la modiei ;
3
Chapitre 1. Introduction au langage Java
priv : les auties objets nont pas le dioit daccdei diiectement la valeui de cette donne
(ni de la modiei). En ievanche, ils peuvent le faiie indiiectement pai des mthodes de
lobjet concein (si celles-ci existent en accs public).
Les diients dioits daccs utilisables en Java sont dtaills dans la section ,.:.:.
Mthode constructeur
Chaque classe doit dnii une ouplusieuis mthodes paiticuliies appeles des constructeurs.
Un constructeur est une mthode invoque lois de la ciation dun objet. Cette mthode, qui peut
tie vide, eectue les opiations ncessaiies linitialisation dun objet. Chaque constiucteui doit
avoii le mme nomque la classe o il est dni et na aucune valeui de ietoui (cest lobjet ci qui
est ienvoy). Dans lexemple picdent de la classe iectangle, le constiucteui initialise la valeui
des donnes encapsules :
class Rectangle {
...
Rectangle(int lon, int lar) {
this.longueur = lon ;
this.largeur = lar ;
this.origine_x = 0 ;
this.origine_y = 0 ;
}
...
}
Plusieuis constiucteuis peuvent tie dnis sils acceptent des paiamties dentie diients.
1.2.2 Objet
Instanciation
Un objet est une instance (anglicisme signiant cas ou exemple ) dune classe et est if-
ienc pai une vaiiable ayant un tat (ou valeui). Poui ciei un objet, il est ncessaiie de dclaiei
une vaiiable dont le type est la classe instanciei, puis de faiie appel un constiucteui de cette
classe. Lexemple ci-dessous illustie la ciation dun objet de classe Cercle en Java :
Cercle mon_rond;
mon_rond = new Cercle();
Lusage de paienthses linitialisation du vecteui, montie quune mthode est appele poui
linstanciation. Cette mthode est un constiucteui de la classe Cercle. Si le constiucteui appel
ncessite des paiamties dentie, ceux-ci doivent tie piciss entie ces paienthses (comme lois
dun appel classique de mthode). Linstanciation dun objet de la classe Rectangle faisant appel
au constiucteui donn en exemple ci-dessous pouiia sciiie :
Rectangle mon_rectangle = new Rectangle(15,5);
Remarque importante : enJava, la notionde pointeui est tianspaiente poui le piogiammeui.
Il faut nanmoins savoii que toute variable dsignant un objet est un pointeur. Il sensuit alois
que le passage dobjets comme paiamties dune mthode est toujours un passage pai ifience.
A linveise, le passage de vaiiables piimitives comme paiamties est toujouis un passage pai
valeui.
4
1.2. Programmation oriente-objet
Accs aux variables et aux mthodes
Poui accdei une vaiiable associe un objet, il faut picisei lobjet qui la contient. Le sym-
bole . seit spaiei lidenticateui de lobjet de lidenticateui de la vaiiable. Une copie de la
longueui dun iectangle dans un entiei temp sciit :
int temp = mon_rectangle.longueur;
La mme syntaxe est utilise poui appelei une mthode dun objet. Pai exemple :
mon_rectangle.deplace(10,-3);
Poui quun tel appel soit possible, il faut que tiois conditions soient iemplies :
:. La vaiiable ou la mthode appele existe !
:. Une vaiiable dsignant lobjet vis existe et soit instancie.
,. Lobjet, au sein duquel est fait cet appel, ait le dioit daccdei la mthode ou la vaiiable
(cf. section ,.:.:).
Poui ifiencei lobjet couiant (celui dans lequel se situe la ligne de code), le langage Java
fouinit le mot-cl this. Celui-ci na pas besoin dtie instanci et sutilise comme une vaiiable
dsignant lobjet couiant. Le mot-cl this est galement utilis poui faiie appel un constiucteui
de lobjet couiant. Ces deux utilisations possibles de this sont illusties dans lexemple suivant :
class Carre {
int cote ;
int origine_x;
int origine_y;
Carre(int cote, int x, int y) {
this.cote = cote ;
this.origine_x = x ;
this.origine_y = y ;
}
Carre(int cote) {
this(cote, 0, 0);
}
}
5
Chapitre 1. Introduction au langage Java
6
Chapitre 2
Syntaxe du langage
Le langage C a seivi de base poui la syntaxe du langage Java :
le caiactie de n dune instiuction est ;
a = c + c ;
les commentaiies (non tiaits pai le compilateui) se situent entie les symboles /* et */
ou commencent pai le symbole // en se teiminant la n de la ligne
int a ; // ce commentaire tient sur une ligne
int b ;
ou
/*Ce commentaire ncessite
2 lignes*/
int a ;
les identicateuis de vaiiables ou de mthodes acceptent les caiacties {a..z, {A..Z, s, _
ainsi que les caiacties {o.. sils ne sont pas le piemiei caiactie de lidenticateui. Il faut
videmment que lidenticateui ne soit pas un mot iseiv du langage (comme int ou
for).
Ex : mon_entier et ok4all sont des identicateuis valides mais
mon-entier et 4all ne sont pas valides poui des identicateuis.
2.1 Types de donnes
2.1.1 Types primitifs
Le tableau :.: liste lensemble des types piimitifs de donnes de Java.
En plus de ces types piimitifs, le teime void est utilis poui spciei le ietoui vide ou une
absence de paiamties dune mthode. On peut iemaiquei que chaque type piimitif possde une
classe qui encapsule un attiibut du type piimitif. Pai exemple, la classe Integer encapsule un
attiibut de type int et peimet ainsi deectuei des opiations de tiaitement et des manipulations
qui seiaient impossibles sui une simple vaiiable de type int.
Alinveise du langage C, Java est un langage tis iigouieux sui le typage des donnes. Il est in-
teidit daectei une vaiiable la valeui dune vaiiable dun type diient ' si cette seconde vaiiable
nest pas explicitement tiansfoime. Pai exemple :
:. exception faite des types associs pai une ielation dhiitage, cf. section
7
Chapitre 2. Syntaxe du langage
T:vii :.: Type piimitifs de donnes en Java
Type Classe q. Valeurs Porte Dfaut
boolean Boolean true ou false N/A false
byte Byte entiei sign {-128..128 o
char Character caiactie {/uoooo../uFFFF /uoooo
short Short entiei sign {-32768..32767 0
int Integer entiei sign {-2147483648..2147483647 0
long Long entiei sign {-2
31
..2
31
1 0
float Float iel sign {-3, 4028234
38
..3, 4028234
38
0.0
{-1, 40239846
45
..1, 40239846
45

double Double iel sign {-1, 797693134


308
..1, 797693134
308
0.0
{-4, 94065645
324
..4, 94065645
324

int a ;
double b = 5.0 ;
a = b ;
est inteidit et doit tie ciit de la maniie suivante :
int a ;
double b = 5.0 ;
a = (int)b ;
2.1.2 Tableaux et matrices
Une vaiiable est dclaie comme un tableau ds lois que des ciochets sont pisents soit apis
son type, soit apis son identicateui. Les deux syntaxes suivantes sont acceptes poui dclaiei
un tableau dentieis (mme si la piemiie, non autoiise en C, est plus intuitive) :
int[] mon_tableau;
int mon_tableau2[];
Un tableau a toujouis une taille xe qui doit tie picise avant laectation de valeuis ses
indices, de la maniie suivante :
int[] mon_tableau = new int[20];
De plus, la taille de ce tableau est disponible dans une vaiiable length appaitenant au tableau
et accessible pai mon_tableau.length. On peut galement ciei des matiices ou des tableaux
plusieuis dimensions en multipliant les ciochets (ex : int[][] ma_matrice;). A linstai du C,
on accde aux lments dun tableau en picisant un indice entie ciochets (mon_tableau[3] est
le quatiime entiei du tableau) et un tableau de taille n stocke ses lments des indices allant de
O n-1.
:. poui utilisei des ensembles taille vaiiable, la classe java.util.Vector est tis utile
8
2.2. Oprateurs
2.1.3 Chanes de caractres
Les chaines de caiacties ne sont pas considies enJava comme untype piimitif oucomme un
tableau. On utilise une classe paiticuliie, nomme String, fouinie dans le package java.lang.
Les vaiiables de type Stiing ont les caiactiistiques suivantes :
leui valeui ne peut pas tie modie
on peut utilisei lopiateui + poui concatnei deux chaines de caiacties :
String s1 = hello ;
String s2 = world ;
String s3 = s1 + + s2 ;
//Aprs ces instructions s3 vaut hello world
linitialisation dune chaine de caiacties sciit :
String s = new String(); //pour une chaine vide
String s2 = new String(hello world);
// pour une chane de valeur hello world
un ensemble de mthodes de la classe java.lang.String peimettent deectuei des op-
iations ou des tests sui une chaine de caiacties (voii la documentaionde la classe String).
2.2 Oprateurs
Une liste des opiateuis disponibles en Java est pisente pai oidie de piioiit dcioissante
dans le tableau :.:.
2.3 Structures de contrle
Les stiuctuies de contiole peimettent dexcutei un bloc dinstructions soit plusieuis fois
(instiuctions itiatives) soit selon la valeui dune expiession (instiuctions conditionnelles ou de
choix multiple). Dans tous ces cas, un bloc dinstiuction est
soit une instiuction unique ;
soit une suite dinstiuctions commenant pai une accolade ouviante { et se teiminant
pai une accolade feimante }.
2.3.1 Instructions conditionnelles
Syntaxe :
if (<condition>) <bloc1> [else <bloc2>]
ou
<condition>?<instruction1>:<instruction2>
<condition> doit ienvoyei une valeui boolenne. Si celle-ci est viaie cest <bloc1> (iesp.
<instruction1>) qui est excut sinon <bloc2> (iesp. <instruction2>) est excut. La paitie
else <bloc2> est facultative.
Exemple :
9
Chapitre 2. Syntaxe du langage
T:vii :.: Opiateuis Java
Pr. Oprateur Syntaxe Rsultat Signication
: ++ ++<ari> <ari> pi incimentation
<ari>++ <ari> post incimentation
<ari> <ari> pi dcimentation
<ari> <ari> post dcimentation
+ +<ari> <ari> signe positif
- -<ari> <ari> signe ngatif
! !<boo> <boo> complment logique
(type) (type)<val> <val> changement de type
: * <ari>*<ari> <ari> multiplication
/ <ari>/<ari> <ari> division
% <ari>%<ari> <ari> ieste de la division
, + <ari>+<ari> <ari> addition
- <ari>-<ari> <ari> soustiaction
+ <str>+<str> <str> concatnation
<< <ent> << <ent> <ent> dcalage de bits
gauche
>> <ent> >> <ent> <ent> dcalage de bits
dioite
, < <ari> < <ari> <boo> infiieui
<= <ari> <= <ari> <boo> infiieui ou gal
> <ari> > <ari> <boo> supiieui
>= <ari> >= <ari> <boo> supiieui ou gal
instanceof <val>instanceof<cla> <boo> test de type
o == <val>==<val> <boo> gal
!= <val>!=<val> <boo> diient de
, & <ent>&<ent> <ent> ET bit bit
<boo>&<boo> <boo> ET boolen
8 <ent><ent> <ent> OU exclusif bit bit
<boo><boo> <boo> OU exclusif boolen
| <ent>|<ent> <ent> OU bit bit
<boo>|<boo> <boo> OU boolen
:o && <boo>&&<boo> <boo> ET logique
:: || <boo>||<boo> <boo> OU logique
:: ?: <boo>?<ins>:<ins> <ins> si...alois...sinon
:, = <var>=<val> <val> assignation
Lgende
<ari> valeui aiithmtique
<boo> valeui boolenne
<cla> classe
<ent> valeui entiie
<ins> instiuction
<str> chaine de caiacties (String)
<val> valeui quelconque
<var> vaiiable
if (a == b) {
a = 50 ;
b = 0 ;
} else {
a = a - 1 ;
}
2.3.2 Instructions itratives
Les instiuction itiatives peimettent dexcutei plusieuis fois un bloc dinstiuctions, et ce,
jusqu ce quune condition donne soit fausse. Les tiois types dinstiuction itiatives sont les
suivantes :
TantQue...Faire... Lexcution de cette instiuction suit les tapes suivantes :
:. la condition (qui doit ienvoyei une valeui boolenne) est value. Si celle-ci est viaie on
passe ltape :, sinon on passe ltape ;
:. le bloc est excut ;
10
2.3. Structures de contrle
,. ietoui ltape : ;
. la boucle est teimine et le piogiamme continue son excution en inteipitant les instiuc-
tion suivant le bloc.
Syntaxe :
while (<condition>) <bloc>
Exemple :
while (a != b) a++;
Faire...TantQue... Lexcution de cette instiuction suit les tapes suivantes :
:. le bloc est excut ;
:. la condition (qui doit ienvoyei une valeui boolenne) est value. Si celle-ci est viaie on
ietouine ltape :, sinon on passe ltape , ;
,. la boucle est teimine et le piogiamme continue son excution en inteipitant les instiuc-
tion suivant le bloc.
Syntaxe :
do <bloc> while (<condition>);
Exemple :
do a++
while (a != b);
Pour...Faire Cette boucle est constitue de tiois paities : (i) une initialisation (la dclaiation de
vaiiables locales la boucle est autoiise dans cette paitie) ; (ii) une condition daiit ; (iii) un
ensemble dinstiuctions excutei apis chaque itiation (chacune de ces instiuctions est spaie
pai une viigule). Lexcution de cette instiuction suit les tapes suivantes :
:. les initialisations sont eectues ;
:. la condition (qui doit ienvoyei une valeui boolenne) est value. Si celle-ci est viaie on
passe ltape :, sinon on passe ltape o ;
,. le bloc piincipal est excut ;
. les instiuctions excutei apis chaque itiation sont excutes ;
,. ietoui ltape : ;
o. la boucle est teimine et le piogiamme continue son excution en inteipitant les instiuc-
tions suivant le bloc piincipal.
Syntaxe :
for (<init>;<condition>;<instr_post_itration>) <bloc>
Exemple :
for (int i = 0, j = 49 ; (i < 25) && (j >= 25); i++, j--) {
if (tab[i] > tab[j]) {
int tampon = tab[j];
Question : que se passe-t-il si le break situ apis le case c est omis :
11
Chapitre 2. Syntaxe du langage
2.3.3 Instructions break et continue
Linstiuction break est utilise poui soitii immdiatement dun bloc dinstiuctions (sans tiai-
tei les instiuctions iestantes dans ce bloc). Dans le cas dune boucle on peut galement utilisei
linstiuction continue avec la diience suivante :
break : lexcution se pouisuit apis la boucle (comme si la condition daiit devenait viaie) ;
continue : lexcution du bloc est aiite mais pas celle de la boucle. Une nouvelle itiation du
bloc commence si la condition daiit est toujouis viaie.
Exemple :
for (int i = 0, j = 0 ; i < 100 ; i++) {
if (i > tab.length) {
break ;
}
if (tab[i] == null) {
continue ;
}
tab2[j] = tab[i];
j++;
}
12
Chapitre 3
lments de programmation Java
3.1 Premiers pas
Un piogiamme ciit en Java consiste en un ensemble de classes iepisentant les lments ma-
nipuls dans le piogiamme et les tiaitements associs. Lexcution du piogiamme commence pai
lexcution dune classe qui doit implmentei une mthode paiticuliie public static void
main(String[] args). Les classes implmentant cette mthode sont appelles classes excu-
tables.
3.1.1 Classe HelloWorld
Une classe Java HelloWorld qui ache la chaine de caiacties Hello world sciit :
public class HelloWorld {
public static void main(String[] args) {
System.out.println(Hello world);
}
}
Lexcution (apis compilation) de cette classe se fait de la maniie suivante :
C:\>java HelloWorld
Hello world
C:\>
Remarque : le tableau de chaines de caiacties args qui est un paiamtie dentie de la m-
thode main contient des valeuis picises lexcution. Si la classe avait t excute pai la ligne
de commande java HelloWorld 4 toto _, ce tableau contiendiait , lments dont les valeuis
seiaient iespectivement 4, toto et _.
Dans ce piemiei piogiamme tis simple, une seule classe est utilise. Cependant, la conception
dun piogiamme oiient-objet ncessite, poui des pioblmes plus complexes, de ciei plusieuis
classes et la classe excutable ne seit souvent qu instanciei les piemieis objets. La classe ex-
cutable suivante cie un objet en instanciant la classe Rectangle (cf. section :.:.:) et ache sa
suiface :
13
Chapitre 3. lments de programmation Java
public class RectangleMain {
public static void main(String[] args) {
Rectangle rect = new Rectangle(5, 10);
System.out.println(La surface est + rect.surface());
}
}
Remarque importante : il est obligatoiie dimplmentei chaque classe publique dans un
chier spar et il est indispensable que ce chier ait le mme nom que celui de la classe. Dans
le cas picdent, deux chieis ont ainsi t cis : RectangleMain.java et Rectangle.java.
3.1.2 Packages
Un giand nombie de classes, fouinies pai Java SE, implmentent des donnes et tiaitements
gniiques utilisables pai un giand nombie dapplications. Ces classes foiment lAPI (Application
Programmer Interface) dulangage Java. Une documentationenligne poui lAPI java est disponible
lURL :
http://docs.oracle.com/javase/7/docs/api/
Toutes ces classes sont oiganises en packages (ou bibliothques) ddis un thme picis.
Paimi les packages les plus utiliss, on peut citei les suivants :
Package Description
java.awt Classes giaphiques et de gestion dinteifaces
java.io Gestion des enties/soities
java.lang Classes de base (impoit pai dfaut)
java.util Classes utilitaiies
javax.swing Auties classes giaphiques
Poui accdei une classe dun package donn, il faut pialablement impoitei cette classe ou
son package. Pai exemple, la classe Date appaitenant au package java.util qui implmente un
ensemble de mthodes de tiaitement sui une date peut tie impoite de deux maniies :
une seule classe du package est impoite :
import java.util.Date ;
toutes les classes du package sont impoites (mme les classes non utilises) :
import java.util.* ;
Le piogiamme suivant utilise cette classe poui achei la date actuelle :
import java.util.Date ;
public class DateMain {
public static void main(String[] args) {
Date today = new Date();
System.out.println(Nous sommes le + today.toString());
}
}
14
3.2. Variables et mthodes
Il est possible de ciei vos piopies packages en picisant, avant la dclaiation dune classe, le
package auquel elle appaitient. Poui assignei la classe picdente un package, nomm fr.emse,
il faut modiei le chiei de cette classe comme suit :
package fr.emse ;
import java.util.Date ;
public class DateMain {
...
}
Enn, il faut que le chemin daccs du chiei DateMain.java coiiesponde au nom de son
package. Celui-ci doit donc tie situ dans un ipeitoiie fr/emse/DateMain.java accessible
paitii des chemins daccs dnis lois de la compilation ou de lexcution (voii section :.:.:).
3.2 Variables et mthodes
3.2.1 Visibilit des champs
Dans les exemples picdents, le mot-cl public appaiait paifois au dbut dune dclaiation
de classe ou de mthode sans quil ait t expliqu jusquici. Ce mot-cl autoiise nimpoite quel
objet utilisei la classe ou la mthode dclaie comme publique. La poite de cette autoiisation
dpend de llment laquelle elle sapplique (voii le tableau ,.:).
T:vii ,.: Poite des autoiisations
lment Autorisations
Vaiiable Lectuie et ciituie
Mthode Appel de la mthode
Classe Instanciation dobjets de cette classe et
accs aux vaiiables et mthodes de classe
Le mode public nest, bien si, pas le seul type daccs disponible en Java. Deux auties mot-
cls peuvent tie utiliss en plus du type daccs pai dfaut : protected et private. Le tableau ,.:
icapitule ces diients types daccs (la notion de sous-classe est explique dans la section ).
T:vii ,.: Autoiisations daccs
public protected dfaut private
Dans la mme classe Oui Oui Oui Oui
Dans une classe du Oui Oui Oui Non
mme package
Dans une sous-classe Oui Oui Non Non
dun autre package
Dans une classe quelcon- Oui Non Non Non
que dun autre package
15
Chapitre 3. lments de programmation Java
Si aucun mot-cl ne picise le type daccs, celui pai dfaut est appliqu. En gnial, il est
souhaitable que les types daccs soient limits et le type daccs public, qui est utilis systmati-
quement pai les piogiammeuis dbutants, ne doit tie utilis que sil est indispensable. Cette ies-
tiiction peimet dvitei des eiieuis lois daccs des mthodes ou de modications de vaiiables
sans connaitie totalement leui iole.
3.2.2 Variables et mthodes de classe
Dans ceitains cas, il est plus judicieux dattachei une vaiiable ou une mthode une classe
plutot quaux objets instanciant cette classe. Pai exemple, la classe java.lang.Integer possde
une vaiiable MAX_VALUE qui iepisente la plus giande valeui qui peut tie aecte un entiei.
Oi, cette vaiiable tant commune tous les entieis, elle nest pas duplique dans tous les objets
instanciant la classe Integer mais elle est associe diiectement la classe Integer. Une telle va-
iiable est appele variable de classe. De la mme maniie, il existe des mthodes de classe qui
sont associes diiectement une classe. Poui dclaiei une vaiiable ou mthode de classe, on uti-
lise le mot-cl static qui doit tie picis avant le type de la vaiiable ou le type de ietoui de la
mthode.
La classe java.lang.Math nous fouinit un bon exemple de vaiiable et de mthodes de classes.
public final class Math {
...
public static final double PI = 3.14159265358979323846;
...
public static double toRadians(double angdeg) {
return angdeg / 180.0 * PI ;
}
...
}
La classe Math fouinit un ensemble doutils (vaiiables et mthodes) tis utiles poui des pio-
giammes devant eectuei des opiation mathmatiques complexes. Dans la poition de classe ie-
pioduite ci-dessus, on peut notamment y tiouvei une appioximation de la valeui de et une m-
thode conveitissant la mesuie dun angle dune valeui en degis en une valeui en iadians. Dans
le cas de cette classe, il est tout a fait inutile de ciei et dinstanciei un objet paitii de la classe
Math. En eet, la valeui de ou la conveision de degis en iadians ne vont pas vaiiei suivant
lobjet auquel elles sont iattaches. Ce sont des vaiiables et des mthodes de classe qui peuvent
tie invoques paitii de toute autie classe (cai elles sont dclaies en accs public) de la maniie
suivante :
public class MathMain {
public static void main(String[] args) {
System.out.println(pi = + Math.PI);
System.out.println(90 = + Math.toRadians(90));
}
}
Question : Dans les sections picdentes, nous avons dj utilis une vaiiable de classe et une
mthode de classe. Pouvez-vous tiouvei lesquelles :
16
3.2. Variables et mthodes
Rponse :
la mthode main des classes excutables est une mthode de classe cai elle est appele
diiectement paitii dune classe ;
lois de lachage dune chaine de caiacties lcian pai linstiuction
System.out.println(), on fait appel la vaiiable out de la classe java.lang.System
qui est un objet iepisentant la soitie standaid (lcian) et sui laquelle on appelle la
mthode println peimettant dachei une chaine de caiacties.
17
Chapitre 3. lments de programmation Java
18
Chapitre 4
Hritage
Dans ceitaines applications, les classes utilises ont en commun ceitaines vaiiables, mthodes
de tiaitement ou mme des signatuies de mthode. Avec un langage de piogiammation oiient-
objet, on peut dnii une classe diient niveaux dabstiaction peimettant ainsi de factoiisei
ceitains attiibuts communs plusieuis classes. Une classe gniale dnit alois un ensemble dat-
tiibuts qui sont paitags pai dauties classes, dont on diia quelles hritent de cette classe gniale.
Pai exemple, les classes Carre et Rectangle peuvent paitagei une mthode surface() ien-
voyant le isultat du calcul de la suiface de la guie. Plutot que dciiie deux fois cette mthode,
on peut dnii une ielation dhiitage entie les classes Carre et Rectangle. Dans ce cas, seule la
classe Rectangle contient le code de la mthode surface() mais celle-ci est galement utilisable
sui les objets de la classe Carre si elle hiite de Rectangle.
4.1 Principe de lhritage
Lide piincipale de lhiitage est doiganisei les classes de maniie hiiaichique. La ielation
dhiitage est unidiiectionnelle et, si une classe B hiite dune classe A, on diia que B est une sous-
classe de A. Cette notion de sous-classe signie que la classe B est un cas paiticuliei de la classe A
et donc que les objets instanciant la classe B instancient galement la classe A.
Pienons comme exemple des classes Carre, Rectangle et Cercle. La guie .: piopose une
oiganisation hiiaichique de ces classes telle que Carre hiite de Rectangle qui hiite, ainsi que
Cercle, dune classe Forme.
Carre
Forme
Rectangle Cercle
FicUvi .: Exemple de ielations dhiitage
Poui le moment, nous considieions la classe Forme comme vide (cest--diie sans aucune va-
iiable ni mthode) et nous nous intiessons plus paiticuliiement aux classes Rectangle et Carre.
19
Chapitre 4. Hritage
La classe Rectangle hiitant dune classe vide, elle ne peut piotei daucun de ses attiibuts et doit
dnii toutes ses vaiiables et mthodes. Une ielation dhiitage se dnit en Java pai le mot-cl
extends utilis comme dans lexemple suivant :
public class Rectangle extends Forme {
private int largeur ;
private int longueur ;
public Rectangle(int x, int y) {
this.largeur = x ;
this.longueur = y ;
}
public int getLargeur() {
return this.largeur ;
}
public int getLongueur() {
return this.longueur;
}
public int surface() {
return this.longueur * this.largeur ;
}
public void affiche() {
System.out.println(rectangle + longueur + x + largeur);
}
}
En ievanche, la classe Carre peut bnciei de la classe Rectangle et ne ncessite pas la i-
ciituie de ces mthodes si celles-ci conviennent la sous-classe. Toutes les mthodes et vaiiables
de la classe Rectangle ne sont nanmoins pas accessibles dans la classe Carre. Poui quun attiibut
puisse tie utilis dans une sous-classe, il faut que son type daccs soit public ou protected, ou,
si les deux classes sont situes dans le mme package, quil utilise le type daccs pai dfaut. Dans
cet exemple, les vaiiables longueur et largeur ne sont pas accessibles dans la class Carre qui doit
passei pai les mthodes getLargeur() et getLongueur(), dclaies comme publiques.
4.1.1 Redfinition
Lhiitage intgial des attiibuts de la classe Rectangle pose deux pioblmes :
:. il faut que chaque caii ait une longueui et une laigeui gales ;
:. la mthode affiche ciit le mot rectangle en dbut de chaine. Il seiait souhaitable que
ce soit carr qui sache.
De plus, les constiucteuis ne sont pas hiits pai une sous-classe. Il faut donc ciiie unconstiuc-
teui spcique poui Carre. Ceci nous peimettia de isoudie le piemiei pioblme en ciivant un
constiucteui qui ne piend quun paiamtie qui seia aect la longueui et la laigeui. Poui at-
tiibuei une valeui ces vaiiables (qui sont piives), le constiucteui de Carre doit faiie appel au
20
4.1. Principe de lhritage
constiucteui de Rectangle en utilisant le mot-cl super qui fait appel au constiucteui de la classe
supiieuie comme suit :
public Carre(int cote) {
super(cote,cote);
}
Remarques :
Lappel au constiucteui dune classe supiieuie doit toujouis se situei dans un constiuc-
teui et toujouis en tant que piemiie instiuction ;
Si aucun appel un constiucteui dune classe supiieuie nest fait, le constiucteui
fait appel implicitement un constiucteui vide de la classe supiieuie (comme si la
ligne super() tait pisente). Si aucun constiucteui vide nest accessible dans la classe
supiieuie, une eiieui se pioduit lois de la compilation.
Le second pioblme peut tie isolu pai une rednition de mthode. On dit quune mthode
dune sous-classe iednit une mthode de sa classe supiieuie, si elles ont la mme signatuie
mais que le tiaitement eectu est i-ciit dans la sous-classe. Voici le code de la classe Carre o
sont isolus les deux pioblmes soulevs :
public class Carre extends Rectangle {
public Carre(int cote) {
super(cote, cote);
}
public void affiche() {
System.out.println(carr + this.getLongueur());
}
}
Lois de la iednition dune mthode, il est encoie possible daccdei la mthode iednie
dans la classe supiieuie. Cet accs utilise galement le mot-cl super comme pixe la mthode.
Dans notie cas, il faudiait ciiie super.affiche() poui eectuei le tiaitement de la mthode
affiche() de Rectangle.
Enn, il est possible dinteidiie la iednition dune mthode ou dune vaiiable en intiodui-
sant le mot-cl final au dbut dune signatuie de mthode ou dune dclaiation de vaiiable. Il
est aussi possible dinteidiie lhiitage dune classe en utilisant final au dbut de la dclaiation
dune classe (avant le mot-cl class).
4.1.2 Polymorphisme
Le polymoiphisme est la facult attiibue un objet dtie une instance de plusieuis classes.
Il a une seule classe ielle qui est celle dont le constiucteui a t appel en piemiei (cest--diie
la classe guiant apis le new) mais il peut aussi tie dclai avec une classe supiieuie sa classe
ielle. Cette piopiit est tis utile poui la ciation densembles iegioupant des objets de classes
diientes comme dans lexemple suivant :
21
Chapitre 4. Hritage
Forme[] tableau = new Forme[4];
tableau[0] = new Rectangle(10,20);
tableau[1] = new Cercle(15);
tableau[2] = new Rectangle(5,30);
tableau[3] = new Carre(10);
Lopiateui instanceof peut tie utilis poui testei lappaitenance une classe comme suit :
for (int i = 0 ; i < tableau.length ; i++) {
if (tableau[i] instanceof Forme)
System.out.println(element + i + est une forme);
if (tableau[i] instanceof Cercle)
System.out.println(element + i + est un cercle);
if (tableau[i] instanceof Rectangle)
System.out.println(element + i + est un rectangle);
if (tableau[i] instanceof Carre)
System.out.println(element + i + est un carr);
}
Lexcution de ce code sui le tableau picdent ache le texte suivant :
element[0] est une forme
element[0] est un rectangle
element[1] est une forme
element[1] est un cercle
element[2] est une forme
element[2] est un rectangle
element[3] est une forme
element[3] est un rectangle
element[3] est un carr
Lensemble des classes Java, y compiis celles ciites en dehois de lAPI, foime une hiiaichie
avec une iacine unique. Cette iacine est la classe Object dont hiite toute autie classe. En eet, si
vous ne picisez pas explicitement une ielation dhiitage lois de lciituie dune classe, celle-ci
hiite pai dfaut de la classe Object. Giace cette piopiit, des classes gniiques ' de ciation
et de gestion dun ensemble, plus laboies que les tableaux, iegioupent des objets appaitenant
la classe Object (donc de nimpoite quelle classe).
Une des piopiits induites pai le polymoiphisme est que linteipiteui Java est capable de
tiouvei le tiaitement eectuei lois de lappel dune mthode sui un objet. Ainsi, poui plusieuis
objets dclais sous la mme classe (mais nayant pas la mme classe ielle), le tiaitement associ
une mthode donn peut tie diient. Si cette mthode est iednie pai la classe ielle dun objet
(ou pai une classe situe entie la classe ielle et la classe de dclaiation), le tiaitement eectu est
celui dni dans la classe la plus spcique de lobjet et qui iednie la mthode.
Dans notie exemple, la mthode affiche() est iednie dans toutes les sous-classes de Forme
et les tiaitements eectus sont :
for (int i = 0 ; i < tableau.length ; i++) {
tableau[i].affiche();
}
:. voii pai exemple les classes java.util.Vector, java.util.Hashtable,
22
4.2. Interfaces
Rsultat :
rectangle 10x20
cercle 15
rectangle 5x30
carr 10
Dans ltat actuel de nos classes, ce code ne pouiia cependant pas tie compil. En eet, la
fonction affiche() est appele sui des objets dont la classe dclaie est Forme mais celle-ci ne
contient aucune fonction appele affiche() (elle est seulement dnie dans ses sous-classes).
Poui compilei ce piogiamme, il faut tiansfoimei la classe Forme en une inteiface ou une classe
abstiaite tel que cela est fait dans les sections suivantes.
4.2 Interfaces
Une inteiface est un type, au mme titie quune classe, mais abstiait et qui donc ne peut tie
instanci (pai appel new plus constiucteui). Une inteiface dciit un ensemble de signatuies de
mthodes, sans implmentation, qui doivent tie implmentes dans toutes les classes qui im-
plmentent linteiface. Lutilit du concept dinteiface iside dans le iegioupement de plusieuis
classes, tel que chacune implmente un ensemble commun de mthodes, sous un mme type. Une
inteiface possde les caiactiistiques suivantes :
elle contient des signatuies de mthodes ;
elle ne peut pas contenii de vaiiables ;
une inteiface peut hiitei dune autie inteiface (avec le mot-cl extends) ;
une classe (abstiaite ou non) peut implmentei plusieuis inteifaces. La liste des inteifaces
implmentes doit alois guiei apis le mot-cl implements plac dans la dclaiation de
classe, en spaiant chaque inteiface pai une viigule.
Dans notie exemple, Forme peut tie une inteiface dciivant les mthodes qui doivent tie
implmentes pai les classes Rectangle et Cercle, ainsi que pai la classe Carre (mme si celle-ci
peut piotei de sonhiitage de Rectangle). Linteiface Forme sciit alois de la maniie suivante :
public interface Forme {
public int surface() ;
public void affiche() ;
}
Poui obligei les classes Rectangle, Cercle et Carre implmentei les mthodes surface()
et affiche(), il faut modiei lhiitage de ce qui tait la classe Forme en une implmentation de
linteiface dnie ci-dessus :
public class Rectangle implements Forme {
...
}
et
public class Cercle implements Forme {
...
}
23
Chapitre 4. Hritage
Cette stiuctuie de classes nous peimet dsoimais de pouvoii compilei lexemple donn dans la
section .:.: tiaitant du polymoiphisme. En dclaiant un tableau constitu dobjets implmentant
linteiface Forme, on peut appelei la mthode affiche() qui existe et est implmente pai chaque
objet.
Si une classe implmente une inteiface mais que le piogiammeui na pas ciit limplmenta-
tion de toutes les mthodes de linteiface, une eiieui de compilation se pioduiia sauf si la classe
est une classe abstiaite.
4.3 Classes abstraites
Le concept de classe abstiaite se situe entie celui de classe et celui dinteiface. Cest une classe
quon ne peut pas diiectement instanciei cai ceitaines de ses mthodes ne sont pas implmen-
tes. Une classe abstiaite peut donc contenii des vaiiables, des mthodes implmentes et des
signatuies de mthode implmentei. Une classe abstiaite peut implmentei (paitiellement ou
totalement) des inteifaces et peut hiitei dune classe ou dune classe abstiaite.
Le mot-cl abstract est utilis devant le mot-cl class poui dclaiei une classe abstiaite,
ainsi que poui la dclaiation de signatuies de mthodes implmentei.
Imaginons que lon souhaite attiibuei deux vaiiables, origine_x et origine_y, tout objet
iepisentant une foime. Comme une inteiface ne peut contenii de vaiiables, il faut tiansfoimei
Forme en classe abstiaite comme suit :
public abstract class Forme {
private int origine_x ;
private int origine_y ;
public Forme() {
this.origine_x = 0 ;
this.origine_y = 0 ;
}
public int getOrigineX() {
return this.origine_x;
}
public int getOrigineY() {
return this.origine_y;
}
public void setOrigineX(int x) {
this.origine_x = x ;
}
public void setOrigineY(int y) {
this.origine_y = y ;
}
public abstract int surface();
public abstract void affiche();
}
24
4.4. Classes et mthodes gnriques
De plus, il faut itablii lhiitage des classes Rectangle et Cercle veis Forme :
public class Rectangle extends Forme {
...
}
et
public class Cercle extends Forme {
...
}
Loisquune classe hiite dune classe abstiaite, elle doit :
soit implmentei les mthodes abstiaites de sa supei-classe en les dotant dun coips ;
soit tie elle-mme abstiaite si au moins une des mthodes abstiaites de sa supei-classe
ieste abstiaite.
4.4 Classes et mthodes gnriques
Il est paifois utile de dnii des classes paiamties pai un type de donnes (ou une classe).
Pai exemple, dans le package java.util, de nombieuses classes sont gniiques et notamment
les classes iepisentant des ensembles (Vector, ArrayList, etc.). Ces classes sont gniiques dans
le sens o elles piennent en paiamtie un type (classe ou inteiface) quelconque E. E est en quelque
soite une vaiiable qui peut piendie comme valeui un type de donn. Ceci se note comme suit, en
pienant lexempe de java.util.ArrayList :
package java.util ;
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, ...
{
...
public E set(int index, E element) {
...
}
public boolean add(E e) {
...
}
...
}
Nous pouvons iemaiquei que le type pass en paiamtie est not entie chevions (ex : <E>), et
quil peut ensuite tie iutilis dans le coips de la classe, pai des mthodes (ex : la mthode set
ienvoie un lment de classe E).
Il est possible de dnii des contiaintes sui le type pass en paiamtie, comme pai exemple
une contiainte de type extends :
:. Ici, on utilise T extends E poui signalei que le type T est un sous type de E, que E soit une classe ou une
inteiface (on nutilise pas implements).
25
Chapitre 4. Hritage
public class SortedList<T extends Comparable<T>> {
...
}
Ceci signie que la classe SortedList (liste oidonne que nous voulons dnii) est paiam-
tie pai le type T qui doit tie un type diiv (pai hiitage ou inteifaage) de Comparable<T>.
En bief, nous dnissons une liste oidonne dlments compaiables entie eux (poui pouvoii
les tiiei), giace la mthode int compareTo(T o) de linteiface Comparable ` qui peimet de
compaiei un Comparable un lment de type T.
,. Voii java.lang.Comparable poui plus dinfoimation sui cette inteiface.
26
Chapitre 5
Gestion des exceptions
Lois de lciituie dun piogiamme, la piise en compte deiieuis piend une place tis impoi-
tante si lon souhaite ciiie un piogiamme iobuste. Pai exemple, la simple ouveituie dun chiei
peut piovoquei beaucoup deiieuis telles que linexistence du chiei, un mauvais foimat, une in-
teidiction daccs, une eiieui de connexion au piiphiique, Poui que notie piogiamme soit
iobuste, il faut que toutes les eiieuis possibles soient dtectes et tiaites.
Ceitains langages de piogiammation, dont le langage Java, pioposent un mcanisme de piise
en compte des eiieuis, fond sui la notion dexception. Une exception est un objet qui peut tie
mis pai une mthode si un vnement doidie exceptionnel (les eiieuis ientient dans cette
catgoiie) se pioduit. La mthode en question ne ienvoie alois pas de valeui de ietoui, mais met
une exception expliquant la cause de cette mission. La piopagation dune mission se dioule
selon les tapes suivantes :
:. Une exception est gnie lintiieui dune mthode ;
:. Si la mthode pivoit un tiaitement de cette exception, on va au point , sinon au point , ;
,. Lexception est ienvoye la mthode ayant appel la mthode couiante, on ietouine au
point : ;
. Lexception est tiaite et le piogiamme iepiend son couis apis le tiaitement de lexcep-
tion.
La gestion deiieuis pai piopagation dexception pisente deux atouts majeuis :
Une facilit de programmation et de lisibilit : il est possible de iegioupei la gestion
deiieuis un mme niveau. Cela vite des iedondances dans lciituie de tiaitements
deiieuis et encombie peu le ieste du code avec ces tiaitements.
Une gestiondes erreurs propre et explicite : ceitains langages de piogiammationutilisent
la valeui de ietoui des mthodes poui signalei une eiieui la mthode appelante. Etant
donn que ce nest pas le iole de la valeui de ietoui de dciiie une eiieui, il est souvent
impossible de connaitie les causes ielles de leiieui. La dissociation de la valeui de ietoui
et de lexception peimet cette deiniie de dciiie picisment la ligne de code ayant
piovoqu leiieui et la natuie de cette eiieui.
5.1 Dclaration
Il est ncessaiie de dclaiei, poui chaque mthode, les classes dexception quelle est suscep-
tible dmettie. Cette dclaiation se fait la n de la signatuie dune mthode pai le mot-cl
throws la suite duquel les classes dexceptions (spaies pai une viigule sil en existe plusieuis)
qui peuvent tie gnies sont picises. La mthode parseInt de la classe Integei est un bon
exemple :
27
Chapitre 5. Gestion des exceptions
public static int parseInt(String s) throws NumberFormatException {
...
}
Cette mthode conveitit une chaine de caiacties, qui doit contenii uniquement des chiies,
en un entiei. Une eiieui peut se pioduiie si cette chaine de caiacties ne contient pas que des
chiies. Dans ce cas une exception de la classe NumberFormatException est mise.
Une exception peut tie mise dans une mthode de deux maniies : (i) pai une autie m-
thode appele dans le coips de la piemiie mthode ; (ii) pai la ciation dun objet instanciant la
classe Exception (ou la classe Throwable) et la leve explicite de lexception en utilisant le mot-cl
throw.
Lexemple ci-dessous illustie ce second cas :
public class ExempleException {
/*
* Cette mthode renvoie le nom du mois
* correspondant au chiffre donn en paramtre.
* Si celui-ci nest pas valide une exception de classe
* IndexOutOfBoundsException est leve.
*/
public static String month(int mois)
throws IndexOutOfBoundsException {
if ((mois < 1) || (mois > 12)) {
throw new IndexOutOfBoundsException(
le numero du mois qui est
+ mois
+ doit tre compris entre 1 et 12);
}
if (mois == 1)
return Janvier;
else if (mois == 2)
return Fvrier;
...
else if (mois == 11)
return Novembre;
else
return Dcembre;
}
}
La signication des exceptions de la classe IndexOutOfBoundsException est quun index
donn dpasse les boines minimumet maximumquil deviait iespectei. Si une mthode demande
la chaine de caiacties coiiespondant des mois inexistants (infiieui : ou supiieui ::) une
exception signaleia cette eiieui. On peut iemaiquei dans cet exemple que la dtection et la foi-
mulation de leiieui sont codes dans la mthode mais pas son tiaitement.
28
5.2. Interception et traitement
5.2 Interception et traitement
Avant de codei le tiaitement de ceitaines exceptions, il faut picisei lendioit o elles vont tie
inteiceptes. Si une mthode A appelle une mthode B qui appelle une mthode C qui appelle une
mthode D, et que cette mthode D lve une exception, celle-ci est daboid tiansmise C qui peut
linteiceptei ou la tiansmettie B, qui peut aussi linteiceptei ou la tiansmettie A.
Linteiception dexceptions se fait pai une soite de mise sui coute dune poition de code.
Poui cela on utilise le mot-cl try suivi du bloc suiveillei. Si aucune exception ne se pioduit
dans le bloc coiiespondant, le piogiamme se dioule noimalement comme si linstiuction try
tait absente. Pai contie, si une exception est leve, le tiaitement de lexception est excut puis
lexcution du piogiamme iepiend son couis apis le bloc test.
Il est galement ncessaiie de picisei quelles classes dexception doivent tie inteiceptes
dans le bloc test. Linteiception dune classe dexception sciit giace au mot-cl catch suivi de
la classe concein, dun nom de vaiiable coiiespondant lobjet exception, puis du tiaitement.
Si une exception est leve sans quaucune inteiception ne soit pivue poui sa classe, celle-ci est
piopage la mthode picdente.
Dans lexemple ci-dessous, le piogiamme demande lutilisateui de saisii le numeio dun
mois et ache lcian le nom de ce mois. Les exceptions qui peuvent tie leves pai ce pio-
giamme sont tiaites.
public class ExempleTraitementException {
public static void main(String[] args) {
System.out.print(Entrez le numero dun mois : );
try {
BufferedReader input = new BufferedReader(
new InputStreamReader(System.in));
String choix = input.readLine();
int numero = Integer.parseInt(choix);
System.out.println(ExempleException.month(numero));
} catch (IndexOutOfBoundsException e) {
System.err.println(Numero incorrect :
+ e.getMessage());
} catch (NumberFormatException e) {
System.err.println(Entre incorrecte :
+ e.getMessage());
} catch (IOException e) {
System.err.println(Erreur daccs :
+ e.getMessage());
}
}
}
Tiois classes dexception sont ici tiaites :
IndexOutOfBoundsException (lev pai la mthode month) se pioduit si le numeio enti
pai lutilisateui est infiieui : ou supiieui :: ;
NumberFormatException (lev pai la mthode parseInt) qui se pioduit si le texte enti
pai lutilisateui nest pas conveitible en entiei ;
IOException (lev pai la mthode readLine) qui se pioduit si il y a eu une eiieui daccs
au piiphiique dentie.
29
Chapitre 5. Gestion des exceptions
Dans chacun de ces cas, le tiaitement consiste achei le message deiieui associ lexception.
5.3 Classes dexception
Une classe est considie comme une classe dexception ds lois quelle hiite de la classe
Throwable. Un giand nombie de classes dexception sont pioposes dans lAPI poui couviii les
catgoiies deiieuis les plus fiquentes. Les ielations dhiitage entie ces classes peimettent de
levei ou dinteiceptei des exceptions dciivant une eiieui diients niveaux de picision. Les
classes dexception les plus fiquemment utilises sont icapitules dans le tableau ,.:.
T:vii ,.: Classes dexception fiquentes
Classe Description
AWTException Les exceptions de cette classe peuvent se
pioduiie lois dopiations de type
giaphique.
ClassCastException Signale une eiieui lois de la conveision
dun objet en une classe incompatible
avec sa viaie classe.
FileNotFoundException Signale une tentative douveituie dun
chiei inexistant.
IndexOutOfBoundsException Se pioduit loisque lon essaie daccdei
un lment inexistant dans un
ensemble.
IOException Les exceptions de cette classe peuvent se
pioduiie lois dopiations denties/
soities.
NullPointerException Se pioduit loisquun pointeui null
est ieu pai une mthode nacceptant
pas cette valeui, ou loisque lon
appelle une mthode ou une vaiiable
paitii dun pointeui null.
Remarque : Il nest pas indispensable dinteiceptei les exceptions hiitant de la
classe RuntimeException (dans le tableau ci-dessus, les classes qui en hiitent sont
ClassCastException, IndexOutOfBoundsException et NullPointerException). Celles-ci
peuvent tie piopages jusqu la machine viituelle et nappaiaitie que pendant lexcution. Ces
exceptions sont appeles exception non vries ou unchecked exceptions.
Si aucune des classes dexception ne coiiespond un type deiieui que vous souhaitez ex-
piimei, vous pouvez galement ciiie vos piopies classes dexception. Poui cela, il sut de faiie
hiitei votie classe de la classe java.lang.Exception.
5.4 Classification des erreurs en Java
On peut nalement distinguei quatie types de situations deiieuis en Java :
30
5.4. Classification des erreurs en Java
Erreurs de compilation. Avant mme de pouvoii excutei le piogiamme, notie code souice g-
nie des eiieui pai le compilateui. Il faut alois ivisei et coiiigei le code poui ne plus avoii
deiieuis.
Erreurs dexcution. Alois que notie piogiamme est en couis dexcution, la JVM tant mal
conguie ou coiiompue, le piogiamme saiite ou se gle. A piioii, cest une eiieui non
pas due notie piogiamme, mais la conguiation ou ltat de lenviionnement dexcu-
tion de notie piogiamme.
Exception non vrie. Alois que notie piogiamme est en couis dexcution, une tiace de la pile
des exceptions est ache, pointant veis une paitie de notie code sans gestion dexception.
Visiblement, nous avons utilis du code qui est capable de levei un exception non viie
(comme NullPointerException). Il faut modiei le piogiamme poui que cette situation
ne suivienne pas.
Exception vrie. Alois que notie piogiamme est en couis dexcution, une tiace de la pile des
exceptions est ache, pointant veis une paitie de notie code avec gestion dexception.
Visiblement, nous avons pioduit du code qui est capable de levei un exception viie
(comme FileNotFoundException) mais les donnes passes notie piogiamme ne va-
lide pas ces exceptions (pai exemple, loisque lon essaie douviii un chiei qui nexiste
pas). Il faut alois ievoii les donnes passes en paiamtie du piogiamme. Notie code a
bien dtect les pioblmes quil fallait dtectei. Le chapitie suivant sui les enties/soities
pisentent de nombieux exemples ielatifs ce cas.
31
Chapitre 5. Gestion des exceptions
32
Chapitre 6
Gestion des entres/sorties simples
Le package java.io piopose un ensemble de classes peimettant de giei la plupait des en-
ties/soities dun piogiamme. Cette gestion consiste ciei un objet ux dans lequel tiansitent
les donnes envoyei ou iecevoii. Un ux connecte un objet Java un autie lment. Deux cas
sont illustis dans ce chapitie : les inteiactions avec un utilisateui (entie claviei et soitie cian)
et les accs en lectuie ou ciituie un chiei.
6.1 Flux dentre
Un ux dentie est une instance dune sous-classe de InputStream. Chaque classe de ux
dentie a son piopie mode dchange de donnes qui spcie un foimat paiticuliei de donnes
ou un accs paiticuliei. Les classes les plus couiamment utilises sont :
ByteArrayInputStream peimet de liie le ux dentie sous la foime doctets (byte) ;
DataInputStreampeimet de liie le ux dentie sous la foime de types de donnes piimi-
tifs de Java. Il existe des mthodes poui icupiei un entiei, un iel, un caiactie,
FileInputStreamest utilis poui liie le contenu dun chiei. Les objets de cette classe sont
souvent encapsuls dans un autie objet de classe InputStream qui dnit le foimat des
donnes liie.
ObjectInputStream peimet de liie des objets (c--d des instances de classes Java) pai-
tii du ux dentie, si ces objets implmentent les inteifaces java.io.Serializable ou
java.io.Externalizable.
Reader nest pas une sous-classe de InputStream mais iepisente un ux dentie poui
chaines de caiacties. Plusieuis sous-classes de Reader peimettent la ciation de ux poui
chaines de caiacties.
Scanner nest pas une sous-classe de InputStream, mais un Iterator qui peimet de liie
un ux (chiei ou chaine de caiacties pai exemple) mot pai mot en dnissant le
dlimiteui entie les mots (espace pai dfaut).
La lectuie de donnes paitii dun ux dentie suit le dioulement suivant :
:. Ouverture du ux : Elle se pioduit la ciation dun objet de la classe InputStream.
Lois de lappel au constiucteui, on doit picisei quel lement exteine est ieli au ux (pai
exemple un nom de chiei ou un autie ux).
:. Lecture de donnes : Des donnes piovenant du ux sont lues au moyen de la mthode
read()) ou dune mthode quivalente. La mthode picise employei dpend du type
de ux ouveit.
,. Fermeture du ux : Quand le ux nest plus ncessaiie, il doit tie feim pai la mthode
close().
33
Chapitre 6. Gestion des entres/sorties simples
6.1.1 Lecture des entres clavier
Les donnes piovenant de lutilisation du claviei sont tiansmises dans un ux dentie ci
automatiquement poui toute application Java. On accde ce ux pai la vaiiable statique de la
classe java.lang.System qui sappelle in. Ce ux est alois utilis comme paiamtie dentie du
constiucteui dun autie ux dentie. Poui cet autie ux, on utilise gnialement une sous-classe
de Reader poui icupiei les enties de lutilisateui sous la foime dune chaine de caiacties. La
classe Clavier en donne un exemple :
import java.io.* ;
public class Clavier {
public static void main(String[] args) {
try {
BufferedReader flux = new BufferedReader(
new InputStreamReader(System.in));
System.out.print(Entrez votre prenom : );
String prenom = flux.readLine();
System.out.println(Bonjour + prenom);
flux.close();
} catch (IOException ioe) {
System.err.println(ioe);
}
}
}
6.1.2 Lecture partir dun fichier
Unchiei est iepisent pai unobjet de la classe java.io.File. Le constiucteui de cette classe
piend en paiamtie dentie le chemin daccs du chiei. Le ux dentie est alois ci laide
de la classe FileInputStream sui lequel on peut liie caiactie pai caiactie giace la mthode
read(). Lexemple suivant pisente une mthode poui achei le contenu dun chiei :
34
6.1. Flux dentre
import java.io.* ;
public class LectureFichier {
public static void main(String[] args) {
try {
File fichier = new File(monFichier.txt);
FileInputStream flux = new FileInputStream(fichier);
int c ;
while ((c = flux.read()) > -1) {
System.out.write(c);
}
flux.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Il aiiive souvent deniegistiei des donnes dans des chieis textes. Il peut alois tie utile duti-
lisei un BufferedReader ou un Scanner poui eectuei la lectuie. Dans les exemples suivants, on
considie une matiice 10 10 eniegistie dans un chiei texte matrice.txt ligne pai ligne, avec
les colonnes spaies pai des espaces :
import java.io.* ;
public class LectureMatrice {
public static void main(String[] args) {
try {
FileReader fileReader = new FileReader(matrice.txt);
BufferedReader reader = new BufferedReader(fileReader);
while (reader.ready()) {
String[] line = reader.readLine().split( );
for (String s : line) {
System.out.print(s);
}
System.out.println();
}
reader.close();
fileReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
35
Chapitre 6. Gestion des entres/sorties simples
On peut eectuei un tiaitement similaiie avec un Scanner :
import java.io.* ;
import java.util.Scanner ;
public class LectureMatriceScanner {
public static void main(String[] args) {
try {
Scanner fileScanner = new Scanner(new File(matrice.txt));
while (fileScanner.hasNextLine()) {
Scanner lineScanner = new Scanner(fileScanner.nextLine());
while (lineScanner.hasNext())
System.out.print(lineScanner.next());
System.out.println();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
6.1.3 Lecture dobjets enregistrs
Il est paifois utile deniegistiei ltat dobjet (de nimpoite quelle classe implmentant les in-
teifaces java.io.Serializable ou java.io.Externalizable) poui des excutions futuies. Le
ux dentie est encoie ci laide de la classe FileInputStream et est ensuite encapsul dans
un autie ux spciant le foimat des donnes liie. Lexemple suivant illustie la lectuie dun objet
de la classe Date dans un chiei nomm monFichier.dat :
import java.io.* ;
import java.util.Date ;
public class LectureDate {
public static void main(String[] args) {
try {
File fichier = new File(monFichier.dat);
ObjectInputStream flux = new ObjectInputStream(
new FileInputStream(fichier));
Date laDate = (Date) flux.readObject();
System.out.println(laDate);
flux.close();
} catch (IOException ioe) {
System.err.println(ioe);
} catch (ClassNotFoundException cnfe) {
System.err.println(cnfe);
}
}
}
Lobjet qui est lu dans le chiei doit tie une instance de la classe java.util.Date.
36
6.2. Flux de sortie
6.2 Flux de sortie
Un ux de soitie est une instance dune sous-classe de OutputStream. Comme poui les ux
dentie, chaque classe de ux de soitie a son piopie mode dciituie de donnes. Les classes les
plus couiamment utilises sont :
ByteArrayOutputStream peimet dciiie des octets veis le ux de soitie ;
DataOutputStream peimet dciiie des types de donnes piimitifs de Java veis le ux de
soitie.
FileOutputStream est utilis poui ciiie dans un chiei. Les objets de cette classe sont
souvent encapsuls dans un autie objet de classe OutputStream qui dnit le foimat des
donnes ciiie.
ObjectOutputStream peimet dciiie des objets (c--d des instances de classes Java) veis
le ux de soitie, si ces objets implmentent les inteifaces Serializable ouExternalizable.
Writer nest pas une sous-classe de OutputStream mais iepisente un ux de soitie poui
chaines de caiacties. Plusieuis sous-classes de Writer peimettent la ciation de ux poui
chaines de caiacties.
Lciituie de donnes veis un ux de soitie suit le mme dioulement que la lectuie dun ux
dentie :
:. Ouverture duux : Elle se pioduit lois de la ciationdunobjet de la classe OutputStream.
:. Ecriture de donnes : Des donnes sont ciites veis le ux au moyen de la mthode
write() ou dune mthode quivalente. La mthode picise employei dpend du type
de ux ouveit.
,. Fermeture du ux : Quand le ux nest plus ncessaiie, il doit tie feim pai la mthode
close().
6.2.1 Ecriture sur la sortie standard cran
Comme poui les enties du claviei, lciituie veis lcian fait appel la vaiiable statique out de
la classe System. Onappelle gnialement la mthode System.out.print ouSystem.out.println
comme cela a t fait dans de nombieux exemples de ce liviet.
6.2.2 Ecriture dans un fichier
Lciituie dans un chiei se fait pai un ux de la classe FileOutputStream qui piend en entie
unchiei (instance de la classe File). Ce ux de soitie peimet dciiie des caiacties dans le chiei
giace la mthode write(). Lexemple suivant pisente une mthode poui ciiie un texte dans
un chiei :
37
Chapitre 6. Gestion des entres/sorties simples
import java.io.* ;
public class EcritureFichier {
public static void main(String[] args) {
try {
File fichier = new File(monFichier.txt);
FileOutputStream flux = new FileOutputStream(fichier);
String texte = Hello World! ;
for (int i = 0 ; i < texte.length(); i++) {
flux.write(texte.charAt(i));
}
flux.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
On peut galement utilisei un Writer comme un FileWriter poui ciiie des chaines de
caiacties dans un chiei assez simplement. Dans lexemple suivant, on ciit une siie de 10
lignes de 10 entieis alatoiies spais pai des espaces dans un chiei pouvant tie lu pai la classe
LectureMatrice :
import java.io.* ;
import java.util.Random ;
public class EcritureMatrice {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter(random.txt);
Random generator = new Random(System.currentTimeMillis());
for (int i = 0 ; i < 9 ; i++) {
for (int j = 0 ; j < 9 ; j++)
writer.write(generator.nextInt() + );
writer.write(\n);
}
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
38
6.2. Flux de sortie
6.2.3 Ecriture dobjets
Le ux de soitie peut galement tie encapsul dans un ux de type ObjectOutputStream,
comme le montie lexemple suivant poui ciiie la date couiante dans un chiei :
import java.io.* ;
import java.util.Date ;
public class EcritureDate {
public static void main(String[] args) {
try {
File fichier = new File(monFichier.dat);
ObjectOutputStream flux = new ObjectOutputStream(
new FileOutputStream(fichier));
flux.writeObject(new Date());
flux.close();
} catch (IOException ioe) {
System.err.println(ioe);
}
}
}
Ce chiei peut ensuite tie lu pai la classe LectureDate.
Remarque importante : Nous avons pisent dans ce chapitie plusieuis exemples dentie/-
soitie utilisant diients modes de lectuie/ciituie (avec ou sans ux). Nous conseillons toutefois
dutilisei en priorit un Scanner poui la lectuie dans un chiei, et un FileWriter poui lciituie
dans un chiei.
39
Chapitre 6. Gestion des entres/sorties simples
40
Annexes
41
Annexe A
Applications graphiques (package swing)
Annexe
Lois des piemiies veisions du langage Java, le seul package fouini pai dfaut pai Java SE
peimettant de constiuiie des inteifaces giaphiques tait le package java.awt. Depuis la veision
:.: du JDK, il est tis foitement iecommand dutilisei les classes du package javax.swing poui
ciiie des inteifaces giaphiques. En eet, le package swing appoite deux avantages conceptuels
pai iappoit au package awt :
Les composants swing sont dits lgeis (lightweight) contiaiiement aux composants louids
(heavyweight) dawt. Lappaience giaphique dun composant dit louid dpend du systme
dexploitation cai elle fait appel un composant coiiespondant dans le systme dexploita-
tion. Avec un composant lgei, son appaience (look-and-feel) est xe et peut tie modie
dans le code Java et il est donc possible de donnei une fentie une appaience la Win-
dows tout en utilisant Linux.
Il applique compltement le schma Modle-Vue-Contioleui (cf. section A.:).
La plupait des classes de composants du package swing hiitent de classes du package awt en
iednissant ceitaines mthodes poui assuiei les deux avantages picdemment cits. Cependant,
le package awt nest pas entiiement obsolte et ceitaines de ces classes sont encoie utilises poui
la gestion dvnements (cf. section A.,) ou la disposition des composants (classes implmentant
linteiface LayoutManager).
A.1 Le schma Modle-Vue-Contrleur
Le schma Modle-Vue-Contioleui (MVC) est un mode de conception dapplications gia-
phiques piconisant la distinction des donnes, de leui appaience giaphique et des tiaitements
qui peuvent tie eectus. Un composant giaphique est dcompos en tiois paities :
le modle contenant ses donnes et son tat couiant ;
la vue qui coiiespond son appaience giaphique ;
le contrleur associant des tiaitements des vnements pouvant se pioduiie au sein du
composant.
La guie A.: donne unexemple dune inteiface giaphique simple contenant unboutonQuitter.
la dcomposition MVC de ce bouton (instance de la classe JButton) est constitue : (i) du
modle contenant la chaine de caiacties Quitter ; (ii) de la vue constitue dun iectangle giis
boid noii, dune taille donne, une position donne et au sein duquel est ciite la chaine de
caiacties du modle ; (iii) du contioleui implmentant le tiaitement eectuei lois dun click
sui le bouton, cest--diie lappel linstiuction de feimetuie de la fentie.
Tous les composants giaphiques du package swing ont un modle, une vue et peuvent avoii
plusieuis contioleuis. Poui facilitei la piogiammation, ceitaines classes (tel que JButton) encap-
sulent le modle et la vue dans une seule classe disposant de mthodes daccs et de modications
43
Annexe A. Applications graphiques (package swing)
FicUvi A.: Exemple de JButton
des donnes ou de lappaience. Dans ces cas-l, un modle pai dfaut est utilis.
A.2 Composants graphiques
Dans un piogiamme Java, une classe de composant giaphique est une classe qui hiite de
java.awt.Component. Il est indispensable dhiitei de cette classe cai elle implmente de nom-
bieuses mthodes ncessaiies lachage du composant, en ienvoyant la dimension du compo-
sant, sa police de caiacties, sa couleui de fond, etc.
La seconde classe essentielle poui lciituie dinteifaces giaphiques est la classe Container.
Un containei est un composant (qui hiite donc de Component) mais avec la paiticulaiit de pou-
voii contenii dauties composants. Ainsi, une inteiface giaphique est un objet dune classe de
type java.awt.Container (pai exemple une fentie ou une boite de dialogue) iegioupant des
simples composants et dauties containeis qui, eux aussi, contiennent dauties simples compo-
sants et containeis, et ainsi de suite.
A.2.1 Composants
Nous ne pisentons pas ici toutes les classes de composants du package swing poui nous in-
tiessei plutot la vue et au modle de chaque composant. Lutilisation de ceitains composants
est illustie dans la section A.:.,.
Vue
Lappaience giaphique dun composant est le isultat de limplmentation de la mthode
paint() de la classe Component. Quasiment toutes les classes hiitant de Component iednissent
cette mthode an de dnii lachage du composant. Si vous ciivez une classe hiitant dune
classe de composant existante, il est donc foitement dconseill de iednii la mthode paint
poui la plupait des composants existants cai vous empcheiiez son achage noimal.
Si vous souhaitez dnii lachage dun composant peisonnalis (pai exemple poui achei
une image ou des foimes gomtiiques), vous deviez faiie hiitei votie classe de composant de la
classe java.awt.Canvas qui iepisente un composant vide. Dans ce cas-l, il est souhaitable de
iednii la mthode paint() qui est vide dans la classe Canvas.
Modle
Il existe poui chaque classe de composant, une seconde classe qui gie le modle de ce com-
posant (pai exemple, ButtonModel iepisente un modle de bouton). En gnial un modle pai
dfaut est ci dans le constiucteui du composant. Laccs ce modle est tis souvent masqu cai
il existe des mthodes, telles que setText() poui changei le texte dun bouton ou setSelected()
poui changei ltat dune case cochei, de la classe de composant qui peuvent tie diiectement
appeles poui changei les donnes du modle. Cependant, poui des composants plus complexes
44
A.2. Composants graphiques
tels que des tables (JTable) ou des aiboiescences (JTree), il est paifois indispensable de ciei un
modle peisonnalis.
A.2.2 Containers
En piemiei lieu, il convient de iappelei quun containei est un composant, et, pai consquent,
que tout ce qui a t pisent picdemment est aussi viai poui les containeis. En plus des caiac-
tiistiques dun composant simple, un containei contient un ensemble de composants ainsi que
des contiaintes sui leui disposition. Lajout dun composant un containei se fait pai une m-
thode add(). Il existe plusieuis mthodes add() acceptant des paiamties dentie diients. La
mthode utilisei dpend du type de disposition choisi.
Disposition des composants
Lobjet qui gie la disposition des composants est une instance dune classe qui doit impl-
mentei linteiface java.awt.LayoutManager. Cet objet doit tie ajout au containei, soit lois de
lappel son constiucteui, soit pai la mthode setLayout(). Un seul LayoutManager est auto-
iis pai containei. Quelques classes utilises poui la disposition des composants sont pisentes
ci-dessous.
BorderLayout. Le containei est dcoup en cinq cases : une case pai cot (gauche, dioite, haut
et bas) et une au centie. Lajout dun composant se fait en picisant la case utilisei giace des
vaiiables de classe de BorderLayout :
MyContainer.add(MyComponent,BorderLayout.NORTH);
MyContainer.add(MyComponent2,BorderLayout.CENTER);
La taille de chaque case dpend : (i) de la laigeui maximale entie la case du noid, du sud et
laddition des laigeuis des cases du centie, de lest et de louest ; (ii) de la hauteui maximale entie
la case lest, louest et laddition des hauteuis des cases du centie, du noid et du sud. La case
du centie est tiie poui iemplii tout lespace iestant.
BorderLayout.NORTH
BorderLayout.CENTER
BorderLayout.SOUTH
BorderLayout.WEST BorderLayout.EAST
FicUvi A.: Dcoupage du BoideiLayout
45
Annexe A. Applications graphiques (package swing)
Comp1 ... Comp2 Comp3
FicUvi A., Dcoupage du FlowLayout
Comp6 Comp5 Comp8
Comp10 Comp9 Comp12
Comp7
Comp11
Comp2 Comp1 Comp4 Comp3
FicUvi A. Dcoupage dun GiidLayout ,x
FlowLayout. Les composants sont ajouts les uns la suite des auties et de la gauche veis la
dioite. Ds quune ligne est iemplie de composants (cest--diie ds que la laigeui du containei
est atteinte, les composants iestants sont ajouts sui une ligne en dessous. Il ny a pas dauties
contiaintes de disposition :
MyContainer.add(MyComponent);
GridLayout. Le containei est dcoup enune giille compose de ncases de taille gale. Le constiuc-
teui du GiidLayout iequieit en paiamties dentie le nombie de lignes et le nombie de colonnes
de la giille. Les composants sont ajouts les uns la suite des auties en iemplissant daboid la
piemiie ligne, puis la seconde, etc. Il ny a pas dauties contiaintes de disposition :
MyContainer.add(MyComponent);
Containers classiques
La classe de containei la plus simple est javax.swing.JPanel. Un panel est un composant
initialement vide auquel on va ajoutei des composants suivant la disposition choisie. La dispo-
sition peut tie spcie lois de lappel au constiucteui du panel (pai ex, JPanel myPanel =
new JPanel(new BorderLayout());) ou pai un appel explicite la mthode setLayout, pai
exemple :
myPanel.setLayout(new GridLayout(4,5));
Les composants peuvent ensuite tie ajouts avec la mthode add() appiopiie.
Une inteiface giaphique consiste donc en une hiiaichie de composants telle que ceitains
composants sont des containeis spciant la disposition dauties composants. La iacine de cette
46
A.2. Composants graphiques
hiiaichie est galement un containei qui peut sachei libiement (c--d. sans que sa disposi-
tion soit picise dans un containei). Paimi ces containeis de haut niveau, on tiouve la classe
javax.swing.JFrame qui iepisente une fentie et javax.swing.JDialog qui iepisente une
boite de dialogue. La ciation dune fentie suit gnialement les tapes suivantes :
:. Ciation dune instance de JFrame (ou dune sous-classe).
:. Ajout des composants au panel de la fentie. Ce panel est accessible pai la mthode
getContentPane(). On peut galement attiibuei la fentie un nouveau panel pai la m-
thode setContentPane().
,. Calcul de la taille de la fentie laide de la mthode pack(). Ce calcul est automatique et
piend en compte la dimension pifeiie de chaque composant ainsi que leui disposition.
. Achage de la fentie pai la mthode setVisible().
Pai exemple, la guie A.: (p. ) est une instance dune sous-classe de JFrame :
import java.awt.* ;
import javax.swing.* ;
public class ExBouton extends JFrame {
public ExBouton() {
super();
JLabel label = new JLabel(Exemple de bouton);
JPanel panel = new JPanel(new BorderLayout());
panel.add(label, BorderLayout.NORTH);
JButton b = new JButton( Quitter );
panel.add(b, BorderLayout.SOUTH);
this.setContentPane(panel);
this.pack();
}
public static void main(String[] args) {
ExBouton bouton = new ExBouton();
bouton.setVisible(true);
}
}
A.2.3 Exemple dinterface
Le meilleui moyen dappiendie ciiie des inteifaces giaphiques est de sinspiiei dexem-
ples dinteifaces existantes. La guie A., est un exemple de fentie pioduit avec le code suivant la
guie.
47
Annexe A. Applications graphiques (package swing)
FicUvi A., Exemple dinteiface giaphique
48
A.2. Composants graphiques
i
m
p
o
r
t
j
a
v
a
.
a
w
t
.
*
;
i
m
p
o
r
t
j
a
v
a
.
u
t
i
l
.
V
e
c
t
o
r
;
i
m
p
o
r
t
j
a
v
a
x
.
s
w
i
n
g
.
*
;
i
m
p
o
r
t
j
a
v
a
x
.
s
w
i
n
g
.
b
o
r
d
e
r
.
E
m
p
t
y
B
o
r
d
e
r
;
p
u
b
l
i
c
c
l
a
s
s
E
x
I
n
t
e
r
f
a
c
e
e
x
t
e
n
d
s
J
F
r
a
m
e
{
/
*
*
*
L
e
s
v
a
r
i
a
b
l
e
s
p
o
i
n
t
a
n
t
c
h
a
q
u
e
c
o
m
p
o
s
a
n
t
s
o
n
t
d
e
c
l
a
r
e
e
s
*
e
n
v
a
r
i
a
b
l
e
s
d

i
n
s
t
a
n
c
e
e
t
e
n
t
y
p
e
p
r
o
t
e
c
t
e
d
.
E
l
l
e
s
*
a
u
r
a
i
e
n
t
t
r
e
s
b
i
e
n
p
u
e
t
r
e
d
e
s
v
a
r
i
a
b
l
e
s
l
o
c
a
l
e
s
a
u
*
c
o
n
s
t
r
u
c
t
e
u
r
m
a
i
s
,
p
o
u
r
d
e
s
r
a
i
s
o
n
s
p
e
d
a
g
o
g
i
q
u
e
s
,
*
l
a
g
e
s
t
i
o
n
d
e
s
e
v
e
n
e
m
e
n
t
s
n

e
s
t
p
r
e
s
e
n
t
e
e
q
u
e
p
l
u
s
*
t
a
r
d
(
s
e
c
t
i
o
n
e
v
e
n
t
s
)
d
a
n
s
u
n
e
c
l
a
s
s
e
h
e
r
i
t
a
n
t
*
d
e
E
x
I
n
t
e
r
f
a
c
e
.
L
e
s
v
a
r
i
a
b
l
e
s
s
o
n
t
d
e
t
y
p
e
p
r
o
t
e
c
t
e
d
*
a
f
i
n
d
e
p
o
u
v
o
i
r
y
a
c
c

d
e
r
d
a
n
s
c
e
t
t
e
s
o
u
s
-
c
l
a
s
s
e
.
*
/
p
r
o
t
e
c
t
e
d
J
R
a
d
i
o
B
u
t
t
o
n
b
u
t
t
o
n
1
,
b
u
t
t
o
n
2
,
b
u
t
t
o
n
3
;
p
r
o
t
e
c
t
e
d
J
C
o
m
b
o
B
o
x
c
o
u
l
e
u
r
;
p
r
o
t
e
c
t
e
d
J
T
e
x
t
F
i
e
l
d
t
e
x
t
;
p
r
o
t
e
c
t
e
d
J
B
u
t
t
o
n
a
j
o
u
t
;
p
r
o
t
e
c
t
e
d
J
L
i
s
t
t
e
x
t
L
i
s
t
;
p
r
o
t
e
c
t
e
d
V
e
c
t
o
r
<
S
t
r
i
n
g
>
l
i
s
t
D
a
t
a
;
p
r
o
t
e
c
t
e
d
D
e
s
s
i
n
d
e
s
s
i
n
;
p
u
b
l
i
c
E
x
I
n
t
e
r
f
a
c
e
(
)
{
s
u
p
e
r
(

U
n
e
x
e
m
p
l
e
d
e
f
e
n
e
t
r
e

)
;
/
/
l
e
p
r
o
g
r
a
m
m
e
d
o
i
t
s
e
t
e
r
m
i
n
e
r
q
u
a
n
d
l
a
f
e
n
e
t
r
e
e
s
t
f
e
r
m
e
e
t
h
i
s
.
s
e
t
D
e
f
a
u
l
t
C
l
o
s
e
O
p
e
r
a
t
i
o
n
(
J
F
r
a
m
e
.
E
X
I
T
_
O
N
_
C
L
O
S
E
)
;
/
/
c
r
e
a
t
i
o
n
d
u
p
a
n
e
l
g
a
u
c
h
e
J
P
a
n
e
l
g
a
u
c
h
e
=
n
e
w
J
P
a
n
e
l
(
n
e
w
G
r
i
d
L
a
y
o
u
t
(
6
,
1
,
0
,
5
)
)
;
/
/
c
r
e
a
t
i
o
n
d
e
s
c
a
s
e
s
a
c
o
c
h
e
r
J
L
a
b
e
l
l
a
b
e
l
=
n
e
w
J
L
a
b
e
l
(

F
o
r
m
e
:

)
;
b
u
t
t
o
n
1
=
n
e
w
J
R
a
d
i
o
B
u
t
t
o
n
(

C
a
r
r
e

,
t
r
u
e
)
;
b
u
t
t
o
n
2
=
n
e
w
J
R
a
d
i
o
B
u
t
t
o
n
(

C
e
r
c
l
e

,
f
a
l
s
e
)
;
b
u
t
t
o
n
3
=
n
e
w
J
R
a
d
i
o
B
u
t
t
o
n
(

T
r
i
a
n
g
l
e

,
f
a
l
s
e
)
;
J
L
a
b
e
l
l
a
b
e
l
2
=
n
e
w
J
L
a
b
e
l
(

C
o
u
l
e
u
r
:

)
;
c
o
u
l
e
u
r
=
n
e
w
J
C
o
m
b
o
B
o
x
(
)
;
c
o
u
l
e
u
r
.
a
d
d
I
t
e
m
(

B
l
e
u

)
;
c
o
u
l
e
u
r
.
a
d
d
I
t
e
m
(

R
o
u
g
e

)
;
c
o
u
l
e
u
r
.
a
d
d
I
t
e
m
(

V
e
r
t

)
;
/
/
l
e
g
r
o
u
p
e
d
e
b
o
u
t
o
n
p
e
r
m
e
t
d

i
n
t
e
r
d
i
r
e
l
a
s
e
l
e
c
t
i
o
n
/
/
d
e
p
l
u
s
i
e
u
r
s
c
a
s
e
s
e
n
m
e
m
e
t
e
m
p
s
B
u
t
t
o
n
G
r
o
u
p
g
r
o
u
p
=
n
e
w
B
u
t
t
o
n
G
r
o
u
p
(
)
;
g
r
o
u
p
.
a
d
d
(
b
u
t
t
o
n
1
)
;
g
r
o
u
p
.
a
d
d
(
b
u
t
t
o
n
2
)
;
g
r
o
u
p
.
a
d
d
(
b
u
t
t
o
n
3
)
;
/
/
r
e
m
p
l
i
s
s
a
g
e
d
u
p
a
n
e
l
g
a
u
c
h
e
g
a
u
c
h
e
.
a
d
d
(
l
a
b
e
l
)
;
g
a
u
c
h
e
.
a
d
d
(
b
u
t
t
o
n
1
)
;
g
a
u
c
h
e
.
a
d
d
(
b
u
t
t
o
n
2
)
;
g
a
u
c
h
e
.
a
d
d
(
b
u
t
t
o
n
3
)
;
g
a
u
c
h
e
.
a
d
d
(
l
a
b
e
l
2
)
;
g
a
u
c
h
e
.
a
d
d
(
c
o
u
l
e
u
r
)
;
/
/
c
r
e
a
t
i
o
n
d
u
p
a
n
e
l
b
a
s
J
P
a
n
e
l
b
a
s
=
n
e
w
J
P
a
n
e
l
(
n
e
w
B
o
r
d
e
r
L
a
y
o
u
t
(
0
,
1
0
)
)
;
/
/
c
r
e
a
t
i
o
n
e
t
r
e
m
p
l
i
s
s
a
g
e
d
u
p
a
n
e
l
d

a
j
o
u
t
d
e
t
e
x
t
e
J
P
a
n
e
l
t
e
x
t
P
a
n
e
l
=
n
e
w
J
P
a
n
e
l
(
n
e
w
G
r
i
d
L
a
y
o
u
t
(
3
,
1
,
0
,
5
)
)
;
l
a
b
e
l
=
n
e
w
J
L
a
b
e
l
(

A
j
o
u
t
e
r
u
n
t
e
x
t
e
p
o
s
s
i
b
l
e
:

)
;
t
e
x
t
P
a
n
e
l
.
a
d
d
(
l
a
b
e
l
)
;
t
e
x
t
=
n
e
w
J
T
e
x
t
F
i
e
l
d
(
1
6
)
;
t
e
x
t
P
a
n
e
l
.
a
d
d
(
t
e
x
t
)
;
a
j
o
u
t
=
n
e
w
J
B
u
t
t
o
n
(

A
j
o
u
t
e
r

)
;
t
e
x
t
P
a
n
e
l
.
a
d
d
(
a
j
o
u
t
)
;
/
/
c
r
e
a
t
i
o
n
d
u
m
o
d
e
l
e
d
e
l
a
l
i
s
t
e
l
i
s
t
D
a
t
a
=
n
e
w
V
e
c
t
o
r
<
S
t
r
i
n
g
>
(
)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

H
e
l
l
o
W
o
r
l
d

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

U
n
e
b
e
l
l
e
f
i
g
u
r
e

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

C
h
a
m
p
i
o
n
s
d
u
m
o
n
d
e
!

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

A
c
i
a
o
,
b
o
n
s
o
i
r
.
.
.

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

C
h
a
n
g
e
z
l
a
c
o
u
l
e
u
r

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

a
d
o
r
e
J
a
v
a

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

A
l
l
e
z
l
e
s
v
e
r
t
s
!

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

C
a
m
a
r
c
h
e

)
;
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(

b
l
a
b
l
a
b
l
a

)
;
/
/
c
r
e
a
t
i
o
n
d
e
l
a
l
i
s
t
e
t
e
x
t
L
i
s
t
=
n
e
w
J
L
i
s
t
(
l
i
s
t
D
a
t
a
)
;
t
e
x
t
L
i
s
t
.
s
e
t
S
e
l
e
c
t
i
o
n
M
o
d
e
(
L
i
s
t
S
e
l
e
c
t
i
o
n
M
o
d
e
l
.
S
I
N
G
L
E
_
S
E
L
E
C
T
I
O
N
)
;
/
/
l

i
n
c
l
u
s
i
o
n
d
e
l
a
l
i
s
t
e
d
a
n
s
u
n
J
S
c
r
o
l
l
P
a
n
e
p
e
r
m
e
t
/
/
d
e
l
a
f
a
i
r
e
d
e
f
i
l
e
r
p
a
r
d
e
s
a
s
c
e
n
c
e
u
r
s
J
S
c
r
o
l
l
P
a
n
e
s
c
r
o
l
l
P
a
n
e
=
n
e
w
J
S
c
r
o
l
l
P
a
n
e
(
t
e
x
t
L
i
s
t
)
;
s
c
r
o
l
l
P
a
n
e
.
s
e
t
P
r
e
f
e
r
r
e
d
S
i
z
e
(
n
e
w
D
i
m
e
n
s
i
o
n
(
2
0
0
,
1
0
0
)
)
;
/
/
r
e
m
p
l
i
s
s
a
g
e
d
u
p
a
n
e
l
b
a
s
49
Annexe A. Applications graphiques (package swing)
b
a
s
.
a
d
d
(
s
c
r
o
l
l
P
a
n
e
,
B
o
r
d
e
r
L
a
y
o
u
t
.
N
O
R
T
H
)
;
b
a
s
.
a
d
d
(
t
e
x
t
P
a
n
e
l
,
B
o
r
d
e
r
L
a
y
o
u
t
.
S
O
U
T
H
)
;
/
/
r
e
m
p
l
i
s
s
a
g
e
d
u
p
a
n
e
l
p
r
i
n
c
i
p
a
l
J
P
a
n
e
l
m
a
i
n
P
a
n
e
l
=
(
J
P
a
n
e
l
)
t
h
i
s
.
g
e
t
C
o
n
t
e
n
t
P
a
n
e
(
)
;
m
a
i
n
P
a
n
e
l
.
s
e
t
L
a
y
o
u
t
(
n
e
w
B
o
r
d
e
r
L
a
y
o
u
t
(
1
0
,
1
0
)
)
;
m
a
i
n
P
a
n
e
l
.
a
d
d
(
g
a
u
c
h
e
,
B
o
r
d
e
r
L
a
y
o
u
t
.
W
E
S
T
)
;
d
e
s
s
i
n
=
n
e
w
D
e
s
s
i
n
(
)
;
m
a
i
n
P
a
n
e
l
.
a
d
d
(
d
e
s
s
i
n
,
B
o
r
d
e
r
L
a
y
o
u
t
.
C
E
N
T
E
R
)
;
m
a
i
n
P
a
n
e
l
.
a
d
d
(
b
a
s
,
B
o
r
d
e
r
L
a
y
o
u
t
.
S
O
U
T
H
)
;
/
/
u
n
e
b
o
r
d
u
r
e
p
e
r
m
e
t
d

a
e
r
e
r
l

a
f
f
i
c
h
a
g
e
m
a
i
n
P
a
n
e
l
.
s
e
t
B
o
r
d
e
r
(
n
e
w
E
m
p
t
y
B
o
r
d
e
r
(
1
0
,
1
0
,
1
0
,
1
0
)
)
;
/
/
c
a
l
c
u
l
d
e
l
a
d
i
m
e
n
s
i
o
n
d
e
l
a
f
e
n
e
t
r
e
t
h
i
s
.
p
a
c
k
(
)
;
}p
u
b
l
i
c
s
t
a
t
i
c
v
o
i
d
m
a
i
n
(
S
t
r
i
n
g
[
]
a
r
g
s
)
{
E
x
I
n
t
e
r
f
a
c
e
m
y
I
n
t
e
r
f
a
c
e
=
n
e
w
E
x
I
n
t
e
r
f
a
c
e
(
)
;
m
y
I
n
t
e
r
f
a
c
e
.
s
e
t
V
i
s
i
b
l
e
(
t
r
u
e
)
;
}
}/
/
C
e
t
t
e
c
l
a
s
s
e
h
e
r
i
t
e
d
e
c
a
n
v
a
s
p
o
u
r
r
e
d

f
i
n
i
r
l
a
/
/
m
e
t
h
o
d
e
p
a
i
n
t
.
L
a
v
u
e
e
s
t
c
o
d
e
e
d
a
n
s
c
e
t
t
e
c
l
a
s
s
e
c
l
a
s
s
D
e
s
s
i
n
e
x
t
e
n
d
s
C
a
n
v
a
s
{
S
t
r
i
n
g
f
i
g
u
r
e
;
C
o
l
o
r
c
o
u
l
e
u
r
;
S
t
r
i
n
g
t
e
x
t
;
/
/
l
e
c
o
n
s
t
r
u
c
t
e
u
r
d
e
l
a
c
l
a
s
s
e
p
u
b
l
i
c
D
e
s
s
i
n
(
)
{
f
i
g
u
r
e
=

C
a
r
r
e

;
c
o
u
l
e
u
r
=
C
o
l
o
r
.
b
l
u
e
;
t
e
x
t
=

H
e
l
l
o
W
o
r
l
d

;
t
h
i
s
.
s
e
t
B
a
c
k
g
r
o
u
n
d
(
C
o
l
o
r
.
w
h
i
t
e
)
;
}p
u
b
l
i
c
v
o
i
d
p
a
i
n
t
(
G
r
a
p
h
i
c
s
g
)
{
/
/
u
n
r
e
c
t
a
n
g
l
e
n
o
i
r
e
n
c
a
d
r
e
l
e
c
o
m
p
o
s
a
n
t
g
.
s
e
t
C
o
l
o
r
(
C
o
l
o
r
.
b
l
a
c
k
)
;
g
.
d
r
a
w
R
e
c
t
(
0
,
0
,
t
h
i
s
.
g
e
t
W
i
d
t
h
(
)
-
1
,
t
h
i
s
.
g
e
t
H
e
i
g
h
t
(
)
-
1
)
;
/
/
l
e
t
e
x
t
e
e
s
t
a
f
f
i
c
h
e
g
.
d
r
a
w
S
t
r
i
n
g
(
t
e
x
t
,
1
0
,
1
5
)
;
/
/
l
a
c
o
u
l
e
u
r
e
s
t
c
h
o
i
s
i
e
g
.
s
e
t
C
o
l
o
r
(
c
o
u
l
e
u
r
)
;
/
/
l
a
f
i
g
u
r
e
e
s
t
a
f
f
i
c
h
e
e
i
f
(
f
i
g
u
r
e
.
e
q
u
a
l
s
(

C
a
r
r
e

)
)
{
g
.
d
r
a
w
R
e
c
t
(
5
0
,
3
0
,
1
0
0
,
1
0
0
)
;
}
e
l
s
e
i
f
(
f
i
g
u
r
e
.
e
q
u
a
l
s
(

C
e
r
c
l
e

)
)
{
g
.
d
r
a
w
O
v
a
l
(
5
0
,
3
0
,
1
0
0
,
1
0
0
)
;
}
e
l
s
e
{
g
.
d
r
a
w
L
i
n
e
(
5
0
,
1
3
0
,
1
0
0
,
3
0
)
;
g
.
d
r
a
w
L
i
n
e
(
1
0
0
,
3
0
,
1
5
0
,
1
3
0
)
;
g
.
d
r
a
w
L
i
n
e
(
5
0
,
1
3
0
,
1
5
0
,
1
3
0
)
;
}
}/
/
c
e
s
m
e
t
h
o
d
e
s
p
e
r
m
e
t
t
e
n
t
d
e
c
h
a
n
g
e
r
l
e
t
e
x
t
e
,
/
/
l
a
c
o
u
l
e
u
r
o
u
l
a
f
i
g
u
r
e
a
a
f
f
i
c
h
e
r
p
u
b
l
i
c
v
o
i
d
s
e
t
T
e
x
t
(
S
t
r
i
n
g
t
x
t
)
{
t
e
x
t
=
t
x
t
;
}p
u
b
l
i
c
v
o
i
d
s
e
t
C
o
u
l
e
u
r
(
S
t
r
i
n
g
c
o
u
l
)
{
i
f
(
c
o
u
l
.
e
q
u
a
l
s
(

B
l
e
u

)
)
{
c
o
u
l
e
u
r
=
C
o
l
o
r
.
b
l
u
e
;
}
e
l
s
e
i
f
(
c
o
u
l
.
e
q
u
a
l
s
(

R
o
u
g
e

)
)
{
c
o
u
l
e
u
r
=
C
o
l
o
r
.
r
e
d
;
}
e
l
s
e
{
c
o
u
l
e
u
r
=
C
o
l
o
r
.
g
r
e
e
n
;
}
}p
u
b
l
i
c
v
o
i
d
s
e
t
F
i
g
u
r
e
(
S
t
r
i
n
g
f
i
g
)
{
f
i
g
u
r
e
=
f
i
g
;
}/
/
L
a
r
e
d

f
i
n
i
t
i
o
n
d
e
c
e
t
t
e
m
e
t
h
o
d
e
p
e
r
m
e
t
d
e
s
p
e
c
i
f
i
e
r
/
/
l
a
t
a
i
l
l
e
p
r
e
f
e
r
r
e
e
d
u
c
o
m
p
o
s
a
n
t
p
u
b
l
i
c
D
i
m
e
n
s
i
o
n
g
e
t
P
r
e
f
e
r
r
e
d
S
i
z
e
(
)
{
r
e
t
u
r
n
n
e
w
D
i
m
e
n
s
i
o
n
(
2
0
0
,
2
0
0
)
;
}
}
50
A.3. Contrleurs dvnements
A.3 Contrleurs dvnements
Le iole des contioleuis est dinteiceptei ceitains vnements et deectuei un tiaitement asso-
ci au type de lvnement. Unvnement peut tie pioduit pai unclick sui unbouton, la slection
dun lment dune liste, un dplacement de souiis, la piession dune touche du claviei, etc.
A.3.1 Evnements
Un vnement giaphique est iepisent dans le langage Java comme un objet dont la classe
hiite de java.awt.AWTEvent. Paimi les sous-classes de AWTEvent, on peut citei les plus couiam-
ment utilises :
ActionEvent : Se pioduit loisquune action est eectue sui un composant. Ex : click sui
un bouton.
ItemEvent : Se pioduit loisquune slectiona t eectue sui un composant. Ex : cochage
dune case.
KeyEvent : Se pioduit loisque un vnement piovient du claviei. Ex : piession dune
touche.
MouseEvent : Se pioduit loisque un vnement piovient de la souiis. Ex : dplacement de
la souiis.
WindowEvent : Se pioduit loisquune action est eectue sui une fentie. Ex : click sui
licone de feimetuie dune fentie.
Des mthodes sont attaches chacune de ces classes poui avoii accs plus de dtails sui
lvnement. On peut, pai exemple, icupiei le composant souice de lvnement, la position de
la souiis lois du click, etc.
A.3.2 Interface Listener
Le contioleui qui inteicepte un ceitain type dvnement doit implmentei une des inteifaces
hiitant de java.util.EventListener. Linteiface implmentei dpend du type dvnement
inteiceptei. La table A.: pisente les inteifaces coiiespondant aux vnements dciits ci-dessus.
Ceitaines de ces inteifaces demandent quun giand nombie de mthodes soient implmen-
tes (pai ex, WindowListener). Des classes, appeles adapter, implmentant ces inteifaces sont
pioposes dans lAPI, poui lesquelles toutes les mthodes ont des implmentations vides. Cette
facilit de piogiammation peimet de nimplmentei que la mthode souhaite. Pai exemple, on
utiliseia la classe WindowAdapter poui implmentei un tiaitement eectuei la feimetuie dun
fentie (mthode windowClosing()) sans avoii ciiie des mthodes vides poui tous les auties
cas o aucun tiaitement nest iequis.
Apis la ciation dun objet contioleui, il est ncessaiie de le iattachei un ou plusieuis com-
posants. Le contioleui inteicepte uniquement les vnements des composants auquel il est iatta-
ch. Cette opiation se fait pai lappel une mthode du composant de la foime add...Listener.
Pai exemple, le iattachement dun contioleui myActionListener un bouton sciit :
myButton.addActionListener(myActionListener);
A.3.3 Exemple de contrleur
Dans lexemple donn plus loin, des tiaitements ont t associs aux diients composants
de linteiface pisente en section A.:.,. Les contioleuis ont t volontaiiement cis de maniie
diiente poui illustiei plusieuis cas :
51
Annexe A. Applications graphiques (package swing)
T:vii A.: Quelques inteifaces poui contioleui
Contrleur Evnement Mthodes implmenter
ActionListener ActionEvent - actionPerformed(ActionEvent)
ItemListener ItemEvent - itemStateChanged(ItemEvent)
KeyListener KeyEvent - keyPressed(KeyEvent)
- keyReleased(KeyEvent)
- keyTyped(KeyEvent)
MouseListener MouseEvent - mouseClicked(MouseEvent)
- mouseEntered(MouseEvent)
- mouseExited(MouseEvent)
- mousePressed(MouseEvent)
- mouseReleased(MouseEvent)
WindowListener WindowEvent - windowActivated(WindowEvent)
- windowClosed(WindowEvent)
- windowClosing(WindowEvent)
- windowDeactivated(WindowEvent)
- windowDeiconified(WindowEvent)
- windowIconified(WindowEvent)
- windowOpened(WindowEvent)
le contrleur de la fentre est un objet instanci paitii dune classe WindowControler
qui hiite de la classe WindowAdapter. Le seul tiaitement qui est picis est de quittei le
piogiamme quand lutilisateui clique sui le bouton de feimetuie.
le contrleur des boutons de choix est utilis sui plusieuis composants. Il tiaite les vne-
ments piovenant des boutons JRadioButton et JComboBox. Ce contioleui est une instance
de ChoiceControler qui implmente linteiface ItemListener. Le tiaitement eectu est
une mise joui du dessin.
le contrleur de la liste est en fait le mme objet que celui iepisentant la fentie. Cest la
classe ExControleur qui implmente linteiface ListSelectionListener et met joui le
dessin chaque fois que la slection de la liste change.
le contrleur de la zone de texte est aussi implment pai lobjet fentie. Si la touche
entie est piesse dans la zone de texte, la liste est mise joui.
le contrleur du bouton a une foime un peu spciale mais fiquemment utilise. Il est
possible, en Java, de iednii une mthode dune classe pendant une instanciation. Lois de
linstanciation du contioleui (new ActionListener()), la mthode actionPerformed()
est iednie diiectement avant le point viigule de n dinstiuction. Cest le seul cas o
linstanciation dune inteiface est peimise si toutes ses mthodes sont implmentes.
52
A.3. Contrleurs dvnements
i
m
p
o
r
t
j
a
v
a
.
a
w
t
.
e
v
e
n
t
.
*
;
i
m
p
o
r
t
j
a
v
a
x
.
s
w
i
n
g
.
*
;
i
m
p
o
r
t
j
a
v
a
x
.
s
w
i
n
g
.
e
v
e
n
t
.
*
;
p
u
b
l
i
c
c
l
a
s
s
E
x
C
o
n
t
r
o
l
e
u
r
e
x
t
e
n
d
s
E
x
I
n
t
e
r
f
a
c
e
i
m
p
l
e
m
e
n
t
s
L
i
s
t
S
e
l
e
c
t
i
o
n
L
i
s
t
e
n
e
r
,
A
c
t
i
o
n
L
i
s
t
e
n
e
r
{
p
u
b
l
i
c
E
x
C
o
n
t
r
o
l
e
u
r
(
)
{
/
/
a
p
p
e
l
a
u
c
o
n
s
t
r
u
c
t
e
u
r
d
e
E
x
I
n
t
e
r
f
a
c
e
p
o
u
r
c
r
e
e
r
l
a
/
/
f
e
n
e
t
r
e
e
t
s
e
s
c
o
m
p
o
s
a
n
t
s
s
u
p
e
r
(
)
;
/
/
a
j
o
u
t
d

u
n
c
o
n
t
r

l
e
u
r

l
a
f
e
n

t
r
e
t
h
i
s
.
a
d
d
W
i
n
d
o
w
L
i
s
t
e
n
e
r
(
n
e
w
W
i
n
d
o
w
C
o
n
t
r
o
l
e
r
(
)
)
;
/
/
U
n
c
o
n
t
r

l
e
u
r
u
n
i
q
u
e
e
s
t
c
r

p
o
u
r
l
e
s
b
o
u
t
o
n
s
/
/
d
e
c
h
o
i
x
C
h
o
i
c
e
C
o
n
t
r
o
l
e
r
c
o
n
t
r
o
l
e
u
r
=
n
e
w
C
h
o
i
c
e
C
o
n
t
r
o
l
e
r
(
d
e
s
s
i
n
)
;
b
u
t
t
o
n
1
.
a
d
d
I
t
e
m
L
i
s
t
e
n
e
r
(
c
o
n
t
r
o
l
e
u
r
)
;
b
u
t
t
o
n
2
.
a
d
d
I
t
e
m
L
i
s
t
e
n
e
r
(
c
o
n
t
r
o
l
e
u
r
)
;
b
u
t
t
o
n
3
.
a
d
d
I
t
e
m
L
i
s
t
e
n
e
r
(
c
o
n
t
r
o
l
e
u
r
)
;
c
o
u
l
e
u
r
.
a
d
d
I
t
e
m
L
i
s
t
e
n
e
r
(
c
o
n
t
r
o
l
e
u
r
)
;
/
/
l
e
r
o
l
e
d
e
c
o
n
t
r

l
e
u
r
p
o
u
r
l
a
l
i
s
t
e
e
t
l
e
c
h
a
m
p
d
e
/
/
t
e
x
t
e
e
s
t
a
s
s
u
r
e
p
a
r
l

o
b
j
e
t
c
o
u
r
a
n
t
E
x
C
o
n
t
r
o
l
e
u
r
t
e
x
t
L
i
s
t
.
a
d
d
L
i
s
t
S
e
l
e
c
t
i
o
n
L
i
s
t
e
n
e
r
(
t
h
i
s
)
;
t
e
x
t
.
a
d
d
A
c
t
i
o
n
L
i
s
t
e
n
e
r
(
t
h
i
s
)
;
/
/
L
e
c
o
n
t
r
o
l
e
u
r
d
u
b
o
u
t
o
n
e
s
t
e
c
r
i
t
d
i
r
e
c
t
e
m
e
n
t
d
a
n
s
/
/
l
a
c
l
a
s
s
e
a
j
o
u
t
.
a
d
d
A
c
t
i
o
n
L
i
s
t
e
n
e
r
(
n
e
w
A
c
t
i
o
n
L
i
s
t
e
n
e
r
(
)
{
p
u
b
l
i
c
v
o
i
d
a
c
t
i
o
n
P
e
r
f
o
r
m
e
d
(
A
c
t
i
o
n
E
v
e
n
t
e
)
{
S
t
r
i
n
g
s
t
r
=
t
e
x
t
.
g
e
t
T
e
x
t
(
)
;
i
f
(
s
t
r
.
l
e
n
g
t
h
(
)
>
0
)
{
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(
t
e
x
t
.
g
e
t
T
e
x
t
(
)
)
;
t
e
x
t
.
s
e
t
T
e
x
t
(

)
;
t
e
x
t
L
i
s
t
.
s
e
t
L
i
s
t
D
a
t
a
(
l
i
s
t
D
a
t
a
)
;
}
}
}
)
;
}/
/
C
e
t
t
e
m
e
t
h
o
d
e
e
s
t
a
p
p
e
l
e
e
s
i
l
a
s
e
l
e
c
t
i
o
n
d
e
l
a
l
i
s
t
e
/
/
c
h
a
n
g
e
p
u
b
l
i
c
v
o
i
d
v
a
l
u
e
C
h
a
n
g
e
d
(
L
i
s
t
S
e
l
e
c
t
i
o
n
E
v
e
n
t
e
)
{
S
t
r
i
n
g
s
e
l
e
c
t
e
d
=
(
S
t
r
i
n
g
)
t
e
x
t
L
i
s
t
.
g
e
t
S
e
l
e
c
t
e
d
V
a
l
u
e
(
)
;
/
/
L
e
t
e
x
t
e
a
f
f
i
c
h
e
e
s
t
m
i
s
a
j
o
u
r
e
n
f
o
n
c
t
i
o
n
d
e
l
a
/
/
n
o
u
v
e
l
l
e
s
e
l
e
c
t
i
o
n
i
f
(
s
e
l
e
c
t
e
d
!
=
n
u
l
l
)
{
d
e
s
s
i
n
.
s
e
t
T
e
x
t
(
s
e
l
e
c
t
e
d
)
;
}
e
l
s
e
{
d
e
s
s
i
n
.
s
e
t
T
e
x
t
(

)
;
}d
e
s
s
i
n
.
r
e
p
a
i
n
t
(
)
;
}/
/
C
e
t
t
e
m
e
t
h
o
d
e
e
s
t
a
p
p
e
l
e
e
s
i
l
a
t
o
u
c
h
e
e
n
t
r
e
e
e
s
t
/
/
p
r
e
s
s
e
e
d
a
n
s
l
e
c
h
a
m
p
d
e
t
e
x
t
e
p
u
b
l
i
c
v
o
i
d
a
c
t
i
o
n
P
e
r
f
o
r
m
e
d
(
A
c
t
i
o
n
E
v
e
n
t
e
)
{
S
t
r
i
n
g
s
t
r
=
t
e
x
t
.
g
e
t
T
e
x
t
(
)
;
/
/
L
e
t
e
x
t
e
d
u
c
h
a
m
p
e
s
t
a
j
o
u
t
e

l
a
l
i
s
t
e
d
e
s
t
e
x
t
e
s
i
f
(
s
t
r
.
l
e
n
g
t
h
(
)
>
0
)
{
l
i
s
t
D
a
t
a
.
a
d
d
E
l
e
m
e
n
t
(
t
e
x
t
.
g
e
t
T
e
x
t
(
)
)
;
t
e
x
t
.
s
e
t
T
e
x
t
(

)
;
t
e
x
t
L
i
s
t
.
s
e
t
L
i
s
t
D
a
t
a
(
l
i
s
t
D
a
t
a
)
;
}
}/
/
L
e
m
a
i
n
d
o
i
t
e
t
r
e
r
e
d
e
f
i
n
i
e
p
o
u
r
c
r
e
e
r
u
n
o
b
j
e
t
d
e
l
a
/
/
c
l
a
s
s
e
E
x
C
o
n
t
r
o
l
e
u
r
e
t
n
o
n
E
x
I
n
t
e
r
f
a
c
e
p
u
b
l
i
c
s
t
a
t
i
c
v
o
i
d
m
a
i
n
(
S
t
r
i
n
g
[
]
a
r
g
s
)
{
E
x
C
o
n
t
r
o
l
e
u
r
m
y
C
o
n
t
r
o
l
e
u
r
=
n
e
w
E
x
C
o
n
t
r
o
l
e
u
r
(
)
;
m
y
C
o
n
t
r
o
l
e
u
r
.
s
e
t
V
i
s
i
b
l
e
(
t
r
u
e
)
;
}
}/
/
U
n
e
c
l
a
s
s
e
d
e
c
o
n
t
r
o
l
e
u
r
d
e
f
e
n
e
t
r
e
c
l
a
s
s
W
i
n
d
o
w
C
o
n
t
r
o
l
e
r
e
x
t
e
n
d
s
W
i
n
d
o
w
A
d
a
p
t
e
r
{
p
u
b
l
i
c
v
o
i
d
w
i
n
d
o
w
C
l
o
s
i
n
g
(
W
i
n
d
o
w
E
v
e
n
t
e
)
{
S
y
s
t
e
m
.
e
x
i
t
(
0
)
;
}
}/
/
U
n
e
c
l
a
s
s
e
p
o
u
r
l
e
c
o
n
t
r
o
l
e
d
e
s
b
o
u
t
o
n
s
d
e
c
h
o
i
x
.
/
/
C
e
t
t
e
c
l
a
s
s
e
e
s
t
u
t
i
l
i
s
e
e
p
o
u
r
l
e
s
J
R
a
d
i
o
B
u
t
t
o
n
e
t
}
/
/
l
e
J
C
o
m
b
o
B
o
x
c
l
a
s
s
C
h
o
i
c
e
C
o
n
t
r
o
l
e
r
i
m
p
l
e
m
e
n
t
s
I
t
e
m
L
i
s
t
e
n
e
r
{
D
e
s
s
i
n
d
e
s
s
i
n
;
/
/
I
l
e
s
t
n
e
c
e
s
s
a
i
r
e
q
u
e
l
e
d
e
s
s
i
n
s
o
i
t
p
a
s
s
e
e
n
p
a
r
a
m
e
t
r
e
/
/
p
o
u
r
s
a
m
i
s
e
a
j
o
u
r
a
p
r
e
s
u
n
e
v
e
n
e
m
e
n
t
.
53
Annexe A. Applications graphiques (package swing)
p
u
b
l
i
c
C
h
o
i
c
e
C
o
n
t
r
o
l
e
r
(
D
e
s
s
i
n
d
)
{
d
e
s
s
i
n
=
d
;
}/
/
C
e
t
t
e
m

t
h
o
d
e
e
s
t
a
p
p
e
l
e
e
s
i
l
a
s
e
l
e
c
t
i
o
n
d

u
n
b
o
u
t
o
n
/
/
c
h
a
n
g
e
p
u
b
l
i
c
v
o
i
d
i
t
e
m
S
t
a
t
e
C
h
a
n
g
e
d
(
I
t
e
m
E
v
e
n
t
e
)
{
/
/
O
n
t
e
s
t
e
q
u
e
l

e
v
e
n
e
m
e
n
t
e
s
t
b
i
e
n
u
n
e
s
e
l
e
c
t
i
o
n
i
f
(
e
.
g
e
t
S
t
a
t
e
C
h
a
n
g
e
(
)
=
=
I
t
e
m
E
v
e
n
t
.
S
E
L
E
C
T
E
D
)
{
/
/
t
r
a
i
t
e
m
e
n
t

e
f
f
e
c
t
u
e
r
s
i
l

e
v
e
n
e
m
e
n
t
s

e
s
t
/
/
p
r
o
d
u
i
t
s
u
r
u
n
J
R
a
d
i
o
B
u
t
t
o
n
i
f
(
e
.
g
e
t
S
o
u
r
c
e
(
)
i
n
s
t
a
n
c
e
o
f
J
R
a
d
i
o
B
u
t
t
o
n
)
{
d
e
s
s
i
n
.
s
e
t
F
i
g
u
r
e
(
(
(
J
R
a
d
i
o
B
u
t
t
o
n
)
e
.
g
e
t
I
t
e
m
(
)
)
.
g
e
t
T
e
x
t
(
)
)
;
}
/
/
t
r
a
i
t
e
m
e
n
t
a
e
f
f
e
c
t
u
e
r
s
i
l

e
v
e
n
e
m
e
n
t
s

e
s
t
/
/
p
r
o
d
u
i
t
s
u
r
u
n
J
C
o
m
b
o
B
o
x
e
l
s
e
i
f
(
e
.
g
e
t
S
o
u
r
c
e
(
)
i
n
s
t
a
n
c
e
o
f
J
C
o
m
b
o
B
o
x
)
{
d
e
s
s
i
n
.
s
e
t
C
o
u
l
e
u
r
(
(
S
t
r
i
n
g
)
e
.
g
e
t
I
t
e
m
(
)
)
;
}
e
l
s
e
{
S
y
s
t
e
m
.
e
r
r
.
p
r
i
n
t
l
n
(

E
r
r
e
u
r
-
c
o
m
p
o
s
a
n
t
n
o
n
v
a
l
i
d
e

)
;
}d
e
s
s
i
n
.
r
e
p
a
i
n
t
(
)
;
}
}
}
54
Annexe B
Diagramme de classes UML
UML (Unied Modeling Language) a t ci en :, poui tie le langage standaid de mod-
lisation oiient-objet. UML contient diients diagiammes utiliss poui dciiie de nombieux
aspects du logiciel. Dans le cadie de ce couis, nous utiliseions uniquement le diagramme de
classes '.
Le diagiamme de classes iepisente la stiuctuie statique du logiciel. Il dciit lensemble des
classes qui sont utilises ainsi que leuis associations. Il est inspii des diagiammes Entit-Relation
utiliss enmodlisationde bases de donnes, eny ajoutant les aspects opiationnels (les mthodes)
et quelques subtilits smantiques (la composition, pai exemple).
B.1 Reprsentation des classes et interfaces
B.1.1 Les classes
En UML, une classe est au minimumdciite pai un nom. Giaphiquement, elle est iepisente
pai un iectangle, ventuellement divis en , paities : son nom, ses attiibuts et ses opiations. On
appelle membres de la classe ses attiibuts et mthodes (ou opiations).
Nom de
classe
Nom de
classe
Opration
Opration
Attribut
Attribut
Nom de
classe
FicUvi B.: Repisentations UML possible dune classe, avec ou sans les membies
B.1.2 Les membres de classe
Chaque attiibut est dciit au moins pai un nom (unique dans une mme classe) et pai un type
de donnes.
Une opiation, ou mthode, est dciite au moins pai un nom, pai un ensemble darguments
ncessaiies son invocation et pai un type de retour. Chaque argument est dciit pai un nom
et un type de donnes.
:. le langage UML pouiia tie tudi en piofondeui lois du couis Analyse et Conception de Systmes Infoima-
tiques de laxe Ingnierie des Systmes Informatiques
55
Annexe B. Diagramme de classes UML
Un niveau de visibilit est galement attiibu chaque membie. La visibilit dun membie
dune classe dnit quelles auties classes y ont accs (en teime de lectuie/ciituie). UML utilise ,
niveaux de visibilit :
public (not pai +), le membie est visible pai toutes les classes
priv (not pai -), le membie nest visible pai aucune classe sauf celle qui le contient
protg (not pai -), le membie est visible pai toutes les sous-classes de celle qui le contient
(cette visibilit est explique ultiieuiement)
+ calculerDureePret() : int
+ getAge() : int
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
Personne
FicUvi B.: Exemple de classe Personne avec attiibuts et opiations
La guie B.: est un exemple dune classe Personne avec toutes les possibilits de visibilit.
B.1.3 Les classes abstraites
En UML, le mot-cl {abstrait} (ou {abstract}) est accol aux classes et mthodes abs-
tiaites. Une autie maniie souvent usite de iepisentei ces mthodes ou classes est dciiie leui
nomen italique. Les attributs et mthodes de classe sont souligns. La classe Personne dciite dans
la guie ci-dessous montie un exemple dattiibut et de mthode de classe.
Personne
Personne
{abstract}
FicUvi B., Deux iepisentations possibles poui une classe abstiaite Personne
+ calculerDureePret() : int
+ setAgeMajorite(a : int)
+ getAge() : int
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
- ageMajorite : int = 18
Personne
FicUvi B. Exemple dun attiibut et dune mthode de classe poui la classe Personne
B.1.4 Les interfaces
En UML, une inteiface est dciite pai le mot-cl interface dans le bloc dentte, comme
pisent dans la guie B.,.
56
B.2. Les relations
<<interface>>
Interface
FicUvi B., Exemple dinteiface
B.2 Les relations
En conception oiiente objet, les ielations englobent notamment les ielations dhiitage et de
ialisation dinteiface.
B.2.1 Lhritage
En UML, lhiitage se iepisente pai une che la pointe cieuse. La guie B.o dciit deux
classes Super-classe et Sous-classe. La classe Sous-classe hrite de la classe Super-classe.
Super-classe
Sous-classe
FicUvi B.o Exemple dhiitage
B.2.2 La ralisation
La ialisation dune inteiface pai une classe se iepisente pai une che pointille pointe
cieuse, comme illusti dans la guie B.,.
<<interface>>
Interface
Classe
FicUvi B., Exemple de ialisation de linteiface Interface pai la classe Classe
B.3 Les associations
Ceitaines ielations entie classes dun mme diagiamme sont iepisentes en UML sous la
foime dassociations. Le plus souvent une association ne ielie que deux classes. Une associa-
tion peut tie identie pai un nom et chacune de ses extimits dnit le nombie dinstances
57
Annexe B. Diagramme de classes UML
des classes ielies qui sont impliques dans cette association. On appelle multiplicit ce nombie
dinstances qui peut piendie les valeuis suivantes :
Multiplicit Interprtation
: un et un seul
o..: zio ou un
N exactement N
M..N de M N
zio ou plus
o.. zio ou plus
:.. un ou plus
Responsable Collaborateur
*
1
manage
chef subordonn
FicUvi B.8 Exemple dassociation manage
Lexemple de la guie B.8 dciit une association manage entie la classe Responsable et la
classe Collaborateur. Un iesponsable gie plusieuis collaboiateuis, ses subordonns. Un col-
laboiateui est gi pai un seul iesponsable, son chef. Les lments subordonn et chef sont des
rles dassociation.
B.3.1 Direction des associations
Les associations peuvent tie diriges, ce qui contiaint la visibilit et la navigation dans le mo-
dle. La diiection se iepisente pai une che classique. Pai dfaut, sil ny a pas de che, lasso-
ciation est bidiiectionnelle (comme sil y avait une che chaque extimit de lassociation).
*
1
A B
*
1
A B
*
1
A B
FicUvi B. Exemples dassociations diiiges
La guie B.:o pisente des exemples de diiections, dont voici les inteipitations. La piemiie
ligne signie que A connait tous les B auxquels elle est associe, et icipioquement, un B connait le
A auquel il est associ. La deuxime ligne signie que seul le A connait les B auxquels il est associ,
mais pas linveise. Finalement, dans la tioisime ligne, un B connait le A auquel il est associ, mais
pas linveise. En fait, ceci va impliquei la pisence ou non dun attiibut a de type A dans la classe
B ou b de type B dans la classe A en fonction de la diiection. Pai exemple, poui la deuxime ligne,
A possde une liste dobjet de type B mais B ne possde pas dattiibut de type A.
58
B.4. Correspondance UML-Java
B.3.2 Agrgation et composition
Deux sous-types dassociations peimettent de picisei un sens paiticuliei ces ielations :
lagigation et la composition. Elles peuvent galement tie diiiges.
*
1
A B
*
1
A B
*
1
A B
*
1
A B
FicUvi B.:o Exemples de compositions et dagigations.
Lagrgation est une association avec ielation de suboidination, souvent nomme possde
iepisente pai un tiait ieliant les deux classes et dont loiigine se distingue de lautie extimit
(la classe suboidonne) pai un losange creux. Une des classes iegioupe dauties classes. On peut
diie que lobjet A utilise ou possde une instance de la classe B.
La composition est une association liant le cycle de vie des deux classes conceines. Une as-
sociation de composition sinteipite comme une classe est compose de un ou plusieuis lment
de lautie classe. Elle est iepisente pai un tiait ieliant les deux classes et dont loiigine se dis-
tingue de lautie extimit (la classe composant) pai un losange plein. On peut diie que lobjet A
est compos instance de la classe B, et donc si lobjet de type A est dtiuit, les objets de type B qui
le composent sont galement dtiuit. Ce seia galement souvent les objets de type A qui cieiont
les objets de type B.
B.4 Correspondance UML-Java
Java peimet de piogiammei tout modle sous foime de diagiamme de classe UML tel que
pisent ci-dessus. Voici quelques exemples de coiiespondance entie le modle UML et le codage
Java.
B.4.1 Classes et membres
+ calculerDureePret() : int
+ getAge() : int
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
Personne
public class Personne {
public String surnom ;
private String prenom ;
private String nom ;
protected Date dateNaissance;
public int calculerDureePret() {...}
public int getAge() {...}
}
B.4.2 Classes abstraites
59
Annexe B. Diagramme de classes UML
+ calculerDureePret() : int
+ setAgeMajorite(a : int)
+ getAge() : int
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
- ageMajorite : int = 18
Personne
public abstract class Personne {
public String surnom;
private String prenom ;
private String nom ;
protected Date dateNaissance;
private static int ageMajorite = 18 ;
public int calculerDureePret() {...}
public static void setAgeMajorite(int a) {...}
public int getAge() {...}
}
B.4.3 Interfaces
+ afcher()
<<interface>>
IAfchable
interface IAffichable {
void afficher();
}
B.4.4 Hritage
- nom : String
Personne
- iD : int
Adherent
public class Adherent extends Personne {
private int iD ;
}
B.4.5 Ralisation
+ afcher()
<<interface>>
IAfchable
+ imprimer()
<<interface>>
IImprimable
+ afcher()
+ imprimer()
- nom : String
- chier : File
Image
public class Image implements IAffichable, IImprimable {
private String nom ;
private File fichier;
public void afficher(){...}
public void imprimer(){...}
}
B.4.6 Associations
A1 B1
public class A1 {
private B1 b1 ;
...
}
60
B.4. Correspondance UML-Java
A2 B2
*
public class A2 {
private ArrayList<B2> b2s ;
...
}
Homme
Femme
0..1
0..1
mari
epouse
public class Homme {
private Femme epouse ;
...
}
public class Femme {
private Homme mari ;
...
}
Personne
1
chef
0..*
subordonne
public class Personne {
private ArrayList<Personne> subordonnes;
private Personne chef ;
...
}
61
Annexe B. Diagramme de classes UML
62
Rfrences
Livres :
Programmer en Java, e Edition, Claude Delannoy, Eyiolles, :o::
e Java Tutorial : A Short Course on the Basics, th Edition, Collectif, Pientice Hall,
:ooo
Eective Java, nd Edition, Joshua Bloch, Pientice Hall, :oo8
Java in a nutshell, th edition, David Flanagan, OReilly, :oo,
Sites web :
Le site ociel Java, http://www.oracle.com/technetwork/java/index.html
Le tutoiial Java, http://docs.oracle.com/javase/tutorial/
lAPI du JDK :.,, http://docs.oracle.com/javase/7/docs/api/
Un site (fianais) de dveloppeuis, http://www.javafr.com/
Le site JavaWoild, http://www.javaworld.com
Quelques autres liens :
des liens en iappoit avec Java, http://www.javamug.org/mainpages/Java.html
Tutoiiaux jGuiu, http://java.sun.com/developer/onlineTraining/
plein dauties couis, http://java.developpez.com/cours/
63

Vous aimerez peut-être aussi