KACIMI Lamine / 20142
Sommaire
I. Introduction
II. Historique
III. Structure d’un programme JAVA
IV. Types primitifs, Opérateurs & Expressions
V. Enoncés conditionnels & Itératifs
VI. Les classes et les objets
VII. Tableaux
VIII. Héritage
IX. Classes abstraites & Interfaces
X. Collections
XI. Chaînes de caractères & Types énumérés
XII. Les Exceptions
KACIMI Lamine / 20143
DéfinitionG
én
éra
lité
s
Définition de SUN : "Java est un langage simple, orienté objet,
distribué, robuste, sûr, indépendant des architectures matérielles,
portable, de haute performance, multithread et dynamique"
KACIMI Lamine / 20144
1. Simple
1. Pas de pointeurs
2. Pas d’héritage multiple
2. Distribué: Les fonctions d'accès au réseau et les protocoles
internet les plus courants sont intégrés
1. Sockets
2. RMI
3. Portable: Les types de données sont indépendants de la plate
forme
4. Robuste: pas d’arithmétiques pointeurs, typage strict
CaractéristiquesG
én
éra
lité
s
KACIMI Lamine / 20145
5. Multithread
Une application peut être décomposée en unités
d'exécution fonctionnant simultanément
6. Dynamique: Les classes peuvent être modifiées sans pour
autant modifier les programmes qui les utilisent.
7. Performance ?: Oui grâce aux améliorations successives
dont la JVM a bénéficiée mais aussi grâce à l’amélioration
des API
Caractéristiques…suiteG
én
éra
lité
s
KACIMI Lamine / 20146
HistoriqueH
isto
riq
ue
Année Evénements
1995mai : premier lancement commercial du JDK 1.0
1996 janvier : JDK 1.0.1
1997 février : JDK 1.1
1998décembre : lancement de J2SE 1.2 et lancement du JDC (Java Community
Process)
1999 décembre : lancement J2EE
2000 mai : J2SE 1.3
2002 février : J2SE 1.4
2004 septembre : J2SE 5.0
2006mai : Java EE 5décembre : Java SE 6.0
2008 décembre : Java FX 1.0
2009 décembre : Java EE 6
2010 janvier : rachat de Sun par Oracle
2011 juillet : Java SE 7
2013 Juin: Lancement de JEE 7
2014 Mars: Java SE 8
https://jcp.org/en/participation/mail
KACIMI Lamine / 20147
VersionsV
ers
ion
sVersion Nom du projet Date de diffusion
JDK 1.0 Oak Mai 1995
JDK 1.1 Février 1997
JDK 1.1.4 Sparkler Septembre 1997
JDK 1.1.5 Pumpkin Décembre 1997
JDK 1.1.6 Abigail Avril 1998
JDK 1.1.7 Brutus Septembre 1998
JDK 1.1.8 Chelsea Avril 1999
J2SE 1.2 Playground Décembre 1998
J2SE 1.2.1 Mars 1999
J2SE 1.2.2 Cricket Juillet 1999
J2SE 1.3 Kestrel Mai 2000
J2SE 1.3.1 Ladybird Mai 2001
J2SE 1.4.0 Merlin Février 2002
J2SE 1.4.1 Hopper Septembre 2002
J2SE 1.4.2 Mantis Juin, 2003
J2SE 5.0 (1.5) Tiger Septembre 2004
Java SE 6.0 (1.6) Mustang Décembre 2006
Java SE 7 (1.7) Dolphin Juillet 2011
KACIMI Lamine / 20148
Versions/Nombre de ClassesV
ers
ion
s/C
lass
es
Java
1.0
Java
1.1
Java
1.2
J2SE
1.3
J2SE
1.4
J2SE
5.0
Java
SE 6
Java
SE 7
Packages 8 23 59 76 135 166 202 209
Classes 201 503 1520 1840 2990 3280 3780 4024
KACIMI Lamine / 20149
Editions Java & Outils de développementG
én
éra
lité
s
1.Les environnements JAVA
• Java SE (Standard Edition)
• Java ME (Mobile, Micro Edition)
• Java EE (Enterprise Edition)
• Java FX (Enterprise Edition)
2. Les IDE •Visual J++ (Microsoft)
•JBuilder (Borland/Inprise)
•Eclipse
•Netbeans
KACIMI Lamine / 201410
Que peut-on faire avec JavaG
én
éra
lité
s
1. Applications (Console, desktop)
2. Applets (pour le web)
3. Applications /Sites Web
4. Applications embarquées
5.…..tout!
KACIMI Lamine / 201415
JAVA, les types primitifsJA
VA
, le
s ty
pe
s p
rim
itifs
Les types primitifs de Java se répartissent en quatre grandes
catégories selon la nature des informations qu’ils permettent de
représenter :
• nombres entiers,
• nombres flottants,
• caractères,
• booléens.
KACIMI Lamine / 201416
JAVA, Types entiersJA
VA
, le
s ty
pe
s e
ntie
rs
Valeur décimale Valeur binaire Valeur Hexadécimale
1 0000000000000001 0001
2 0000000000000010 0002
3 0000000000000011 0003
16 0000000000010000 00F0
127 0000000001111111 007F
255 0000000011111111 00FF
-1 1111111111111111 FFFF
-256 1111111100000000 FF00
KACIMI Lamine / 201417
JAVA, Types flottantsJA
VA
, le
s ty
pe
s flo
tta
nts
n= 1.5 ∗ 10181.5: mantisse
18 : exposant
Notation générale n≈ 𝑠𝑀. 10𝑛
KACIMI Lamine / 201419
JAVA, Types flottants: ConséquenceJA
VA
, le
s ty
pe
s flo
tta
nts
.
Co
nsé
qu
en
ce
Valeur décimale Représentation en float
0.9
0.09
0.009
0.0009
0.00009
0.000009
9E-7
9E-8
9E-9
9E-10
0.9
0.089999996
0.0090
9.0E-4
9.0E-5
9.0E-6
9.0000003E-7
9.0E-8
9.0E-9
8.9999996E-10
KACIMI Lamine / 201420
JAVA, Types flottantsJA
VA
, le
s ty
pe
s flo
tta
nts
.
Le tableau suivant récapitule les caractéristiques des types float
et double. Notez ici encore l’existence de constantes prédéfinies
de la forme Float.MAX_VALUE qui fournissent les différentes
limites.
KACIMI Lamine / 201421
JAVA, Type CaractèreJA
VA
, le
ty
pe
ca
rac
tère
.
Comme la plupart des langages, Java permet de manipuler des
caractères. Mais il offre l’originalité de les représenter en mémoire
sur deux octets en utilisant le code universel Unicode
KACIMI Lamine / 201422
JAVA, Type booléenJA
VA
, le
ty
pe
bo
olé
en
.
Ce type sert à représenter une valeur logique du type vrai/faux. Il
n’existe pas dans tous les langages car il n’est pas aussi
indispensable que les autres. En effet, on peut souvent se
contenter d’expressions booléennes du genre de celles qu’on
utilise dans une instruction if:
if (n<p) ..... // n<p est une expression booléenne valant vrai ou
faux
En Java, on peut disposer de variables de ce type, ce qui
permettra des affectations telles que :
boolean ordonne ; // déclaration d’une variable de type
booléen
.....
ordonne = n<p ; // ordonne reçoit la valeur de l’expression
booléenne n<p
Les deux constantes du type booléen se notent true et false
KACIMI Lamine / 201423
JAVA, Constantes, le mot clé finalJA
VA
, D
éc
lare
r u
ne
co
nst
an
te.
Java permet de déclarer que la valeur d’une variable ne doit
pas être modifiée pendant l’exécution du programme. Par
exemple, avec :
on déclare la variable cst de type int, de valeur initiale 20.
De plus, toute tentative ultérieure de
modification de la valeur de n sera rejetée par le compilateur :
KACIMI Lamine / 201424
JAVA, Opérateurs & ExpressionsJA
VA
, O
pé
rate
urs
& E
xp
ress
ion
s
1. Les opérateurs arithmétiques
Opérateur Signification
+ Addition
- Soustraction
* Multiplication
/ Division
% Modulo
2. Les opérateurs relationnels
Opérateur Signification
< Inférieur à
<= Inférieur ou égal à
> Supérieur à
>= Supérieur ou égal à
== Égal à
!= Différent de
KACIMI Lamine / 201425
JAVA, Opérateurs & ExpressionsJA
VA
, O
pé
rate
urs
& E
xp
ress
ion
s
3. Les opérateurs logiques
Opérateur Signification
! Non
&& Et logique
|| Ou logique
4. Les opérateurs bit à bit
Opérateur Signification
& Et bit à bit
| Ou bit à bit
^ Ou exclusif bit à bit
>>, <<, >>> Décalage
5. Autres opérateurs, Casting, instanceof et Opérateur conditionnel
KACIMI Lamine / 201426
JAVA, Instructions de contrôleJA
VA
, In
stru
ctio
ns
de
Co
ntr
ôle
A priori, dans un programme, les instructions sont exécutées
séquentiellement, c’est-à-dire dans l’ordre où elles apparaissent.
Or la puissance et le comportement intelligent d’un programme
proviennent essentiellement de la possibilité de s’affranchir de cet
ordre pour effectuer des choix et des boucles (répétitions).
Tous les langages disposent d’instructions, nommées instructions
de contrôle, permettant de les réaliser.
KACIMI Lamine / 201427
JAVA, Instructions de contrôleJA
VA
, In
stru
ctio
ns
de
Co
ntr
ôle
1. Les choix (if, else et switch)
2. Les boucles (while, for et do …. while)
3. Les branchements inconditionnels: continue, break
KACIMI Lamine / 201429
JAVA, L’instruction if. Exemple completJA
VA
, L’
Inst
ruc
tio
n if. E
xe
mp
le
co
mp
let
KACIMI Lamine / 201431
JAVA, Les instructions do… while et whileJA
VA
, Le
s in
stru
ctio
ns
do
…
wh
ile
et
wh
ile
do … while
while
KACIMI Lamine / 201432
JAVA, L’instruction forJA
VA
, L’
Inst
ruc
tio
n f
or
Le JDK 5.0 a introduit une nouvelle structure de boucle souvent
nommée for... each
Elle ne s’applique toutefois qu’au parcours des éléments d’une
collection, d’un tableau ou d’une chaîne et nous vous la
présenterons par la suite dans ces différents contextes.
KACIMI Lamine / 201433
JAVA, Les instructions break et continueJA
VA
, Le
s in
stru
ctio
ns
bre
ak
et
co
ntin
ue
L’instruction break dite ordinaire permet de sortir d’une boucle
ou comme on l’a déjà vu d’un switch.
Pour sortir de 2 boucles imbriquées, on utilisera toujours break
mais avec une étiquette cette fois-ci.
L’instruction continue permet de passer prématurément au tour
de boucle suivant. Pensez par exemple à l’utiliser pour calculer
la somme des nombre pairs inférieurs à 540.
KACIMI Lamine / 201434
JAVA, Les classes et les objetsJA
VA
, Le
s c
lass
es
et
les
ob
jets
1. Notion de classe
2. Instanciation des objets
3. Notion de référence à un objet
4. Différence entre types primitifs et types objets
5. Notion de constructeur
6. Champs et méthodes d’objet vs Champs et méthodes de
classe
7. Notion de paquetage
KACIMI Lamine / 201435
JAVA, Classe PointJA
VA
, U
ne
pre
miè
re c
lass
e:
La
cla
sse
Po
int
Nous supposerons ici qu’un objet de type Point sera représenté
par deux coordonnées entières. Ils nous suffira de les déclarer
ainsi :
KACIMI Lamine / 201436
JAVA, Classe Point: Ajout de méthodesJA
VA
, La
sse
Po
int,
ajo
ut
de
mé
tho
de
s
Méthode:
• Nom de la méthode
• Mode (niveau ) d’accès
• Arguments
• Type de la valeur de retour
KACIMI Lamine / 201438
JAVA, Notion de constructeurJA
VA
, N
otio
n d
e c
on
stru
cte
ur
Dans la définition de la classe Point, nous n’avons défini aucun constructeur, dans un tel cas, Java nous fournit un constructeur par défaut, sans paramètres.
Un constructeur n’est qu’une méthode sans type de retour.
KACIMI Lamine / 201439
JAVA, Initialisation des attributs d’un objetJA
VA
, In
itia
lisa
tio
n d
es
att
rib
uts
d’u
n o
bje
t
Il est également possible d’initialiser les attributs d’un
objet à la déclaration.
KACIMI Lamine / 201440
JAVA, Eléments de conception des
classes
JA
VA
, Elé
me
nts
de
co
nc
ep
tio
n
de
s c
lass
es
1. Encapsuler les attributs: l’extérieur n’a pas à connaître ces
attributs ni le corps des méthodes. L’extérieur utilisera
uniquement l’interface de la classe.
2. Typologies des méthodes:
a) Méthodes d’accès: getters
b) Méthodes d’altération: setters
c) Méthodes métier
KACIMI Lamine / 201441
JAVA, Eléments de conception des
classes
JA
VA
, Elé
me
nts
de
co
nc
ep
tio
n
de
s c
lass
es
a et b désignent le même objet
KACIMI Lamine / 201442
JAVA, la notion de cloneJA
VA
, la
no
tio
n d
e c
lon
e
Nous venons de voir que l’affectation de variables de type objet
se limite à la recopie de références. Elle ne provoque pas la
recopie de la valeur des objets.
NB: On peut toujours utiliser les opérateurs logiques avec les
objets, mais ceux-là ne porteront pas sur les objets mais plutôt sur
leurs références.
KACIMI Lamine / 201443
JAVA, Attributs et méthodes de classeJA
VA
, A
ttrib
uts
et
mé
tho
de
s d
e
cla
sse
En Java, on peut définir des champs qui, au lieu d’exister dans
chacune des instances de la classe, n’existent qu’en un seul
exemplaire pour toutes les instances d’une même classe.
Il s’agit en quelque sorte de données globales partagées par
toutes les instances d’une même classe.
On parle alors de champs de classe ou de champs statiques.
De même, on peut définir des méthodes de classe (ou statiques)
qui peuvent être appelées indépendamment de tout objet de la
classe (c’est le cas de la méthode main ).
KACIMI Lamine / 201444
JAVA, Attributs et méthodes de classeJA
VA
, A
ttrib
uts
et
mé
tho
de
s d
e
cla
sse
Les méthodes statiques ne sont donc liées à aucun objet, leur
implémentation ne peut pas faire référence à this.
Exercice: Dans la classe Point, définissez une méthode de
classe qui renvoie le point origine (0,0)
KACIMI Lamine / 201445
JAVA, Surdéfinition de méthodes JA
VA
, Su
rdé
fin
itio
nd
e
mé
tho
de
s
1. a+b (a et b entiers) vs s+t (s et t String)
2. Une classe peut définir la même méthode plusieurs fois
mais avec des signatures différentes.
KACIMI Lamine / 201446
JAVA, Passage de paramètresJA
VA
, Pa
ssa
ge
de
pa
ram
ètr
es
En Java, la transmission d’un argument à une méthode et celle
de son résultat ont toujours lieu par valeur.
Comme pour l’affectation, les conséquences en seront
totalement différentes, selon que l’on a affaire à une valeur d’un
type primitif ou d’un type classe.
KACIMI Lamine / 201447
JAVA, La récursivitéJA
VA
, La
ré
cu
rsiv
ité
Java autorise la récursivité des appels de méthodes. Celle-ci peut
être :
• directe : une méthode comporte, dans sa définition, au moins un
appel à elle-même ;
• croisée : l’appel d’une méthode entraîne l’appel d’une autre
méthode qui, à son tour, appelle la méthode initiale (le cycle
pouvant d’ailleurs faire intervenir plus de deux méthodes).
Exercice: Ajouter une méthode, qui calcule la factorielle
récursivement, à la classe Util précédente. Essayer ensuite de
l’implémenter en utilisant les itérations classiques.
KACIMI Lamine / 201448
JAVA, Les objets membresJA
VA
, Le
s o
bje
ts m
em
bre
s
Comme nous l’avons souligné à plusieurs reprises, les champs
d’une classe sont soit d’un type primitif, soit des références à des
objets.
Dans le second cas, on parle souvent d’objet membre pour
caractériser cette situation.
Les méthodes de la
classe Cercle
peuvent évoquer les
méthodes de la
classe Point en
utilisant l’objet
membre c.
Compléter
l’implémentation
KACIMI Lamine / 201449
JAVA, Les classes internesJA
VA
, Le
s c
lass
es
inte
rne
s
Une classe est dite interne lorsque sa définition est située à
l’intérieur de la définition d’une autre classe. Malgré certaines
ressemblances avec la notion d’objet membre étudiée ci-dessus,
elle ne doit surtout pas être confondue avec elle, même s’il est
possible de l’utiliser dans ce contexte.
KACIMI Lamine / 201450
JAVA, Les classes internes, intérêtsJA
VA
, Le
s c
lass
es
inte
rne
s,
inté
rêts
On peut se demander en quoi les situations précédentes diffèrent
d’une définition de I qui serait externe à celle de E.
3 propriétés particulières:
1. Un objet d’une classe interne est toujours associé, au moment
de son instanciation, à un objet d’un classe externe dont on
dit qu’il lui a donné naissance.
2. Un objet d’une classe interne a toujours accès aux champs et
méthodes (même privés) de l’objet externe lui ayant donné
naissance (attention : ici, il s’agit bien d’un accès restreint à
l’objet, et non à tous les objets de cette classe).
3. Un objet de classe externe a toujours accès aux champs et
méthodes (même privés) d’un objet d’une classe interne
auquel il a donné naissance.
Exercice: recréer la classe Cercle en utilisant une classe interne
Centre qui représentera son centre.
KACIMI Lamine / 201451
JAVA, Les classes internesJA
VA
, Le
s c
lass
es
inte
rne
s
1. Il est possible de créer une instance de la classe interne depuis
l’extérieur.
2. JAVA permet la définition d’une classe interne à l’intérieur
d’une méthode, seule cette méthode est dans la mesure de
l’instancier.
3. Il est possible de déclarer la classe interne comme statique;
auquel cas, elle n’aura accès qu’aux membres statiques de la
classe externe.
KACIMI Lamine / 201452
JAVA, Les paquetagesJA
VA
, Le
s p
aq
ue
tag
es
La notion de paquetage correspond à un regroupement logique
sous un identificateur commun d’un ensemble de classes.
Elle est proche de la notion de bibliothèque que l’on rencontre
dans d’autres langages.
Elle facilite le développement et la cohabitation de logiciels
conséquents en permettant de répartir les classes
correspondantes dans différents paquetages.
Le risque de créer deux classes de même nom se trouve alors limité
aux seules classes d’un même paquetage.
KACIMI Lamine / 201453
JAVA, Les paquetagesJA
VA
, Le
s p
aq
ue
tag
es
L’attribution d’un nom de paquetage se fait au niveau du fichier
source.
Toutes les classes d’un même fichier source appartiendront donc
toujours à un même paquetage. Pour ce faire, on place, en début
de fichier, une instruction de la forme :
Pour utiliser une classe définie dans un paquetage autre que le
paquetage courant, on utilisera l’instruction import. On peut
également qualifier la classe en spécifiant son paquetage.
On peut également importer toutes les classes du paquetage en
utilisant import nompaquetage.*
KACIMI Lamine / 201454
JAVA, Les tableauxJA
VA
, Le
s ta
ble
au
x
En programmation, on parle de tableau pour désigner un
ensemble d’éléments de même type désignés par un nom
unique, chaque élément étant repéré par un indice précisant sa
position au sein de l’ensemble.
1. Déclarer un tableau
2. Créer un tableau
3. Utiliser un tableau
4. Passage de paramètre tableau
5. La notion d’ellipse
KACIMI Lamine / 201455
JAVA, Déclaration et création de
tableaux
JA
VA
, D
éc
lara
tio
n e
t c
réa
tio
n
de
ta
ble
au
x
Le tableau peut être initialisé dès sa déclaration en utilisant:
KACIMI Lamine / 201456
JAVA, Utilisation de tableauxJA
VA
, U
tilisa
tio
n d
e t
ab
lea
ux
En Java, on peut utiliser un tableau de deux façons différentes :
• en accédant individuellement à chacun de ses éléments,
avec un indice
• en accédant globalement à l’ensemble du tableau. Pour
changer la référence du tableau et le faire pointer vers un autre
On peut toujours récupérer la taille d’un tableau en utilisant
l’attribut length de celui-ci.
NB: On peut également déclarer un tableau d’objets, essayer
avec un tableau d’objets de la classe Cercle
Il existe également une variante de la boucle for souhaitable
pour parcourir les éléments d’un tableau.
KACIMI Lamine / 201457
JAVA, Tableaux en argument et en retourJA
VA
, Ta
ble
au
x e
n a
rgu
me
nt
et
en
re
tou
r
Les tableaux java étant des objets, les remarques faites
concernant le passage d’objets en argument et leur
récupération s’appliquent également pour les tableaux.
KACIMI Lamine / 201458
JAVA, Tableaux à plusieurs indicesJA
VA
, Ta
ble
au
x à
plu
sie
urs
ind
ice
sDe nombreux langages disposent de la notion de tableau à
plusieurs indices. Par exemple, un tableau à deux indices permet
de représenter une matrice mathématique.
Java ne dispose pas d’une telle notion. Néanmoins, il permet de
la "simuler" en créant des tableaux de tableaux
KACIMI Lamine / 201459
JAVA, Arguments variablesJA
VA
, A
rgu
me
nts
va
ria
ble
s
Depuis le JDK 5.0, on peut définir une méthode dont le nombre
d’arguments est variable. Par exemple, si l’on définit une
méthode somme avec l’en-tête suivant :
On pourra l’appeler avec 0, 1 ou plusieurs paramètres
La notation … se nomme ellipse
KACIMI Lamine / 201460
JAVA, L’héritageJA
VA
, L’
hé
rita
ge
L’héritage est à l’origine des possibilités de réutilisation des
composants logiciels que sont les classes.
1. Notion d’héritage
2. Droits d’accès
3. Construction et initialisation des objets des classes
dérivées
4. Redéfinition de méthodes vs Surdéfinition
5. Notion de polymorphisme
KACIMI Lamine / 201461
JAVA, Notion d’héritageJA
VA
, N
otio
n d
’hé
rita
ge
Imaginons que nous ayons besoin d’une classe PointColore,
destinée à manipuler des points colorés d’un plan
Il est clair que un point coloré est en fait un point à la base, Il est
donc légitime de penser à dériver la classe Point pour créer
PointColore
D’une manière générale, un objet d’une classe dérivée accède
aux membres publics de sa classe de base, exactement comme
s’ils étaient définis dans la classe dérivée elle-même.
KACIMI Lamine / 201462
JAVA, Héritage et droits d’accèsJA
VA
, H
érita
ge
et
dro
its
d’a
cc
ès
Une méthode d’une classe dérivée n’a pas accès aux membres
privés de sa classe de base.
Une méthode d’une classe dérivée a accès aux membres
publics de sa classe de base.
Une méthode d’une classe dérivée a accès aux membres
protégés de sa classe de base. protected (classes dérivées et
classes appartenant au même paquetage)
KACIMI Lamine / 201463
JAVA, Construction des objets dérivésJA
VA
, H
érita
ge
, C
on
stru
ctio
n
de
s o
bje
ts d
érivé
s
En Java, le constructeur de la classe dérivée doit prendre en
charge l’intégralité de la construction de l’objet.
Si un constructeur d’une classe dérivée appelle un constructeur
d’une classe de base, il doit obligatoirement s’agir de la
première instruction du constructeur et ce dernier est désigné
par le mot-clé super.
KACIMI Lamine / 201464
JAVA, Initialisation des objets dérivésJA
VA
, H
érita
ge
, In
itia
lisa
tio
n
de
s o
bje
ts d
érivé
sOBJET SIMPLE OBJET DÉRIVÉ
1. Allocation mémoire,
2. Initialisation par défaut des
champs,
3. Initialisation explicite des
champs,
4. Exécution des instructions du
constructeur.
1. Allocation mémoire pour un
objet de type B;
2. Initialisation par défaut de
tous les champs de B(aussi
bien ceux hérités de A, que
ceux propres à B) aux valeurs
"nulles" habituelles.
3. Initialisation explicite, s’il y a
lieu, des champs hérités de A.
4. Exécution du corps du
constructeur de A.
5. Initialisation explicite, s’il y a
lieu, des champs propres à B.
6. Exécution du corps du
constructeur de B.
KACIMI Lamine / 201465
JAVA, Redéfinition de méthodesJA
VA
, R
ed
éfin
itio
n d
e
mé
tho
de
sJava permet à une classe
dérivée de redéfinir des
méthodes définies dans la
classe de base.
03 Conditions:1. Le type de retour doit
être le même et/ou
covariant.
2. le droit d’accès de la
méthode de la classe
dérivée ne doit pas être
moins élevé que celui de
la classe ascendante.
3. la clause throws de laméthode de la classe
dérivée ne doit pas
mentionner des
exceptions non
mentionnées dans la
clause throws de laméthode de la classe
ascendante
KACIMI Lamine / 201466
JAVA, Redéfinition de méthodesJA
VA
, R
ed
éfin
itio
n d
e
mé
tho
de
s
• classe A: méthode f de A
• classe B: méthode f de A
• classe C: méthode f de C
• classe D: méthode f de D
• classe E: méthode f de A
• classe F: méthode f de C.
KACIMI Lamine / 201467
JAVA, PolymorphismeJA
VA
, Po
lym
orp
his
me
Le polymorphisme permet de manipuler des objets sans en
connaître (tout à fait) le type.
Exercice: Ecrire un programme qui crée un tableau hétérogène
d’objets Point et envoie le message afficher() à chacun d’eux.
KACIMI Lamine / 201469
JAVA, La super-classe ObjetJA
VA
, La
su
pe
r-c
lass
eO
bje
t
En réalité, dans JAVA, il existe une classe nommée Object dont
dérive implicitement toute classe simple.
Méthodes de la classe Object:
Méthode Explication
toString Fournit une chaîne contenant :• le nom de la classe concernée,• l’adresse de l’objet en hexadécimal (précédée de @).
equals Se contente de comparer les adresses des deux objets concernés
KACIMI Lamine / 201470
JAVA, Les classes et les méthodes finalesJA
VA
, Le
s c
lass
es
et
les
mé
tho
de
s fin
ale
sUne méthode déclarée final ne peut pas être redéfinie dans une
classe dérivée.
Une classe déclarée final ne peut plus être dérivée.
Par exemple, les classes wrappers (Integer, Double, …etc.) sont
déclarées finales et ne peuvent donc pas être dérivées.
Quand doit-on déclarer des classes finales?
KACIMI Lamine / 201471
JAVA, Les classes abstraitesJA
VA
, Le
s c
lass
es
ab
stra
ite
s
Une classe abstraite est une classe qui ne permet pas d’instancier
des objets. Elle ne peut servir que de classe de base pour une
dérivation. Elle se déclare ainsi :
Animal Son
Abeille Bourdonne
Hibou Hue, ulule
Bœuf Beugle, meugle
Cerf Brame
Cheval Hennit
Chien Aboie
Cochon Grogne
Corbeau Croasse
Pigeon Caracoule
KACIMI Lamine / 201472
JAVA, Les interfacesJA
VA
, Le
s in
terf
ac
es Si l’on considère une classe abstraite n’implantant aucune
méthode et aucun champ (hormis des constantes), on aboutit à la
notion d’interface. En effet, une interface définit les en-têtes d’un
certain nombre de méthodes, ainsi que des constantes.
Cependant, nous allons voir que cette dernière notion se révèle
plus riche qu’un simple cas particulier de classe abstraite. En effet :
• Une classe pourra implémenter plusieurs interfaces (alors
qu’une classe ne pouvait dériver que d’une seule classe
abstraite), à condition qu’elles soient compatibles
• les interfaces pourront se dériver,
• on pourra utiliser des variables de type interface.
KACIMI Lamine / 201474
JAVA, Les chaînes de caractères et les
types énumérés
JA
VA
, Le
s c
ha
îne
s d
e
ca
rac
tère
s e
t le
s ty
pe
s
én
um
éré
s
1. La classe String
2. La classe StringBuffer
3. La classe StringBuilder
4. Les types énumérés (depuis JDK 5.0)
KACIMI Lamine / 201475
JAVA, La classe StringJA
VA
, La
cla
sse
Str
ing
Java dispose d’une classe standard nommée String, permettant
de manipuler des chaînes de caractères, c’est-à-dire des suites de
caractères. Les constantes chaînes telles que « bonjour » ne sont
en fait que des objets de type String construits automatiquement
par le compilateur.
La classe String dispose de deux constructeurs, l’un sans
argument créant une chaîne vide, l’autre avec un argument de
type String qui en crée une copie.
La classe String dispose d’autres constructeurs aussi, mais les deux
ci-dessus mentionnés sont les plus utilisés.
KACIMI Lamine / 201476
JAVA, Méthodes de la classe StringJA
VA
, M
éth
od
es
de
la
cla
sse
Str
ing
1. Longueur d’une chaîne : length
La méthode length permet d’obtenir la longueur d’une chaîne,
c’est-à-dire le nombre de caractères qu’elle contient (pour être
plus précis, il faudrait parler de la longueur de l’objet String dont
on lui fournit la référence).
2. Accès aux caractères d’une chaîne : charAt
La méthode charAt de la classe String permet d’accéder à un
caractère de rang donné d’une chaîne (le premier caractère
porte le rang 0)
3. Concaténation de chaînes: +
L’opérateur + est défini lorsque ses deux opérandes sont des
chaînes. Il fournit en résultat une nouvelle chaîne formée de la
concaténation des deux autres. Si seule une opérande est de
type String, l’autre se voit converti en String aussi (Formatage)
KACIMI Lamine / 201477
JAVA, Méthodes de la classe StringJA
VA
, M
éth
od
es
de
la
cla
sse
Str
ing
4. Recherche dans une chaîne: indexOf, lastIndexOf
La méthode indexOf permet de rechercher, à partir du début
d’une chaîne ou d’une position donnée :
•la première occurrence d’un caractère donné,
•la première occurrence d’une autre chaîne.
Dans tous les cas, elle fournit :
•la position du caractère (ou du début de la chaîne
recherchée) si une correspondance a effectivement été
trouvée,
•la valeur -1 sinon.
Il existe également une méthode lastIndexOf, qui effectue les
mêmes recherches que indexOf, mais en examinant la chaîne
depuis sa fin.
5. Comparaison de chaînes: ==,!=,equals, equalsIgnoreCase
KACIMI Lamine / 201478
JAVA, Méthodes de la classe StringJA
VA
, M
éth
od
es
de
la
cla
sse
Str
ing
6. Comparaison de chaînes: compareTo
La méthode compareTo s’utilise ainsi :
chaîne1.compareTo(chaîne2)
Elle fournit :
•un entier négatif si chaîne1 arrive avant chaîne2.
•un entier nul si chaîne1 et chaîne2 sont égales.
•un entier positif si chaîne1 arrive après chaîne2
.7. Majuscule et Minuscule: toLowerCase, toUpperCase:
.8. Suppression des séparateurs de début et de fin: trim
Exercice: Ecrire un programme Java qui permet de trier un
tableau de chaînes normalisées.
9. Conversions: String.valueOf()
KACIMI Lamine / 201479
JAVA, La classe StringBufferJA
VA
, La
cla
sse
Str
ing
Bu
ffe
r
Les objets de type String ne sont pas modifiables mais nous avons
vu qu’il était possible de les employer pour effectuer la plupart des
manipulations de chaînes.
Cependant, la moindre modification d’une chaîne ne peut se
faire qu’en créant une nouvelle chaîne (c’est le cas d’une simple
concaténation).
C’est pourquoi Java dispose d’une classe StringBuffer destinée elle
aussi à la manipulation de chaînes, mais dans laquelle les objets
sont modifiables.
KACIMI Lamine / 201480
JAVA, Méthodes de la classe StringBufferJA
VA
, M
éth
od
es
de
la
cla
sse
Str
ing
Bu
ffe
r
Il existe des méthodes :
• de modification d’un caractère de rang donné : setCharAt,
• d’accès à un caractère de rang donné : charAt,
• d’ajout d’une chaîne en fin : la méthode append accepte des
arguments de tout type primitif et de type String,
• d’insertion d’une chaîne en un emplacement donné : insert,
• de remplacement d’une partie par une chaîne donnée :
replace,
• de conversion de StringBuffer en String : toString.
KACIMI Lamine / 201481
JAVA, Types énumérésJA
VA
, Ty
pe
s é
nu
mé
rés
1. Définition
2. Déclaration d’une variable de type énuméré
KACIMI Lamine / 201482
JAVA, Types énumérésJA
VA
, Ty
pe
s é
nu
mé
rés
3. Comparaison
4. Utilisation d’un type énuméré dans une instruction switch
KACIMI Lamine / 201483
JAVA, Types énumérésJA
VA
, Ty
pe
s é
nu
mé
rés
5. Conversion entre types énumérés et chaînes
6. Itération sur les valeurs d’un type énuméré
KACIMI Lamine / 201484
JAVA, Types énumérésJA
VA
, Ty
pe
s é
nu
mé
rés
7. Ajout de constructeur et de méthodes
KACIMI Lamine / 201485
JAVA, La gestion des exceptionsJA
VA
, G
est
ion
de
s e
xc
ep
tio
ns
Même lorsqu’un programme est au point, certaines circonstances
exceptionnelles peuvent compromettre la poursuite de son
exécution.
• Il peut s’agir par exemple de données incorrectes.
• Problème d’accès à un fichier.
• Attente de réponse d’un serveur hors service.
• Problème matériel quelconque.
KACIMI Lamine / 201486
JAVA, La hiérarchie des exceptions JAVAJA
VA
, La
hié
rarc
hie
de
s
exc
ep
tio
ns
JA
VA
KACIMI Lamine / 201487
JAVA, La hiérarchie des exceptions JAVAJA
VA
, La
hié
rarc
hie
de
s
exc
ep
tio
ns
JA
VA
KACIMI Lamine / 201488
JAVA, Runtime ExceptionsJA
VA
, R
un
tim
eExc
ep
tio
ns
Exception Explications
ArithmeticException Exception générée suite à une erreur d’arithmétique
ArrayIndexOutOfBoundsException Exception générée suite à l’accès à un index en dehors des limites d’un tableau, d’une collection
ArrayStoreException Exception générée lorsque un programme essaye de mettre dans un tableau d’objets un objet incompatible
ClassCastException Exception générée en essayant de convertir explicitement un objet vers un type non compatible
IllegalArgumentException Exception générée suite au passage d’un mauvais argument à une méthode
IllegalMonitorStateException Appel de wait, notify, notifyAll depuis un thread qui ne détient pas le moniteur de l’objet
IllegalStateException Opération demandée alors que l’état de la machine virtuelle est elle dans un état qui lui permet pas de traiter l’opération
IllegalThreadStateException Exemple: demander la continuation d’un thread alors qu’il est dans l’état terminé.
IndexOutOfBoundsException Super-classe de ArrayIndexOutOfBoundsExcception
NegativeArraySizeException Création d’un tableau avec un nombre négatif d’éléments
NullPointerException Accès à des méthodes d’un objet via la référence null
NumberFormatException Echec de la conversion depuis String ver Number
SecurityException Exécution d’une opération qui viole la politique de sécurité préservée par un objet SecurityManger
StringIndexOutOfBoundsException Exception générée suite à l’accès à un index en dehors des limites d’un objet String, StringBuffer.
KACIMI Lamine / 201489
JAVA, Traitement des exceptions,
Exceptions handling
JA
VA
, Tr
aite
me
nt
de
s
exc
ep
tio
ns Deux types d’exceptions:
1. Checked Exceptions (Exceptions explicites): (à traiter par le
programmeur)
2. Unchecked Exceptions (Exceptions implicites): Traité par un
mécanisme mis en place par la JVM.
KACIMI Lamine / 201490
JAVA, Traitement des exceptions
unchecked
JA
VA
, Tr
aite
me
nt
de
s
exc
ep
tio
ns
Default handler(stackTrace + arrêt du
thread)
KACIMI Lamine / 201491
JAVA, Traitement des exceptions
checked
JA
VA
, Tr
aite
me
nt
de
s
exc
ep
tio
ns
Utilisation de blocs try, catch, ou en ajoutant throws à la
méthode à l’origine de l’exception
Si les exceptions checked ne sont pas traitées par le
programmeur, elle seront traitées par la jvm au même titre que
les exceptions unchecked.
D’autre part, les exceptions unchecked peuvent également être
traitées par le programmeur
Il n y a aucune différence en terme de fonctionnalités entres les
exceptions checked et unchecked. Les exceptions checked« obstruent » le code métier .
KACIMI Lamine / 201492
JAVA, Déclencher une exception, throwJA
VA
, D
éc
len
ch
er
un
e
exc
ep
tio
n
KACIMI Lamine / 201493
JAVA, Gestionnaire d’exception, le bloc
try …..catchJA
VA
, G
est
ion
na
ire
d’e
xc
ep
tio
n
KACIMI Lamine / 201494
JAVA, Gestion de plusieurs exceptionsJA
VA
, G
est
ion
de
plu
sie
urs
exc
ep
tio
ns
KACIMI Lamine / 201495
JAVA, Gestion de plusieurs exceptionsJA
VA
, G
est
ion
de
plu
sie
urs
exc
ep
tio
ns
Depuis Java7, il est possible d’écrire un seul block catch pour
traiter plusieurs exceptions
KACIMI Lamine / 201496
JAVA, La clause throwsJA
VA
, La
cla
use
th
row
s
Toute méthode susceptible de déclencher une exception explicite
qu’elle ne traite pas localement doit mentionner son type dans
une clause throws figurant dans son en-tête.
Bien entendu, cette règle concerne les exceptions que la
méthode peut déclencher directement par l’instruction throw,
mais aussi toutes celles que peuvent déclencher (sans les traiter)
toutes les méthodes qu’elle appelle
KACIMI Lamine / 201497
JAVA, Redéclenchement d’une
exception
JA
VA
, R
ed
éc
len
ch
em
en
td
’un
e
exc
ep
tio
n
Dans un gestionnaire d’exception, il est possible de demander
que, malgré son traitement, l’exception soit retransmise à un
niveau englobant, comme si elle n’avait pas été traitée. Il suffit
pour cela de la relancer en appelant à nouveau l’instruction
throw.
KACIMI Lamine / 201498
JAVA, Le bloc finallyJA
VA
, Le
blo
c f
ina
lly Nous avons vu que le déclenchement d’une exception provoque
un branchement inconditionnel au gestionnaire, à quelque niveau
qu’il se trouve. L’exécution se poursuit avec les instructions suivant
ce gestionnaire.
Java permet d’introduire, à la suite d’un bloc try, un bloc
particulier d’instructions qui seront toujours exécutées :
• soit après la fin "naturelle" du bloc try, si aucune exception n’a
été déclenchée,
• soit après le gestionnaire d’exception (à condition, bien sûr, que
ce dernier n’ait pas provoqué d’arrêt de l’exécution).
KACIMI Lamine / 201499
JAVA, Les structures de données (les
collections)
JA
VA
, Le
s st
ruc
ture
s d
e
do
nn
ée
s (l
es
co
lle
ctio
ns)
List: Stocker des objets sans conditions particulières
Set: Pas deux fois ou plus le même objet
Map: Système clé-valeur
KACIMI Lamine / 2014100
JAVA, Les structures de données (les
collections)
JA
VA
, Le
s st
ruc
ture
s d
e
do
nn
ée
s (l
es
co
lle
ctio
ns)
KACIMI Lamine / 2014101
JAVA, Les structures de données (les
collections)
JA
VA
, Le
s st
ruc
ture
s d
e
do
nn
ée
s (l
es
co
lle
ctio
ns)
KACIMI Lamine / 2014102
JAVA, Les classes implémentant
l’interface List
JA
VA
, Le
s c
lass
es
imp
lém
en
tan
t
l’in
terf
ac
e L
ist
LinkedList, Vector, ArrayList
KACIMI Lamine / 2014103
JAVA, Quelques méthodes de l’interface
List
JA
VA
, Le
s c
lass
es
imp
lém
en
tan
t
l’in
terf
ac
e L
ist
•add() permet d'ajouter un élément ;
•get(int index) retourne l'élément à l'indice demandé ;
•remove(int index) efface l'entrée à l'indice demandé ;
•isEmpty() renvoie « vrai » si l'objet est vide ;
•removeAll() efface tout le contenu de l'objet ;
•contains(Object element) retourne « vrai » si l'élément passé en paramètre est dans l'ArrayList.
Si vous effectuez beaucoup de lectures sans vous soucier de
l'ordre des éléments, optez pour une ArrayList ; en revanche, si
vous insérez beaucoup de données au milieu de la liste, optez
pour une Linkedlist.
KACIMI Lamine / 2014104
JAVA, les classes implémentant
l’interface Map
JA
VA
, Le
s c
lass
es
imp
lém
en
tan
t
l’in
terf
ac
e L
ist
HashTable, HashMap
KACIMI Lamine / 2014105
JAVA, Méthodes de l’interface MapJA
VA
, M
éth
od
es
de
l’in
terf
ac
e
Ma
pHashTable, HashMapLa classe HashTable nous offre tout un panel de méthodes utiles :
•isEmpty() retourne « vrai » si l'objet est vide ;
•contains(Object value) retourne « vrai » si la valeur est présente.
Identique àcontainsValue(Object value) ;
•containsKey(Object key) retourne « vrai » si la clé passée en
paramètre est présente dans laHashtable ;
•put(Object key, Object value) ajoute le couple key - value dans
l'objet ;
•elements() retourne une énumération des éléments de l'objet ;
•keys() retourne la liste des clés sous forme d'énumération.
HashMap accepte null et n’est pas thread safe (plus rapide
donc)
KACIMI Lamine / 2014106
JAVA, Classes implémentant l’interface
Set
JA
VA
, C
lass
es
imp
lém
en
tan
t
l’in
terf
ac
e S
et
HashSet, TreeSet, LinkedHashSet
Exercice: Trier un tableau d’ entiers en utilisant an objet TreeSet
KACIMI Lamine / 2014107
JAVA, Méthodes de l’interface SetJA
VA
, M
éth
od
es
de
l’in
terf
ac
e
Ma
pHashTable, HashMap
La classe HashTable nous offre tout un panel de méthodes utiles :
•add()
•contains(Object value)
•isEmpty()
•iterator()
•remove()
•toArray()
KACIMI Lamine / 2014108
JAVA, Récapitulatif sur les collectionsJA
VA
, R
éc
ap
itu
latif
sur
les
co
lle
ctio
ns
•Une collection permet de stocker un nombre variable d'objets.
•Il y a principalement trois types de collection : les List, les Set et
les Map.
•Chaque type a ses avantages et ses inconvénients.
•Les Collection stockent des objets alors que les Map stockent un
couple clé - valeur.
•Si vous insérez fréquemment des données en milieu de liste,
utilisez une LinkedList.
•Si vous voulez rechercher ou accéder à une valeur via une clé
de recherche, optez pour une collection de type Map.
•Si vous avez une grande quantité de données à traiter, tournez-
vous vers une liste de type Set.
KACIMI Lamine / 2014111
Gestion des fichiersLe
s e
ntr
ée
s/so
rtie
s • La gestion de fichiers se fait par l'intermédiaire de la classe
java.io.File.
• Cette classe possède des méthodes qui permettent d'interroger
ou d'agir sur le système de fichiers du système d'exploitation.
• Un objet de la classe java.io.File peut représenter un fichier ou un
répertoire.
KACIMI Lamine / 2014113
Méthode de la classe FileLe
s e
ntr
ée
s/so
rtie
s File (String name)
File (String path, String name)
File (File dir, String name)
boolean isFile ()
boolean isDirectory ()
boolean mkdir ()
boolean exists ()
boolean delete ()
boolean canWrite ()
boolean canRead ()
File getParentFile ()
long lastModified ()
String [] list ()
KACIMI Lamine / 2014114
Gestion des fluxLe
s e
ntr
ée
s/so
rtie
s • Un flux (stream) est un chemin de communication entre la
source d'une information et sa destination.
• Difficulté d'un langage d'avoir un bon système d'entrées/sorties.
• Beaucoup de sources d'E/S de natures différentes (console,
fichier, socket,...).
• Beaucoup d'accès différents (accès séquentiel, accès
aléatoire, mise en mémoire tampon, binaire, caractère, par
ligne, par mot, etc.).
• Problème de codage (UNICODE, ASCII, ISO……)
KACIMI Lamine / 2014115
Gestion des flux…suiteLe
s e
ntr
ée
s/so
rtie
s • Java propose les flux suivants.
• Flux d'entrée/sortie de bytes.
• Flux d'entrée/sortie de caractères depuis la version 1.1 de java.
• Toutes les classes d'entrée/sortie sont dans le package java.io
• Toutes les méthodes peuvent générer une java. io.IOException
KACIMI Lamine / 2014116
InputStream, classes dérivéesLe
s e
ntr
ée
s/so
rtie
s
InputStream
FilterInputStream
DataInputStream BufferedInputStream PushBackInputStream
PipeInputStream FileInputStream
KACIMI Lamine / 2014117
OutputStream, classes dérivéesLe
s e
ntr
ée
s/so
rtie
s
OutputStream
FilterOutputStream
DataOutputStream BufferedOutputStream PrintStream
ObjectOutputStreamByteArrayOutputStrea
m
KACIMI Lamine / 2014119
La classe InputStreamLe
s e
ntr
ée
s/so
rtie
s
Méthodes de lecture
• public int read () ;
• public int read (byte b[ ]) ;
• public int read (byte b[], int off, int len) ;
Sauter des octets : public long skip (long n) ;
Combien d'octets dans le flux : public int available () ;
Le flux supporte-t'il le marquage ? public boolean
markSupported () ;
Marquage d'un flux : public void mark (int readlimit) ;
Revenir sur la marque: public void reset () ;
Fermer un flux : public void close () ;
KACIMI Lamine / 2014120
La classe OutputStreamLe
s e
ntr
ée
s/so
rtie
s Méthodes d’écriture
• public void write (int b) ;
• public void write (byte b []) ;
• public void write (byte b [], int off, int len)
Nettoyage d'un flux, forçant l'écriture des données bufférisées:
public void flush () ;
Fermeture d'un flux public void close () ;
KACIMI Lamine / 2014121
FilterInputStream et FilterOutputStreamLe
s e
ntr
ée
s/so
rtie
s
Ces deux classes servent de classes de base à des classes de
gestion d'entrées/sorties plus évoluées:
• BufferedInputStream et BufferedOutputStream permettent de
lire et écrire des données à travers un tampon de
lecture/écriture pour améliorer les performances.
• DataInputStream et DataOutputStream permettent de
lire/écrire des données formatées (byte, int, char, float,
double, etc.)
KACIMI Lamine / 2014124
La sérialisationLe
s e
ntr
ée
s/so
rtie
s
La sérialisation d'un objet est le processus de stockage d'un objet
complet (par exemple sur un disque).
• Le processus inverse est la désérialisation.
• Un objet sérialisé est dit persistant
Une classe est sérialisable si elle implémente l'interface
java.io.Serializable.
Des objets de type java.io.ReadObjectStream et
java.io.WriteObjectStream vont permettre de
sérialiser/désérialiser.
Les données membres que l'on ne souhaite pas sauvegarder
doivent être déclarées transient.
KACIMI Lamine / 2014125
La sérialisation….suiteLe
s e
ntr
ée
s/so
rtie
s Des méthodes de lecture/écriture peuvent être redéfinies le cas
échéant:
private void writeObject (java.io.ObjectOutputStream out) throws
IOException ;
private void readObject (java.io.ObjectInputStream in) throws
IOException, ClassNotFoundException ;
KACIMI Lamine / 2014126
Le package java.nioLe
s e
ntr
ée
s/so
rtie
s • Nouveau package de gestion des entrées/sorties introduit dans la
version 1.4.
• NIO permet d'utiliser des entrées/sorties plus rapides en gérant des
blocs plutôt que des bytes ou caractères.
• Les objets de base pour ce type d'entrée sortie sont: Buffer et
Channel
• Un "Buffer' contient les données à lire ou écrire, un "Channel"
désigne la source ou la destination de l'information. Une
entrée/sortie sur un objet "Channel" transite obligatoirement par un
objet "Buffer"
KACIMI Lamine / 2014128
Nouveautés dans Java7Le
s e
ntr
ée
s/so
rtie
s • La gestion des entrées/sorties a été améliorée dans Java7. à vous
de découvrir les nouvelles classes, non?
KACIMI Lamine / 2014130
IntroductionPro
gra
mm
atio
n r
ése
au
• Même si la plupart des applications développées en java
reposent sur des bibliothèques de haut-niveau, il est parfois utile
d'utiliser les sockets à bas niveau.
• Depuis la sortie de java, une API permettant de gérer le réseau est
disponible dans le JDK, elle permet de gérer les adresses, les
sockets clients, les sockets serveurs, les URL... Dans ce cours, nous
verrons comment utiliser cette API en faisant parfois un lien avec
la gestion du réseau bas-niveau. (le package java.net)
• Il est utile d'avoir des connaissances en réseau même si je tenterai
au maximum de réexpliquer les notions utiles.
KACIMI Lamine / 2014132
Adressage Pro
gra
mm
atio
n r
ése
au
•Avant d'entamer la partie communication proprement dite, nous
allons apprendre à utiliser les adresses IP en java.
•Afin que deux applications communiquent (en utilisant le
protocole IP), il est nécessaire de connaître l'adresse IP de l'autre
machine. L'API standard permet de les manipuler en utilisant la
classe InetAddress. Cette classe permet de manipuler aussi bien
les adresses IPv4 que les adresses IPv6. Ceci correspond à deux
normes différentes, la plupart des IP rencontrées sont en IPv4 et
ont une notation sous la forme 127.0.0.1.
KACIMI Lamine / 2014133
La classe InetAddressPro
gra
mm
atio
n r
ése
au
static InetAddress
getByAddress(byte[] addr)
obtenir un InetAddress à partir d'un
champ de bytes (4 pour l'IPv4)
static InetAddress
getByName(String host)
permet d'obtenir l'adresse à partir
du nom d'hôte
static InetAddress getLocalHost() permet d'obtenir l'adresse de
l'hôte local
byte[] getAddress() retourne un champ de byte
correspond à l'adresse
String getHostAddress() retourne l'adresse sous forme
pointée
String getHostName() retourne le nom d'hôte
KACIMI Lamine / 2014135
Le protocole TCPPro
gra
mm
atio
n r
ése
au
Afin de communiquer entre plusieurs machines de manière simple,
les informaticiens ont défini deux protocoles
réseaux couramment utilisés de nos jours : le protocole TCP et le
protocole UDP.
De manière assez sommaire, le protocole TCP a été créé pour
permettre d'envoyer des données de manière fiable par le réseau,
notamment en :
• s'assurant que les données arrivent au destinataire, en cas
d'échec de transmission, l'ordinateur émetteur doit être mis au
courant
• s'assurant que les données arrivent dans le bon ordre
• définissant une connexion entre les machines
KACIMI Lamine / 2014136
Le protocole UDPPro
gra
mm
atio
n r
ése
au
UDP est peu fiable, il n'est pas certain que les données arrivent et il
n'est pas certains que les données arrivent dans le bon ordre. TCP
effectue un nombre important d'allers et retours, ce qui a
l'inconvénient de faire diminuer la vitesse de connexion. De nos
jours, TCP est quasiment tout le temps utilisé, sauf pour les
échanges dont la perte de paquets n'est pas important
(typiquement vidéocast, VoIP...).
Java propose plusieurs classes pour manipuler ces protocoles de
manière absolument transparente.
•La classe Socket repose sur le protocole TCP et permet donc de
transmettre des données de manière fiable.
•La classe DatagramSocket quant à elle, repose sur UDP.
KACIMI Lamine / 2014137
Le mode connectéPro
gra
mm
atio
n r
ése
au
Serveur Client1.Création d'un objet ServerSocket pour l'ouverture du service
2.Attente d'une demande de connexion (méthode accept () qui retourne une socket de service)
3.Echange d'informations avec le client
4.Fermeture socket (méthode close()).
1. Création d'un objet Socket.
2. Connexion sur le serveur.
3. Echange d'informations avec
le serveur
4. Fermeture socket (méthode
close ()).
KACIMI Lamine / 2014140
Le mode non connecté, DatagramSocketPro
gra
mm
atio
n r
ése
au
• Les constructeurs:
• public DatagramSocket () ;• public DatagramSocket (int port) ;
• public DatagramSocket (int port, InetAddr laddr) ;
• Quelques méthodes:
• public void receive (DatagramPacket p) ;
• public void send (DatagramPacket p) ;
La classe java.net.DatagramPacket contient les données reçues ou
à envoyer (tableau de bytes) et l'adresse (java.net.InetAddress) de
l'expéditeur ou du destinataire.
KACIMI Lamine / 2014143
Le multicast, la classe MulticastSocketPro
gra
mm
atio
n r
ése
au
Cette classe permet d’utiliser le multicasting IP pour envoyer des
datagrammes UDP à un ensemble de machines repéré grâce à
une adresse multicast (classe D dans IP version 4 : de 224.0.0.1 à
239.255.255.255)
Pour pouvoir recevoir des datagrammes UDP envoyés grâce au
multicasting IP il faut s’abonner à une adresse multicast
De même lorsqu’on ne souhaite plus recevoir des datagrammes
UDP envoyés à une adresse multicast on doit indiquer la
résiliation de l’abonnement.
public void joinGroup(InetAddress adresseMulticast) throws
IOException et void leaveGroup(InetAddress adresseMulticast);
KACIMI Lamine / 2014145
Threads, IntroductionPro
gra
mm
atio
n c
on
cu
rre
nte
Un thread est une unité d'exécution au sein d'un même
processus (ce n'est pas un autre processus).
Tous les threads d'un même processus partagent la même zone
mémoire.
La programmation multithreads donne l'illusion de la simultanéité.
La gestion des threads est dépendante de la JVM
(problème pour la portabilité). Les threads peuvent être
préemptifs ou coopératifs.
KACIMI Lamine / 2014146
Threads, IntroductionPro
gra
mm
atio
n c
on
cu
rre
nte
Un thread possède un nom et une priorité.
Un thread s'exécute jusqu'au moment où:
• Un thread de plus grande priorité devient exécutable.
• Une méthode wait (), yield () ou sleep () est lancée.
• Son quota de temps a expiré dans un système préemptif.
KACIMI Lamine / 2014147
Création de threadsPro
gra
mm
atio
n c
on
cu
rre
nte
Une classe est un thread si elle remplit une des deux
conditions:
•Elle étend la classe java.lang.Thread
•Elle implémente l'interface java.lang.Runnable
Le corps du thread est contenu dans une méthode: public
void run ()
Un thread est lancé par appel d'une méthode start ()
KACIMI Lamine / 2014150
La classe java.lang.threadPro
gra
mm
atio
n c
on
cu
rre
nte
start () Rend un thread exécutable en lançant la méthode
run ().
sleep (i) Endort le thread pour i millisecondes.
wait()* Suspend le thread.
notify ()* Place le thread dans un état exécutable.
notifyAll ()* Réveille tous les threads en attente.
yield () Place le thread de l'état « en cours d'exécution » à
l'état « exécutable ».
setPriority (i) Modifie la priorité d'un thread (i est compris entre
MIN_PRIORITY et MAX_PRIORITY).
join ()
join (long)
Pour qu'un deuxième thread attende la fin
d'exécution d'un premier thread, il suffit d'appeler la
méthode join sur le premier thread. Un paramètre
de temps (en millisecondes) peut être spécifié.
KACIMI Lamine / 2014152
Les threads, la synchronisationPro
gra
mm
atio
n c
on
cu
rre
nte
Plusieurs threads accédant à une même donnée doivent être
synchronisés
La synchronisation peut se faire sur un objet (pas de
synchronisation possible pour une variable d'un type de base)
Mot clé: synchronized
Si un thread invoque une méthode synchronized d’un objet,
l’objet se verra verouillé pour toutes ses méthodes synchronized.
KACIMI Lamine / 2014155
Atelier pratiquePro
gra
mm
atio
n c
on
cu
rre
nte
Implémentation d’un serveur multithread qui offre les services
suivants
*. Envoi la date courante
*. Envoi le double de la valeur émanant du client
*. Vos idées?
KACIMI Lamine / 2014157
IntroductionLe
s in
terf
ac
es
gra
ph
iqu
es
• Dans tous les exemples et exercices traités jusque la, nous
avons utilisé la console pour interagir avec le programme
Java
• Pour améliorer l’expérience utilisateur, Java nous offre la
possibilité de développer des interfaces graphiques (les
interactions seront donc assurées avec le clavier et la souris.
• Pour développer des interfaces graphiques, Java dispose de
2 API, à savoir AWT et SWING (Il y a d’autres API mais elles ne
sont pas intégrées à l’API Java – SWT de IBM)
KACIMI Lamine / 2014158
AWT vs SWINGLe
s in
terf
ac
es
gra
ph
iqu
es
• Les deux API font parti de JFC (Java Foundation Classes), en
plus de Java2D, Accessibility, DragAndDrop
• AWT joue le rôle d’un wrapper au composants du Système
d’Exploitation et le rendu est donc OS dépendant –On dit
alors que AWT est heavyweighted
• SWING est une bibliothèque purement JAVA et on peut
donc contrôler le rendu plus facilement.
• AWT existe encore à cause des applets. Mais les applets ne
sont plus d’actualité non plus, (HTML5)
• AWT= Abstract Windowing Toolkit
KACIMI Lamine / 2014159
AWT vs SWING Suite….Le
s in
terf
ac
es
gra
ph
iqu
es
• SWING étend AWT en terme de fonctionnalités – Il y a
toujours un composant SWING équivalent pour un
composant AWT
• SWING offre un set de composants beaucoup plus riche
• AWT était préféré parce que le code généré est plus rapide–
mais grâce à des améliorations au niveau de SWING et au
niveau des machines virtuelles, on peut achever les mêmes
performances avec SWING et c’est donc la bibliothèque la
plus utilisée de nos jours.
• Utiliser donc SWING et non pas AWT
• Faut surtout pas mélanger les deux!
KACIMI Lamine / 2014160
SWINGLe
s in
terf
ac
es
gra
ph
iqu
es
• SWING est une API permettant de créer des interfaces
graphiques en JAVA . (GUI toolkit) | GUI=Graphic User
Interface.
• SWING est développée par SUN microsystems .
• SWING fait partie de JFC
• SWING est:
• Plateforme indépendante
• Personnalisable
• Extensible
• Lightweight (100% en Java)
• SWING: c’est 18 packages….
• SWING offre plusieurs composants (lables, boutons, barres de
déroulement, mais également des tables, des
arborescences.
KACIMI Lamine / 2014162
SWING, Ajouter un bouton à la fenêtre, un bouton avec un ActionListener
Les
inte
rfa
ce
s g
rap
hiq
ue
s
1. Créer un JPanel
2. Mettre le JPanel dans le Jframe
3. Créer un JButton e l’ajouter au Jpanel.
4. Noter l’actionListener, ici ajouté avec une classe anonyme
KACIMI Lamine / 2014163
SWING, Les menus et les barres d’outilsLe
s in
terf
ac
es
gra
ph
iqu
es
1. Pour implémenter les menus et les barres d’outils en Java, on
utilise les classes suivantes:
• JMenuBar
• JMenu
• JMenuItem
KACIMI Lamine / 2014164
SWING, Les menus et les barres d’outilsLe
s in
terf
ac
es
gra
ph
iqu
es
1. Il est possible de créer des sous menus. Un sous menu est
exactement identique au menu et est donc crée de façon
similaire
2. La seule différence est que le menu sera rattaché au JFrame
alors que le sous-menu lui, sera rattaché à un menu existant.
3. Ajouter donc un sous menu dans votre application.
4. Dans le but d’améliorer l’interface, vous pouvez appliquer une
icône à chaque sous menu en utilisant votre propre icône ou
en utilisant des icônes de SWING:
Icon icon =
UIManager.getIcon("OptionPane.informationIcon");
5. Vous pouvez également ajouter des séparateurs à votre menu
en utilisant addSeparator();
KACIMI Lamine / 2014166
SWING, CheckBoxMenuItemLe
s in
terf
ac
es
gra
ph
iqu
es
1. Vous pouvez ajouter à vos menus des liens de menu (Menu
Item) checkbox
JCheckBoxMenuItem sbar = new JCheckBoxMenuItem("Show
StatuBar");
2. Afin de positionner un des menu à droite de la fenêtre, on
appelle
menubar.add(Box.createHorizontalGlue());
Afin de consommer tout l’espace restant.
KACIMI Lamine / 2014167
SWING, Les menus contextuels (JPopupMenu) et les barres d’outils
(JToolBar)Le
s in
terf
ac
es
gra
ph
iqu
es
1. Ces menus sont dits contextuels car ce qu’ils affichent dépend
de l’objet sélectionné.
2. Exemple: Word: le menu contextuel qui s’affiche lorsqu’on
travaille avec un tableau vs celui qui s’affiche lorsqu’on
travaille avec une image.
3. Un exemple sera traité durant le cours.
4. Une Barre d’outils permet de rendre les fonctions récurrentes
plus accessibles.
5. Une JToolBar contiendra des boutons qui lancent plusieurs
fonctions de l’application en réponse au clic.
KACIMI Lamine / 2014168
SWING, JLayoutManagerLe
s in
terf
ac
es
gra
ph
iqu
es
1. FlowLayout manager:
• Chaque composant fils utilise sa taille par défaut
• Les composants sont placés par ligne, passage à la ligne
suivante s’il n y a plus d’espace.
• Les composants sont centrés et il y a un espace de 5px
entre chaque deux composants.
• Ce mamanger dispose de constructeurs permettant de
modifier ce comportement (Alignement des composants
et l’espace laissé entre deux composants successifs)
• Ce manager est celui utilisé par défaut sauf pour JFrame
dont le manager par défaut est de type BorderLayout
KACIMI Lamine / 2014169
SWING, JGridLayout, JBorderLayoutLe
s in
terf
ac
es
gra
ph
iqu
es
1. GridLayout manager:
• Le conteneur sera divisé en plusieurs emplacements
rectangulaires (une grille)
• new GridLayout(lignes, colonnes, Espace H, Espace V)
2. BorderLayout manager :
• Divise l’espace en 05 régions
(NORTH,WEST,EAST,SOUTH,CENTER)
• Chaque région contiendra un seul composant
KACIMI Lamine / 2014171
IntroductionR
em
ote
Me
tho
de
Invo
ca
tio
n
• Les approches traditionnelles pour développer des applications
réseaux à base de sockets sont lourdes. (on vient de le voir)
• Les RMI vont permettre de distribuer une application sur
plusieurs machines.
• Une application fera appel à des méthodes sur des objets
localisés sur des machines distantes.
• RMI se charge de faire transiter les paramètres et la valeur de
retour. Les communications pourront être sécurisées grâce à un
objet RMISecurityManager.
KACIMI Lamine / 2014174
RMI, Stub et SkeletonR
em
ote
Me
tho
de
Invo
ca
tio
n
Stub Skeleton
1. Classe spéciale générée par la
commande rmic.
2. Transforme un appel de
méthode en une suite d'octets
à envoyer sur le réseau
(marshaling).
3. Reconstruit le résultat reçu
sous le même format
(unmarshaling)
Format d'un appel de méthode:
• Identificateur de l'objet distant
• Identificateur de la méthode
• Paramètres sérialisés
1. Classe spéciale générée par
la commande rmic (cette
classe n'est plus générée depuis
la version 1.2 du protocole).
2. Reçoit la demande
d'invocation distante.
Reconstruit les paramètres.
Trouve l'objet distant et appelle
la méthode. Retourne le
résultat.
KACIMI Lamine / 2014177
RMI en pratique, création d’une instance de la classe distante
Re
mo
teM
eth
od
eIn
vo
ca
tio
n
KACIMI Lamine / 2014180
IntroductionA
NT
• Projet du groupe Apache-Jakarta pour permettre la
construction d'applications (compilation, déploiement, ...).
• Site officiel: http://jakarta.apache.org/ant
• Exécution de ant:
ant [-buildfile fichier.xml] [cible]
• Variables d'environnement nécessaires à l'exécution de ant:
ANT_HOME JAVA_HOME PATH
KACIMI Lamine / 2014181
Ant, fichier de configurationA
NT
•Le fichier de configuration propose un ensemble de cibles.
•Une cible contient une ou plusieurs tâches à exécuter.
•Les cibles peuvent être dépendantes entre elles.
KACIMI Lamine / 2014182
Ant, fichier de configuration…suiteA
NT
1. Le fichier de configuration commence par le préfixe:
<?xml version="1.0">
2. La balise racine est le projet: <project>
3. A l'intérieur du projet on trouve:
• Les cibles <target>
• Les propriétés
• Les tâches
KACIMI Lamine / 2014183
Build.xml, la balise projectA
NT
La balise <project> contient des attributs:
• name: nom du projet
• default: détermine la cible par défaut
•basedir: indique le répertoire racine pour tous les répertoires
utilisés par leur nom relatif
• Exemple:
<project name="nomprojet" default="compile" basedir=". ">
KACIMI Lamine / 2014184
Build.xml, les commentairesA
NT
• Les commentaires sont inclus dans les balises <!-- et -->
• Exemple:
<!– ceci est un commentaire-->
KACIMI Lamine / 2014185
Build.xml, les propriétésA
NT
Les propriétés permettent de définir des variables qui pourront
être utilisées dans le projet
Les propriétés peuvent être définies sur la ligne de commande
(option -D) ou par la balise <property>
• Exemple: <property name="repertoire" value="travail"/>
KACIMI Lamine / 2014186
Build.xml, les propriétés prédéfiniesA
NT
basedirchemin absolu du répertoire de travail
(défini dans la balise <project>)
ant.filechemin absolu du fichier de
configuration
ant.java.versionnuméro de version de la JVM exécutant
ant
ant.project.name nom du projet en cours d'exécution
KACIMI Lamine / 2014187
Build.xml, les ciblesA
NT
La balise <target> permet de définir une cible constituée par
un certain nombre de tâches.
• La balise <target> possède plusieurs attributs:
• name : obligatoire. nom de la cible
• description : optionnel. description de la cible
• if : optionnel. conditionne l'exécution à l'existence d'une
propriété
KACIMI Lamine / 2014188
Build.xml, les tâchesA
NT
Une tâche est une unité de traitement à exécuter.
Une tâche est une classe Java implémentant l'interface
org. apache. ant. Task
De nombreuses tâches sont définies dans ant (pour en
connaître la liste il faut se référer à la documentation fournie
avec ant ou à l'adresse http://ant.apache. org/manual/index.
html
Les tâches prédéfinies permettent le développement java, la
manipulation du système de fichiers, des archives, etc.
KACIMI Lamine / 2014189
Build.xml, Exemple completA
NT
<?xml version="1.0"?>
<project name="project" default="runchatclient">
<description> test ant </description>
<property name="src" value="src" /> <property
name="dst" value="classes" />
<target name="chatclient" description="Client chat RMI">
<javac srcdir="${src}/rmichat" destdir="${dst}" /> <rmic
classname="rmichat.ClientRMI" base="${dst}" /> </target>
<target name="runchatclient">
<java classname="rmichat.ChatClient" classpath="${dst}" fork="true" >
<arg value="localhost" />
<sysproperty key="java.security.policy" value="java.policy" />
</java>
</target>
<target name="archive" >
<jar destfile="chat.jar" basedir="${dst}" />
</target>
</project>
Top Related