Académique Documents
Professionnel Documents
Culture Documents
cours Fauriel
Saint-tienne Cedex
Gauthier Picard
gauthier.picard@emse.fr
Institut Henri Fayol, ENSM.SE
Laurent Vercouter
laurent.vercouter@insa-rouen.fr
LITIS, INSA Rouen
Table des matires
Syntaxe du langage
. Types de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Types primitifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Tableaux et matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. Oprateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. Structures de contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Instructions conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Instructions itratives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Instructions break et continue . . . . . . . . . . . . . . . . . . . . . . . . .
Hritage
. Principe de lhritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Rednition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.. Polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. Classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. Classes et mthodes gnriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iii
Table des matires
iv
Table des matires
La plupart des programmes donns en exemple dans ce cours sont tlchargeables lURL :
http://www.emse.fr/~picard/cours/1A/java
v
Table des matires
vi
Chapitre 1
Le langage Java est un langage gnraliste de programmation synthtisant les principaux lan-
gages existants lors de sa cration en par Sun Microsystems. Il permet une programmation
oriente-objet ( linstar de SmallTalk et, dans une moindre mesure, C++), modulaire (langage
ADA) et reprend une syntaxe trs proche de celle du langage C.
Outre son orientation objet, le langage Java a lavantage dtre modulaire (on peut crire des
portions de code gnriques, c--d utilisables par plusieurs applications), rigoureux (la plupart
des erreurs se produisent la compilation et non lexcution) et portable (un mme programme
compil peut sexcuter sur dirents environnements). En contre-partie, les applications Java ont
le dfaut dtre plus lentes lexcution que des applications programmes en C par exemple.
F . Interprtation du langage
Un programmeur Java crit son code source, sous la forme de classes, dans des chiers dont
lextension est .java. Ce code source est alors compil par le compilateur javac en un langage
appel bytecode et enregistre le rsultat dans un chier dont lextension est .class. Le bytecode
1
Chapitre 1. Introduction au langage Java
ainsi obtenu nest pas directement utilisable. Il doit tre interprt par la machine virtuelle de Java
qui transforme alors le code compil en code machine comprhensible par le systme dexploita-
tion. Cest la raison pour laquelle Java est un langage portable : le bytecode reste le mme quelque
soit lenvironnement dexcution.
En , Sun Microsystems est rachet par Oracle Corporation qui fournit dornavant les
outils de dveloppement Java SE (Standard Edition) contenus dans le Java Development Kit (JDK).
Au moment o est crit ce livret, la dernire version stable est le JDK ..
1.1.1 Compilation
La compilation seectue par la commande javac suivie dun ou plusieurs nom de chiers
contenant le code source de classes Java. Par exemple, javac MyProg.java compile la classe My-
Prog dont le code source est situ dans le chier MyProg.java. La compilation ncessite souvent la
prcision de certains paramtres pour seectuer correctement, notamment lorsque le code source
fait rfrence certaines classes situes dans dautres rpertoires que celui du code compil. Il faut
alors ajouter loption -classpath suivie des rpertoires (spars par un ; sous Windows et : sous
Unix) des classes rfrences. Par exemple :
javac -classpath /prog/exos1:/cours MyProg.java
compilera le chier MyProg.java si celui-ci fait rfrence dautres classes situes dans les r-
pertoires /prog/exos1 et /cours. Le rsultat de cette compilation est un chier nomm My-
Prog.class contenant le bytecode correspondant au source compil. Ce chier est cr par dfaut
dans le rpertoire o la compilation sest produite. Il est cependant fortement souhaitable de ne
pas mlanger les chiers contenant le code source et ceux contenant le bytecode. Un rpertoire de
destination o sera cr le chier MyProg.class peut tre prcis par loption -d, par exemple :
javac -d /prog/exos1 -classpath /cours MyProg.java
1.1.2 Interprtation
Le bytecode obtenu par compilation ne peut tre excut qu laide de linterprteur. Lex-
cution seectue par la commande java suivie du nom de la classe excuter (sans lextension
.class). Comme lors de la compilation, il se peut que des classes dautres rpertoires soient n-
cessaires. Il faut alors utiliser loption -classpath comme dans lexemple qui suit :
java -classpath /prog/exos1:/cours MyProg
2
1.2. Programmation oriente-objet
tre vu comme une entit regroupant un ensemble de donnes et de mthodes (lquivalent dune
fonction en C) de traitement.
1.2.1 Classe
Un objet est une variable (presque) comme les autres. Il faut notamment quil soit dclar
avec son type. Le type dun objet est un type complexe (par opposition aux types primitifs entier,
caractre, ) quon appelle une classe.
Une classe regroupe un ensemble de donnes (qui peuvent tre des variables primitives ou des
objets) et un ensemble de mthodes de traitement de ces donnes et/ou de donnes extrieures
la classe. On parle dencapsulation pour dsigner le regroupement de donnes dans une classe.
Par exemple, une classe Rectangle utilise pour instancier des objets reprsentant des rec-
tangles, encapsule entiers : la longueur et la largeur du rectangle ainsi que la position en abscisse
et en ordonne de lorigine du rectangle (par exemple, le coin en haut gauche). On peut alors
imaginer que la classe Rectangle implmente une mthode permettant de dplacer le rectangle qui
ncessite en entre deux entiers indiquant la distance de dplacement en abscisse et en ordonne.
Laccs aux positions de lorigine du rectangle se fait directement (i.e. sans passage de paramtre)
lorsque les donnes sont encapsules dans la classe o est dnie la mthode. Un exemple, crit
en Java, de la classe Rectangle est donn ci-dessous :
class Rectangle {
int longueur ;
int largeur ;
int origine_x ;
int origine_y ;
int surface() {
return this.longueur * this.largeur ;
}
}
Encapsulation
Lors de la conception dun programme orient-objet, le programmeur doit identier les objets
et les donnes appartenant chaque objet mais aussi des droits daccs quont les autres objets sur
ces donnes. Lencapsulation de donnes dans un objet permet de cacher ou non leur existence
aux autres objets du programme. Une donne peut tre dclare en accs :
public : les autres objets peuvent accder la valeur de cette donne ainsi que la modier ;
3
Chapitre 1. Introduction au langage Java
priv : les autres objets nont pas le droit daccder directement la valeur de cette donne
(ni de la modier). En revanche, ils peuvent le faire indirectement par des mthodes de
lobjet concern (si celles-ci existent en accs public).
Les dirents droits daccs utilisables en Java sont dtaills dans la section ...
Mthode constructeur
Chaque classe doit dnir une ou plusieurs mthodes particulires appeles des constructeurs.
Un constructeur est une mthode invoque lors de la cration dun objet. Cette mthode, qui peut
tre vide, eectue les oprations ncessaires linitialisation dun objet. Chaque constructeur doit
avoir le mme nom que la classe o il est dni et na aucune valeur de retour (cest lobjet cr qui
est renvoy). Dans lexemple prcdent de la classe rectangle, le constructeur initialise la valeur
des donnes encapsules :
class Rectangle {
...
Rectangle(int lon, int lar) {
this.longueur = lon ;
this.largeur = lar ;
this.origine_x = 0 ;
this.origine_y = 0 ;
}
...
}
Plusieurs constructeurs peuvent tre dnis sils acceptent des paramtres dentre dirents.
1.2.2 Objet
Instanciation
Un objet est une instance (anglicisme signiant cas ou exemple ) dune classe et est rf-
renc par une variable ayant un tat (ou valeur). Pour crer un objet, il est ncessaire de dclarer
une variable dont le type est la classe instancier, puis de faire appel un constructeur de cette
classe. Lexemple ci-dessous illustre la cration dun objet de classe Cercle en Java :
Cercle mon_rond ;
mon_rond = new Cercle();
Lusage de parenthses linitialisation du vecteur, montre quune mthode est appele pour
linstanciation. Cette mthode est un constructeur de la classe Cercle. Si le constructeur appel
ncessite des paramtres dentre, ceux-ci doivent tre prciss entre ces parenthses (comme lors
dun appel classique de mthode). Linstanciation dun objet de la classe Rectangle faisant appel
au constructeur donn en exemple ci-dessous pourra scrire :
Rectangle mon_rectangle = new Rectangle(15,5);
4
1.2. Programmation oriente-objet
Pour accder une variable associe un objet, il faut prciser lobjet qui la contient. Le sym-
bole . sert sparer lidenticateur de lobjet de lidenticateur de la variable. Une copie de la
longueur dun rectangle dans un entier temp scrit :
int temp = mon_rectangle.longueur ;
La mme syntaxe est utilise pour appeler une mthode dun objet. Par exemple :
mon_rectangle.deplace(10,-3);
Pour quun tel appel soit possible, il faut que trois conditions soient remplies :
. La variable ou la mthode appele existe !
. Une variable dsignant lobjet vis existe et soit instancie.
. Lobjet, au sein duquel est fait cet appel, ait le droit daccder la mthode ou la variable
(cf. section ..).
Pour rfrencer lobjet courant (celui dans lequel se situe la ligne de code), le langage Java
fournit le mot-cl this. Celui-ci na pas besoin dtre instanci et sutilise comme une variable
dsignant lobjet courant. Le mot-cl this est galement utilis pour faire appel un constructeur
de lobjet courant. Ces deux utilisations possibles de this sont illustres dans lexemple suivant :
class Carre {
int cote ;
int origine_x ;
int origine_y ;
Carre(int cote) {
this(cote, 0, 0);
}
}
5
Chapitre 1. Introduction au langage Java
6
Chapitre 2
Syntaxe du langage
les commentaires (non traits par le compilateur) se situent entre les symboles /* et */
ou commencent par le symbole // en se terminant la n de la ligne
int a ; // ce commentaire tient sur une ligne
int b ;
ou
/*Ce commentaire ncessite
2 lignes*/
int a ;
les identicateurs de variables ou de mthodes acceptent les caractres {a..z}, {A..Z}, , _
ainsi que les caractres {..} sils ne sont pas le premier caractre de lidenticateur. Il faut
videmment que lidenticateur ne soit pas un mot rserv du langage (comme int ou
for).
Ex : mon_entier et ok4all sont des identicateurs valides mais
mon-entier et 4all ne sont pas valides pour des identicateurs.
. exception faite des types associs par une relation dhritage, cf. section
7
Chapitre 2. Syntaxe du langage
int a ;
double b = 5.0 ;
a = b;
int a ;
double b = 5.0 ;
a = (int)b ;
int[] mon_tableau ;
int mon_tableau2[];
Un tableau a toujours une taille xe qui doit tre prcise avant laectation de valeurs ses
indices, de la manire suivante :
De plus, la taille de ce tableau est disponible dans une variable length appartenant au tableau
et accessible par mon_tableau.length. On peut galement crer des matrices ou des tableaux
plusieurs dimensions en multipliant les crochets (ex : int[][] ma_matrice;). linstar du C,
on accde aux lments dun tableau en prcisant un indice entre crochets (mon_tableau[3] est
le quatrime entier du tableau) et un tableau de taille n stocke ses lments des indices allant de
O n-1.
. pour utiliser des ensembles taille variable, la classe java.util.Vector est trs utile
8
2.2. Oprateurs
String s1 = hello ;
String s2 = world ;
String s3 = s1 + + s2 ;
//Aprs ces instructions s3 vaut hello world
2.2 Oprateurs
Une liste des oprateurs disponibles en Java est prsente par ordre de priorit dcroissante
dans le tableau ..
<condition> doit renvoyer une valeur boolenne. Si celle-ci est vraie cest <bloc1> (resp.
<instruction1>) qui est excut sinon <bloc2> (resp. <instruction2>) est excut. La partie
else <bloc2> est facultative.
Exemple :
9
Chapitre 2. Syntaxe du langage
T . Oprateurs Java
Lgende
if (a == b) {
a = 50 ;
b = 0;
} else {
a = a - 1;
}
10
2.3. Structures de contrle
. retour ltape ;
. la boucle est termine et le programme continue son excution en interprtant les instruc-
tion suivant le bloc.
Syntaxe :
while (<condition>) <bloc>
Exemple :
while (a != b) a++;
Exemple :
do a++
while (a != b);
Pour...Faire Cette boucle est constitue de trois parties : (i) une initialisation (la dclaration de
variables locales la boucle est autorise dans cette partie) ; (ii) une condition darrt ; (iii) un
ensemble dinstructions excuter aprs chaque itration (chacune de ces instructions est spare
par une virgule). Lexcution de cette instruction suit les tapes suivantes :
. les initialisations sont eectues ;
. la condition (qui doit renvoyer une valeur boolenne) est value. Si celle-ci est vraie on
passe ltape , sinon on passe ltape ;
. le bloc principal est excut ;
. les instructions excuter aprs chaque itration sont excutes ;
. retour ltape ;
. la boucle est termine et le programme continue son excution en interprtant les instruc-
tions suivant le bloc principal.
Syntaxe :
for (<init>;<condition>;<instr_post_itration>) <bloc>
Exemple :
11
Chapitre 2. Syntaxe du langage
Exemple :
12
Chapitre 3
Un programme crit en Java consiste en un ensemble de classes reprsentant les lments ma-
nipuls dans le programme et les traitements associs. Lexcution du programme commence par
lexcution dune classe qui doit implmenter une mthode particulire public static void
main(String[] args). Les classes implmentant cette mthode sont appelles classes excu-
tables.
C:\>java HelloWorld
Hello world
C:\>
13
Chapitre 3. lments de programmation Java
3.1.2 Packages
Un grand nombre de classes, fournies par Java SE, implmentent des donnes et traitements
gnriques utilisables par un grand nombre dapplications. Ces classes forment lAPI (Application
Programmer Interface) du langage Java. Une documentation en ligne pour lAPI java est disponible
lURL :
http://docs.oracle.com/javase/7/docs/api/
Toutes ces classes sont organises en packages (ou bibliothques) ddis un thme prcis.
Parmi les packages les plus utiliss, on peut citer les suivants :
Package Description
java.awt Classes graphiques et de gestion dinterfaces
java.io Gestion des entres/sorties
java.lang Classes de base (import par dfaut)
java.util Classes utilitaires
javax.swing Autres classes graphiques
Pour accder une classe dun package donn, il faut pralablement importer cette classe ou
son package. Par exemple, la classe Date appartenant au package java.util qui implmente un
ensemble de mthodes de traitement sur une date peut tre importe de deux manires :
une seule classe du package est importe :
import java.util.Date ;
toutes les classes du package sont importes (mme les classes non utilises) :
import java.util.* ;
import java.util.Date ;
14
3.2. Variables et mthodes
Il est possible de crer vos propres packages en prcisant, avant la dclaration dune classe, le
package auquel elle appartient. Pour assigner la classe prcdente un package, nomm fr.emse,
il faut modier le chier de cette classe comme suit :
package fr.emse ;
import java.util.Date ;
Enn, il faut que le chemin daccs du chier DateMain.java corresponde au nom de son
package. Celui-ci doit donc tre situ dans un rpertoire fr/emse/DateMain.java accessible
partir des chemins daccs dnis lors de la compilation ou de lexcution (voir section ..).
lment Autorisations
Variable Lecture et criture
Mthode Appel de la mthode
Classe Instanciation dobjets de cette classe et
accs aux variables et mthodes de classe
Le mode public nest, bien sr, pas le seul type daccs disponible en Java. Deux autres mot-
cls peuvent tre utiliss en plus du type daccs par dfaut : protected et private. Le tableau .
rcapitule ces dirents types daccs (la notion de sous-classe est explique dans la section ).
T . Autorisations daccs
15
Chapitre 3. lments de programmation Java
Si aucun mot-cl ne prcise le type daccs, celui par dfaut est appliqu. En gnral, il est
souhaitable que les types daccs soient limits et le type daccs public, qui est utilis systmati-
quement par les programmeurs dbutants, ne doit tre utilis que sil est indispensable. Cette res-
triction permet dviter des erreurs lors daccs des mthodes ou de modications de variables
sans connatre totalement leur rle.
La classe Math fournit un ensemble doutils (variables et mthodes) trs utiles pour des pro-
grammes devant eectuer des opration mathmatiques complexes. Dans la portion de classe re-
produite ci-dessus, on peut notamment y trouver une approximation de la valeur de et une m-
thode convertissant la mesure dun angle dune valeur en degrs en une valeur en radians. Dans
le cas de cette classe, il est tout a fait inutile de crer et dinstancier un objet partir de la classe
Math. En eet, la valeur de ou la conversion de degrs en radians ne vont pas varier suivant
lobjet auquel elles sont rattaches. Ce sont des variables et des mthodes de classe qui peuvent
tre invoques partir de toute autre classe (car elles sont dclares en accs public) de la manire
suivante :
Question : Dans les sections prcdentes, nous avons dj utilis une variable de classe et une
mthode de classe. Pouvez-vous trouver lesquelles ?
16
3.2. Variables et mthodes
Rponse :
la mthode main des classes excutables est une mthode de classe car elle est appele
directement partir dune classe ;
lors de lachage dune chane de caractres lcran par linstruction
System.out.println(), on fait appel la variable out de la classe java.lang.System
qui est un objet reprsentant la sortie standard (lcran) et sur laquelle on appelle la
mthode println permettant dacher une chane de caractres.
17
Chapitre 3. lments de programmation Java
18
Chapitre 4
Hritage
Dans certaines applications, les classes utilises ont en commun certaines variables, mthodes
de traitement ou mme des signatures de mthode. Avec un langage de programmation orient-
objet, on peut dnir une classe dirent niveaux dabstraction permettant ainsi de factoriser
certains attributs communs plusieurs classes. Une classe gnrale dnit alors un ensemble dat-
tributs qui sont partags par dautres classes, dont on dira quelles hritent de cette classe gnrale.
Par exemple, les classes Carre et Rectangle peuvent partager une mthode surface() ren-
voyant le rsultat du calcul de la surface de la gure. Plutt que dcrire deux fois cette mthode,
on peut dnir une relation dhritage entre 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
sur les objets de la classe Carre si elle hrite de Rectangle.
Forme
Rectangle Cercle
Carre
Pour le moment, nous considrerons la classe Forme comme vide (cest--dire sans aucune va-
riable ni mthode) et nous nous intressons plus particulirement aux classes Rectangle et Carre.
19
Chapitre 4. Hritage
La classe Rectangle hritant dune classe vide, elle ne peut proter daucun de ses attributs et doit
dnir toutes ses variables et mthodes. Une relation dhritage se dnit en Java par le mot-cl
extends utilis comme dans lexemple suivant :
4.1.1 Redfinition
Lhritage intgral des attributs de la classe Rectangle pose deux problmes :
. il faut que chaque carr ait une longueur et une largeur gales ;
. la mthode affiche crit le mot rectangle en dbut de chane. Il serait souhaitable que
ce soit carr qui sache.
De plus, les constructeurs ne sont pas hrits par une sous-classe. Il faut donc crire un construc-
teur spcique pour Carre. Ceci nous permettra de rsoudre le premier problme en crivant un
constructeur qui ne prend quun paramtre qui sera aect la longueur et la largeur. Pour at-
tribuer une valeur ces variables (qui sont prives), le constructeur de Carre doit faire appel au
20
4.1. Principe de lhritage
constructeur de Rectangle en utilisant le mot-cl super qui fait appel au constructeur de la classe
suprieure comme suit :
* Remarques :
Lappel au constructeur dune classe suprieure doit toujours se situer dans un construc-
teur et toujours en tant que premire instruction ;
Si aucun appel un constructeur dune classe suprieure nest fait, le constructeur
fait appel implicitement un constructeur vide de la classe suprieure (comme si la
ligne super() tait prsente). Si aucun constructeur vide nest accessible dans la classe
suprieure, une erreur se produit lors de la compilation.
Le second problme peut tre rsolu par une rednition de mthode. On dit quune mthode
dune sous-classe rednit une mthode de sa classe suprieure, si elles ont la mme signature
mais que le traitement eectu est r-crit dans la sous-classe. Voici le code de la classe Carre o
sont rsolus les deux problmes soulevs :
Lors de la rednition dune mthode, il est encore possible daccder la mthode rednie
dans la classe suprieure. Cet accs utilise galement le mot-cl super comme prxe la mthode.
Dans notre cas, il faudrait crire super.affiche() pour eectuer le traitement de la mthode
affiche() de Rectangle.
Enn, il est possible dinterdire la rednition dune mthode ou dune variable en introdui-
sant le mot-cl final au dbut dune signature de mthode ou dune dclaration de variable. Il
est aussi possible dinterdire lhritage dune classe en utilisant final au dbut de la dclaration
dune classe (avant le mot-cl class).
4.1.2 Polymorphisme
Le polymorphisme est la facult attribue un objet dtre une instance de plusieurs classes.
Il a une seule classe relle qui est celle dont le constructeur a t appel en premier (cest--dire
la classe gurant aprs le new) mais il peut aussi tre dclar avec une classe suprieure sa classe
relle. Cette proprit est trs utile pour la cration densembles regroupant des objets de classes
direntes comme dans lexemple suivant :
21
Chapitre 4. Hritage
Loprateur instanceof peut tre utilis pour tester lappartenance une classe comme suit :
Lensemble des classes Java, y compris celles crites en dehors de lAPI, forme une hirarchie
avec une racine unique. Cette racine est la classe Object dont hrite toute autre classe. En eet, si
vous ne prcisez pas explicitement une relation dhritage lors de lcriture dune classe, celle-ci
hrite par dfaut de la classe Object. Grce cette proprit, des classes gnriques de cration
et de gestion dun ensemble, plus labores que les tableaux, regroupent des objets appartenant
la classe Object (donc de nimporte quelle classe).
Une des proprits induites par le polymorphisme est que linterprteur Java est capable de
trouver le traitement eectuer lors de lappel dune mthode sur un objet. Ainsi, pour plusieurs
objets dclars sous la mme classe (mais nayant pas la mme classe relle), le traitement associ
une mthode donn peut tre dirent. Si cette mthode est rednie par la classe relle dun objet
(ou par une classe situe entre la classe relle et la classe de dclaration), le traitement eectu est
celui dni dans la classe la plus spcique de lobjet et qui rednie la mthode.
Dans notre exemple, la mthode affiche() est rednie dans toutes les sous-classes de Forme
et les traitements eectus sont :
22
4.2. Interfaces
Rsultat :
rectangle 10x20
cercle 15
rectangle 5x30
carr 10
Dans ltat actuel de nos classes, ce code ne pourra cependant pas tre compil. En eet, la
fonction affiche() est appele sur des objets dont la classe dclare est Forme mais celle-ci ne
contient aucune fonction appele affiche() (elle est seulement dnie dans ses sous-classes).
Pour compiler ce programme, il faut transformer la classe Forme en une interface ou une classe
abstraite tel que cela est fait dans les sections suivantes.
4.2 Interfaces
Une interface est un type, au mme titre quune classe, mais abstrait et qui donc ne peut tre
instanci (par appel new plus constructeur). Une interface dcrit un ensemble de signatures de
mthodes, sans implmentation, qui doivent tre implmentes dans toutes les classes qui im-
plmentent linterface. Lutilit du concept dinterface rside dans le regroupement de plusieurs
classes, tel que chacune implmente un ensemble commun de mthodes, sous un mme type. Une
interface possde les caractristiques suivantes :
elle contient des signatures de mthodes ;
elle ne peut pas contenir de variables ;
une interface peut hriter dune autre interface (avec le mot-cl extends) ;
une classe (abstraite ou non) peut implmenter plusieurs interfaces. La liste des interfaces
implmentes doit alors gurer aprs le mot-cl implements plac dans la dclaration de
classe, en sparant chaque interface par une virgule.
Dans notre exemple, Forme peut tre une interface dcrivant les mthodes qui doivent tre
implmentes par les classes Rectangle et Cercle, ainsi que par la classe Carre (mme si celle-ci
peut proter de son hritage de Rectangle). Linterface Forme scrit alors de la manire suivante :
Pour obliger les classes Rectangle, Cercle et Carre implmenter les mthodes surface()
et affiche(), il faut modier lhritage de ce qui tait la classe Forme en une implmentation de
linterface dnie ci-dessus :
et
23
Chapitre 4. Hritage
Cette structure de classes nous permet dsormais de pouvoir compiler lexemple donn dans la
section .. traitant du polymorphisme. En dclarant un tableau constitu dobjets implmentant
linterface Forme, on peut appeler la mthode affiche() qui existe et est implmente par chaque
objet.
Si une classe implmente une interface mais que le programmeur na pas crit limplmenta-
tion de toutes les mthodes de linterface, une erreur de compilation se produira sauf si la classe
est une classe abstraite.
public Forme() {
this.origine_x = 0 ;
this.origine_y = 0 ;
}
24
4.4. Classes et mthodes gnriques
De plus, il faut rtablir lhritage des classes Rectangle et Cercle vers Forme :
et
public class Cercle extends Forme {
...
}
package java.util ;
Nous pouvons remarquer que le type pass en paramtre est not entre chevrons (ex : <E>), et
quil peut ensuite tre rutilis dans le corps de la classe, par des mthodes (ex : la mthode set
renvoie un lment de classe E).
Il est possible de dnir des contraintes sur le type pass en paramtre, comme par exemple
une contrainte de type extends :
. Ici, on utilise T extends E pour signaler que le type T est un sous type de E, que E soit une classe ou une
interface (on nutilise pas implements).
25
Chapitre 4. Hritage
Ceci signie que la classe SortedList (liste ordonne que nous voulons dnir) est param-
tre par le type T qui doit tre un type driv (par hritage ou interfaage) de Comparable<T>.
En bref, nous dnissons une liste ordonne dlments comparables entre eux (pour pouvoir
les trier), grce la mthode int compareTo(T o) de linterface Comparable qui permet de
comparer un Comparable un lment de type T.
26
Chapitre 5
Lors de lcriture dun programme, la prise en compte derreurs prend une place trs impor-
tante si lon souhaite crire un programme robuste. Par exemple, la simple ouverture dun chier
peut provoquer beaucoup derreurs telles que linexistence du chier, un mauvais format, une in-
terdiction daccs, une erreur de connexion au priphrique, Pour que notre programme soit
robuste, il faut que toutes les erreurs possibles soient dtectes et traites.
Certains langages de programmation, dont le langage Java, proposent un mcanisme de prise
en compte des erreurs, fond sur la notion dexception. Une exception est un objet qui peut tre
mis par une mthode si un vnement dordre exceptionnel (les erreurs rentrent dans cette
catgorie) se produit. La mthode en question ne renvoie alors pas de valeur de retour, mais met
une exception expliquant la cause de cette mission. La propagation dune mission se droule
selon les tapes suivantes :
. Une exception est gnre lintrieur dune mthode ;
. Si la mthode prvoit un traitement de cette exception, on va au point , sinon au point ;
. Lexception est renvoye la mthode ayant appel la mthode courante, on retourne au
point ;
. Lexception est traite et le programme reprend son cours aprs le traitement de lexcep-
tion.
La gestion derreurs par propagation dexception prsente deux atouts majeurs :
Une facilit de programmation et de lisibilit : il est possible de regrouper la gestion
derreurs un mme niveau. Cela vite des redondances dans lcriture de traitements
derreurs et encombre peu le reste du code avec ces traitements.
Une gestion des erreurs propre et explicite : certains langages de programmation utilisent
la valeur de retour des mthodes pour signaler une erreur la mthode appelante. Etant
donn que ce nest pas le rle de la valeur de retour de dcrire une erreur, il est souvent
impossible de connatre les causes relles de lerreur. La dissociation de la valeur de retour
et de lexception permet cette dernire de dcrire prcisment la ligne de code ayant
provoqu lerreur et la nature de cette erreur.
5.1 Dclaration
Il est ncessaire de dclarer, pour chaque mthode, les classes dexception quelle est suscep-
tible dmettre. Cette dclaration se fait la n de la signature dune mthode par le mot-cl
throws la suite duquel les classes dexceptions (spares par une virgule sil en existe plusieurs)
qui peuvent tre gnres sont prcises. La mthode parseInt de la classe Integer est un bon
exemple :
27
Chapitre 5. Gestion des exceptions
Cette mthode convertit une chane de caractres, qui doit contenir uniquement des chires,
en un entier. Une erreur peut se produire si cette chane de caractres ne contient pas que des
chires. Dans ce cas une exception de la classe NumberFormatException est mise.
Une exception peut tre mise dans une mthode de deux manires : (i) par une autre m-
thode appele dans le corps de la premire mthode ; (ii) par la cration 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 illustre ce second cas :
28
5.2. Interception et traitement
29
Chapitre 5. Gestion des exceptions
Dans chacun de ces cas, le traitement consiste acher le message derreur associ lexception.
Classe Description
AWTException Les exceptions de cette classe peuvent se
produire lors doprations de type
graphique.
ClassCastException Signale une erreur lors de la conversion
dun objet en une classe incompatible
avec sa vraie classe.
FileNotFoundException Signale une tentative douverture dun
chier inexistant.
IndexOutOfBoundsException Se produit lorsque lon essaie daccder
un lment inexistant dans un
ensemble.
IOException Les exceptions de cette classe peuvent se
produire lors doprations dentres/
sorties.
NullPointerException Se produit lorsquun pointeur null
est reu par une mthode nacceptant
pas cette valeur, ou lorsque lon
appelle une mthode ou une variable
partir dun pointeur null.
30
5.4. Classification des erreurs en Java
Erreurs de compilation. Avant mme de pouvoir excuter le programme, notre code source g-
nre des erreur par le compilateur. Il faut alors rviser et corriger le code pour ne plus avoir
derreurs.
Erreurs dexcution. Alors que notre programme est en cours dexcution, la JVM tant mal
congure ou corrompue, le programme sarrte ou se gle. A priori, cest une erreur non
pas due notre programme, mais la conguration ou ltat de lenvironnement dexcu-
tion de notre programme.
Exception non vrie. Alors que notre programme est en cours dexcution, une trace de la pile
des exceptions est ache, pointant vers une partie de notre code sans gestion dexception.
Visiblement, nous avons utilis du code qui est capable de lever un exception non vrie
(comme NullPointerException). Il faut modier le programme pour que cette situation
ne survienne pas.
Exception vrie. Alors que notre programme est en cours dexcution, une trace de la pile des
exceptions est ache, pointant vers une partie de notre code avec gestion dexception.
Visiblement, nous avons produit du code qui est capable de lever un exception vrie
(comme FileNotFoundException) mais les donnes passes notre programme ne va-
lide pas ces exceptions (par exemple, lorsque lon essaie douvrir un chier qui nexiste
pas). Il faut alors revoir les donnes passes en paramtre du programme. Notre code a
bien dtect les problmes quil fallait dtecter. Le chapitre suivant sur les entres/sorties
prsentent de nombreux exemples relatifs ce cas.
31
Chapitre 5. Gestion des exceptions
32
Chapitre 6
Le package java.io propose un ensemble de classes permettant de grer la plupart des en-
tres/sorties dun programme. Cette gestion consiste crer un objet ux dans lequel transitent
les donnes envoyer ou recevoir. Un ux connecte un objet Java un autre lment. Deux cas
sont illustrs dans ce chapitre : les interactions avec un utilisateur (entre clavier et sortie cran)
et les accs en lecture ou criture un chier.
33
Chapitre 6. Gestion des entres/sorties simples
import java.io.* ;
Un chier est reprsent par un objet de la classe java.io.File. Le constructeur de cette classe
prend en paramtre dentre le chemin daccs du chier. Le ux dentre est alors cr laide
de la classe FileInputStream sur lequel on peut lire caractre par caractre grce la mthode
read(). Lexemple suivant prsente une mthode pour acher le contenu dun chier :
34
6.1. Flux dentre
import java.io.* ;
Il arrive souvent denregistrer des donnes dans des chiers textes. Il peut alors tre utile duti-
liser un BufferedReader ou un Scanner pour eectuer la lecture. Dans les exemples suivants, on
considre une matrice 10 10 enregistre dans un chier texte matrice.txt ligne par ligne, avec
les colonnes spares par des espaces :
import java.io.* ;
35
Chapitre 6. Gestion des entres/sorties simples
import java.io.* ;
import java.util.Scanner ;
import java.io.* ;
import java.util.Date ;
Lobjet qui est lu dans le chier doit tre une instance de la classe java.util.Date.
36
6.2. Flux de sortie
Un ux de sortie est une instance dune sous-classe de OutputStream. Comme pour les ux
dentre, chaque classe de ux de sortie a son propre mode dcriture de donnes. Les classes les
plus couramment utilises sont :
ByteArrayOutputStream permet dcrire des octets vers le ux de sortie ;
DataOutputStream permet dcrire des types de donnes primitifs de Java vers le ux de
sortie.
FileOutputStream est utilis pour crire dans un chier. Les objets de cette classe sont
souvent encapsuls dans un autre objet de classe OutputStream qui dnit le format des
donnes crire.
ObjectOutputStream permet dcrire des objets (c--d des instances de classes Java) vers
le ux de sortie, si ces objets implmentent les interfaces Serializable ou Externalizable.
Writer nest pas une sous-classe de OutputStream mais reprsente un ux de sortie pour
chanes de caractres. Plusieurs sous-classes de Writer permettent la cration de ux pour
chanes de caractres.
Lcriture de donnes vers un ux de sortie suit le mme droulement que la lecture dun ux
dentre :
. Fermeture du ux : Quand le ux nest plus ncessaire, il doit tre ferm par la mthode
close().
Comme pour les entres du clavier, lcriture vers lcran fait appel la variable statique out de
la classe System. On appelle gnralement la mthode System.out.print ou System.out.println
comme cela a t fait dans de nombreux exemples de ce livret.
Lcriture dans un chier se fait par un ux de la classe FileOutputStream qui prend en entre
un chier (instance de la classe File). Ce ux de sortie permet dcrire des caractres dans le chier
grce la mthode write(). Lexemple suivant prsente une mthode pour crire un texte dans
un chier :
37
Chapitre 6. Gestion des entres/sorties simples
import java.io.* ;
On peut galement utiliser un Writer comme un FileWriter pour crire des chanes de
caractres dans un chier assez simplement. Dans lexemple suivant, on crit une srie de 10
lignes de 10 entiers alatoires spars par des espaces dans un chier pouvant tre lu par la classe
LectureMatrice :
import java.io.* ;
import java.util.Random ;
38
6.2. Flux de sortie
import java.io.* ;
import java.util.Date ;
39
Chapitre 6. Gestion des entres/sorties simples
40
Annexes
41
Annexe A
Annexe
Lors des premires versions du langage Java, le seul package fourni par dfaut par Java SE
permettant de construire des interfaces graphiques tait le package java.awt. Depuis la version
. du JDK, il est trs fortement recommand dutiliser les classes du package javax.swing pour
crire des interfaces graphiques. En eet, le package swing apporte deux avantages conceptuels
par rapport au package awt :
Les composants swing sont dits lgers (lightweight) contrairement aux composants lourds
(heavyweight) dawt. Lapparence graphique dun composant dit lourd dpend du systme
dexploitation car elle fait appel un composant correspondant dans le systme dexploita-
tion. Avec un composant lger, son apparence (look-and-feel) est xe et peut tre modie
dans le code Java et il est donc possible de donner une fentre une apparence la Win-
dows tout en utilisant Linux.
Il applique compltement le schma Modle-Vue-Contrleur (cf. section A.).
La plupart des classes de composants du package swing hritent de classes du package awt en
rednissant certaines mthodes pour assurer les deux avantages prcdemment cits. Cependant,
le package awt nest pas entirement obsolte et certaines de ces classes sont encore utilises pour
la gestion dvnements (cf. section A.) ou la disposition des composants (classes implmentant
linterface LayoutManager).
43
Annexe A. Applications graphiques (package swing)
F A. Exemple de JButton
des donnes ou de lapparence. Dans ces cas-l, un modle par dfaut est utilis.
A.2.1 Composants
Nous ne prsentons pas ici toutes les classes de composants du package swing pour nous in-
tresser plutt la vue et au modle de chaque composant. Lutilisation de certains composants
est illustre dans la section A...
Vue
Modle
Il existe pour chaque classe de composant, une seconde classe qui gre le modle de ce com-
posant (par exemple, ButtonModel reprsente un modle de bouton). En gnral un modle par
dfaut est cr dans le constructeur du composant. Laccs ce modle est trs souvent masqu car
il existe des mthodes, telles que setText() pour changer le texte dun bouton ou setSelected()
pour changer ltat dune case cocher, de la classe de composant qui peuvent tre directement
appeles pour changer les donnes du modle. Cependant, pour des composants plus complexes
44
A.2. Composants graphiques
tels que des tables (JTable) ou des arborescences (JTree), il est parfois indispensable de crer un
modle personnalis.
A.2.2 Containers
En premier lieu, il convient de rappeler quun container est un composant, et, par consquent,
que tout ce qui a t prsent prcdemment est aussi vrai pour les containers. En plus des carac-
tristiques dun composant simple, un container contient un ensemble de composants ainsi que
des contraintes sur leur disposition. Lajout dun composant un container se fait par une m-
thode add(). Il existe plusieurs mthodes add() acceptant des paramtres dentre dirents. La
mthode utiliser dpend du type de disposition choisi.
Lobjet qui gre la disposition des composants est une instance dune classe qui doit impl-
menter linterface java.awt.LayoutManager. Cet objet doit tre ajout au container, soit lors de
lappel son constructeur, soit par la mthode setLayout(). Un seul LayoutManager est auto-
ris par container. Quelques classes utilises pour la disposition des composants sont prsentes
ci-dessous.
BorderLayout. Le container est dcoup en cinq cases : une case par ct (gauche, droite, haut
et bas) et une au centre. Lajout dun composant se fait en prcisant la case utiliser grce des
variables de classe de BorderLayout :
MyContainer.add(MyComponent,BorderLayout.NORTH);
MyContainer.add(MyComponent2,BorderLayout.CENTER);
La taille de chaque case dpend : (i) de la largeur maximale entre la case du nord, du sud et
laddition des largeurs des cases du centre, de lest et de louest ; (ii) de la hauteur maximale entre
la case lest, louest et laddition des hauteurs des cases du centre, du nord et du sud. La case
du centre est tire pour remplir tout lespace restant.
BorderLayout.NORTH
BorderLayout.SOUTH
F A. Dcoupage du BorderLayout
45
Annexe A. Applications graphiques (package swing)
FlowLayout. Les composants sont ajouts les uns la suite des autres et de la gauche vers la
droite. Ds quune ligne est remplie de composants (cest--dire ds que la largeur du container
est atteinte, les composants restants sont ajouts sur une ligne en dessous. Il ny a pas dautres
contraintes de disposition :
MyContainer.add(MyComponent);
GridLayout. Le container est dcoup en une grille compose de n cases de taille gale. Le construc-
teur du GridLayout requiert en paramtres dentre le nombre de lignes et le nombre de colonnes
de la grille. Les composants sont ajouts les uns la suite des autres en remplissant dabord la
premire ligne, puis la seconde, etc. Il ny a pas dautres contraintes de disposition :
MyContainer.add(MyComponent);
Containers classiques
myPanel.setLayout(new GridLayout(4,5));
Les composants peuvent ensuite tre ajouts avec la mthode add() approprie.
Une interface graphique consiste donc en une hirarchie de composants telle que certains
composants sont des containers spciant la disposition dautres composants. La racine de cette
46
A.2. Composants graphiques
hirarchie est galement un container qui peut sacher librement (c--d. sans que sa disposi-
tion soit prcise dans un container). Parmi ces containers de haut niveau, on trouve la classe
javax.swing.JFrame qui reprsente une fentre et javax.swing.JDialog qui reprsente une
bote de dialogue. La cration dune fentre suit gnralement les tapes suivantes :
. Cration dune instance de JFrame (ou dune sous-classe).
. Ajout des composants au panel de la fentre. Ce panel est accessible par la mthode
getContentPane(). On peut galement attribuer la fentre un nouveau panel par la m-
thode setContentPane().
. Calcul de la taille de la fentre laide de la mthode pack(). Ce calcul est automatique et
prend en compte la dimension prferre de chaque composant ainsi que leur disposition.
. Achage de la fentre par la mthode setVisible().
Par exemple, la gure A. (p. ) est une instance dune sous-classe de JFrame :
import java.awt.* ;
import javax.swing.* ;
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();
}
47
Annexe A. Applications graphiques (package swing)
48
import java.awt.* ; ButtonGroup group = new ButtonGroup();
import java.util.Vector ; group.add(button1);
import javax.swing.* ; group.add(button2);
import javax.swing.border.EmptyBorder ; group.add(button3);
49
A.2. Composants graphiques
50
bas.add(scrollPane, BorderLayout.NORTH); // le texte est affiche
bas.add(textPanel, BorderLayout.SOUTH); g.drawString(text, 10, 15);
public static void main(String[] args) { // ces methodes permettent de changer le texte,
ExInterface myInterface = new ExInterface(); // la couleur ou la figure a afficher
myInterface.setVisible(true); public void setText(String txt) {
} text = txt ;
Annexe A. Applications graphiques (package swing)
} }
// Cette classe herite de canvas pour redfinir la public void setCouleur(String coul) {
// methode paint. La vue est codee dans cette classe if (coul.equals(Bleu)) {
class Dessin extends Canvas { couleur = Color.blue ;
} else if (coul.equals(Rouge)) {
String figure ; couleur = Color.red ;
Color couleur ; } else {
String text ; couleur = Color.green ;
}
// le constructeur de la classe }
public Dessin() {
figure = Carre ; public void setFigure(String fig) {
couleur = Color.blue ; figure = fig ;
text = Hello World ; }
this.setBackground(Color.white);
} // La redfinition de cette methode permet de specifier
// la taille preferree du composant
public void paint(Graphics g) { public Dimension getPreferredSize() {
// un rectangle noir encadre le composant return new Dimension(200, 200);
g.setColor(Color.black); }
g.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1); }
A.3. Contrleurs dvnements
A.3.1 Evnements
Un vnement graphique est reprsent dans le langage Java comme un objet dont la classe
hrite de java.awt.AWTEvent. Parmi les sous-classes de AWTEvent, on peut citer les plus couram-
ment utilises :
ActionEvent : Se produit lorsquune action est eectue sur un composant. Ex : click sur
un bouton.
ItemEvent : Se produit lorsquune slection a t eectue sur un composant. Ex : cochage
dune case.
KeyEvent : Se produit lorsque un vnement provient du clavier. Ex : pression dune
touche.
MouseEvent : Se produit lorsque un vnement provient de la souris. Ex : dplacement de
la souris.
WindowEvent : Se produit lorsquune action est eectue sur une fentre. Ex : click sur
licone de fermeture dune fentre.
Des mthodes sont attaches chacune de ces classes pour avoir accs plus de dtails sur
lvnement. On peut, par exemple, rcuprer le composant source de lvnement, la position de
la souris lors du click, etc.
myButton.addActionListener(myActionListener);
51
Annexe A. Applications graphiques (package swing)
52
import java.awt.event.* ; // Le texte affiche est mis a jour en fonction de la
import javax.swing.* ; // nouvelle selection
import javax.swing.event.* ; if (selected != null) {
dessin.setText(selected);
public class ExControleur extends ExInterface } else {
implements ListSelectionListener, ActionListener { dessin.setText();
}
public ExControleur() { dessin.repaint();
// appel au constructeur de ExInterface pour creer la }
// fenetre et ses composants
super(); // Cette methode est appelee si la touche entree est
// pressee dans le champ de texte
// ajout dun contrleur la fentre public void actionPerformed(ActionEvent e) {
this.addWindowListener(new WindowControler()); String str = text.getText();
// Le texte du champ est ajoute la liste des textes
// Un contrleur unique est cr pour les boutons if (str.length() > 0) {
// de choix listData.addElement(text.getText());
ChoiceControler controleur = new ChoiceControler(dessin); text.setText();
button1.addItemListener(controleur); textList.setListData(listData);
button2.addItemListener(controleur); }
button3.addItemListener(controleur); }
couleur.addItemListener(controleur);
// Le main doit etre redefinie pour creer un objet de la
// le role de contrleur pour la liste et le champ de // classe ExControleur et non ExInterface
// texte est assure par lobjet courant ExControleur public static void main(String[] args) {
textList.addListSelectionListener(this); ExControleur myControleur = new ExControleur();
text.addActionListener(this); myControleur.setVisible(true);
}
// Le controleur du bouton est ecrit directement dans }
// la classe
ajout.addActionListener(new ActionListener() { // Une classe de controleur de fenetre
class WindowControler extends WindowAdapter {
public void actionPerformed(ActionEvent e) {
String str = text.getText(); public void windowClosing(WindowEvent e) {
if (str.length() > 0) { System.exit(0);
listData.addElement(text.getText()); }
text.setText(); }
textList.setListData(listData);
} // Une classe pour le controle des boutons de choix.
} // Cette classe est utilisee pour les JRadioButton et}
}); // le JComboBox
} class ChoiceControler implements ItemListener {
53
A.3. Contrleurs dvnements
54
public ChoiceControler(Dessin d) {
dessin = d ;
}
}
}
Annexe B
55
Annexe B. Diagramme de classes UML
Un niveau de visibilit est galement attribu chaque membre. La visibilit dun membre
dune classe dnit quelles autres classes y ont accs (en terme de lecture/criture). UML utilise
niveaux de visibilit :
public (not par +), le membre est visible par toutes les classes
priv (not par -), le membre nest visible par aucune classe sauf celle qui le contient
protg (not par ), le membre est visible par toutes les sous-classes de celle qui le contient
(cette visibilit est explique ultrieurement)
Personne
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
+ calculerDureePret() : int
+ getAge() : int
La gure B. est un exemple dune classe Personne avec toutes les possibilits de visibilit.
Personne
Personne
{abstract}
Personne
+ surnom : String
- nom : String
- prenom : String
# dateNaissance : Date
- ageMajorite : int = 18
+ calculerDureePret() : int
+ setAgeMajorite(a : int)
+ getAge() : int
56
B.2. Les relations
<<interface>>
Interface
F B. Exemple dinterface
B.2.1 Lhritage
En UML, lhritage se reprsente par une che la pointe creuse. La gure B. dcrit deux
classes Super-classe et Sous-classe. La classe Sous-classe hrite de la classe Super-classe.
Super-classe
Sous-classe
F B. Exemple dhritage
B.2.2 La ralisation
La ralisation dune interface par une classe se reprsente par une che pointille pointe
creuse, comme illustr dans la gure B..
<<interface>>
Interface
Classe
57
Annexe B. Diagramme de classes UML
des classes relies qui sont impliques dans cette association. On appelle multiplicit ce nombre
dinstances qui peut prendre les valeurs suivantes :
Multiplicit Interprtation
un et un seul
.. zro ou un
N exactement N
M..N de M N
* zro ou plus
..* zro ou plus
..* un ou plus
1 manage
Responsable * Collaborateur
chef subordonn
A 1 * B
A 1 * B
A 1 * B
La gure B. prsente des exemples de directions, dont voici les interprtations. La premire
ligne signie que A connat tous les B auxquels elle est associe, et rciproquement, un B connat le
A auquel il est associ. La deuxime ligne signie que seul le A connat les B auxquels il est associ,
mais pas linverse. Finalement, dans la troisime ligne, un B connat le A auquel il est associ, mais
pas linverse. En fait, ceci va impliquer la prsence ou non dun attribut a de type A dans la classe
B ou b de type B dans la classe A en fonction de la direction. Par exemple, pour la deuxime ligne,
A possde une liste dobjet de type B mais B ne possde pas dattribut de type A.
58
B.4. Correspondance UML-Java
A 1 * B
A 1 * B
A 1 * B
A 1 * B
Lagrgation est une association avec relation de subordination, souvent nomme possde
reprsente par un trait reliant les deux classes et dont lorigine se distingue de lautre extrmit
(la classe subordonne) par un losange creux. Une des classes regroupe dautres classes. On peut
dire 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 concernes. Une as-
sociation de composition sinterprte comme une classe est compose de un ou plusieurs lment
de lautre classe. Elle est reprsente par un trait reliant les deux classes et dont lorigine se dis-
tingue de lautre extrmit (la classe composant) par un losange plein. On peut dire que lobjet A
est compos instance de la classe B, et donc si lobjet de type A est dtruit, les objets de type B qui
le composent sont galement dtruit. Ce sera galement souvent les objets de type A qui creront
les objets de type B.
59
Annexe B. Diagramme de classes UML
B.4.3 Interfaces
B.4.4 Hritage
Adherent
- iD : int
B.4.5 Ralisation
Image
- nom : String
- fichier : File
+ afficher()
+ imprimer()
B.4.6 Associations
A1 B1 public class A1 {
private B1 b1 ;
...
}
60
B.4. Correspondance UML-Java
* public class A2 {
A2 B2
private ArrayList<B2> b2s ;
...
}
0..1 epouse
Femme public class Femme {
private Homme mari ;
...
}
61
Annexe B. Diagramme de classes UML
62
Rfrences
Livres :
Programmer en Java, e Edition, Claude Delannoy, Eyrolles,
e Java Tutorial : A Short Course on the Basics, th Edition, Collectif, Prentice Hall,
Eective Java, nd Edition, Joshua Bloch, Prentice Hall,
Java in a nutshell, th edition, David Flanagan, OReilly,
Sites web :
Le site ociel Java, http://www.oracle.com/technetwork/java/index.html
Le tutorial Java, http://docs.oracle.com/javase/tutorial/
lAPI du JDK ., http://docs.oracle.com/javase/7/docs/api/
Un site (franais) de dveloppeurs, http://www.javafr.com/
Le site JavaWorld, http://www.javaworld.com
Quelques autres liens :
des liens en rapport avec Java, http://www.javamug.org/mainpages/Java.html
Tutoriaux jGuru, http://java.sun.com/developer/onlineTraining/
plein dautres cours, http://java.developpez.com/cours/
63