Vous êtes sur la page 1sur 55

Cours Programmation

Orient Objet

Introduction gnrale
&
historique

Bouhlel Mohamed Salah


2005/2006

Quest-ce que Java ?


z

Proprits de Java
z

Java est un langage de programmation OO.

Simplicit
Simplicit et productivit
productivit
-

z
z

Il a t dvelopp par SUN.


Objectif:
z
z
z

Syntaxe proche du C/C++


limination de la notion de pointeur, structure
structure

Ex
Excution standardis
standardis des programmes.
Maintenance simplifi
simplifi.
Ind
Indpendance visvis--vis des plateformes.

Int
Intgration compl
complte de llOO

Distribu
Distribu
-

z
z
z
z

Un langage de programmation.
La Java Virtual Machine .
Des interfaces de programmation d
dapplication (Java API)
Un ensemble d
doutils permettent la mise en uvre de solution
logicielle. (javadoc
(javadoc,, rmi,
rmi,)

Bouhlel Mohamed Salah

Cours POO

Interpr
Interprt
-

Java est une plateforme, elle est constitu de :


z

Un programme java n
nest pas compil
compil en code machine mais
transform
transform en code interm
intermdiaire interpr
interprt.

Gestion m
mmoire (
( Garbage collector )
-

La manipulation d
dobjet locaux ou distribu
distribu se fait de la mme fa
faon.

Un syst
systme de ramasse miette permet de d
dcharger le programme
dune gestion fastidieuse de la m
mmoire.

Bouhlel Mohamed Salah

Cours POO

Proprits de Java
z

Langage fortement typ


typ.
Interdiction de conversion de type impliquant une perte de pr
prcision.

Ouverture
-

Portabilit :

Robustesse, fiabilit
fiabilit et s
scurit
curit
-

Proprits de Java

Support int
intgr
gr dInternet
Connexion int
intgr
gre aux bases de donn
donnes (JDBC)
Support des caract
caractres internationaux
Distribution et aspects dynamiques
Performance

Dynamique et mutithread
-

Les classes sont charger au fur et a mesure des besoins.


Mise jour de llapplication peut se faire classe par classe.
Gestion multithreading simple : couter de la musique en voyant une
animation flash.

MonProg.java

Le compilateur Java g
gnre un
bytecode,
bytecode, c
cest dire un format
interm
intermdiaire, neutre
architecturalement, con
conu pour
faire transiter efficacement le
code vers des hardware
diff
diffrents et/ou plateformes
diff
diffrentes.

Compilateur java

MonProg.class
= bytecode

Le bytecode ne peutpeut-tre
interpr
interprt que par le
processeur de la JVM

JVM

JVM

MAC

Windows

JVM
UNIX

La devise de java : crire une fois , excuter partout


Bouhlel Mohamed Salah

Cours POO

Dploiement dun programme (1/2)


Paradigme classique de la compilation

Bouhlel Mohamed Salah

Cours POO

Dploiement dun programme (2/2)


Paradigme classique de la compilation
z

MonProg.c

Chaque programme est compil et interprt


Write once run everywhere
MonProg.java

Excut une seule fois


Mais diffrent pour
chaque environnement

Compilateur

Gnre du code natif directement


excutable, mais spcifique
chaque environnement

Excut une seule fois

Compilateur

Traduit le programme en un code


intermdiaire
Appel bytecode indpendant de la
machine

MonProg.class

MonProg.o
Chaque fois que le
programme est excut

010110

Interprteur

Lit le bytecode et lexcute sur la


machine

010110
Bouhlel Mohamed Salah

Cours POO

Bouhlel Mohamed Salah

Cours POO

La plateforme Java
z

Plateforme = environnement hardware ou software sur lequel le


programme est ex
excut
cut.

La Java Platform se compose de:


z

Version

Nbr
classes

Nbr
packages

1.0

212

1.1

504

23

La machine virtuelle JAVA (JVM)


z

Versions de Java

Une fois le programme java compil


compil et converti en ByteByte-Code, c
cest la JVM qui est
capable d
dinterpr
interprt et de permettre au processeur d
dex
excuter ce code.

-Classe

interne
plus performante
-Int
Intgrationaux navigateur Web.
-JVM

Les interface de programmation d


dapplication (API)
z

nouveaut
nouveaut

1.2

Ensemble de classe pr
prdfinit de java qui existe dans chaque installation.
Elles sont organis
organises sous forme de package. (E/S, Swing, Awt
Awt)

1520

59

-Swing
-Collections

1.3

1842

76

-Java

SOUND

-JNDI

1.4

2991

135

-E/S

bas niveau
(SAX/DOM)
-SSL, Image,
-XML

Bouhlel Mohamed Salah

Cours POO

Bouhlel Mohamed Salah

Cours POO

10

Commentaires
z

Chapitre 1

lments de base du
langage JAVA

Trois notations sont admises pour linsertion de


commentaire :

// commentaire sur une ligne.

/* commentaire sur
plusieurs
lignes */

/** commentaire dexplication utilis par javadoc


sur une ou plusieurs lignes */

Bouhlel Mohamed Salah

Cours POO

12

Points virgules, blocs et blancs

identificateurs

Toute instruction doit se terminer par un point virgule ;

Un bloc est une suite dinstruction dlimit par { et }.

Les blancs sont autoriss entre les lments du code


sources. (espace, tabulation et saut de ligne)

Un identificateur dsigne tout objet que le programmeur


souhaite manipuler.

Un identificateur java commence par une lettre, un trait


de soulignement _ ou le signe dollars $ .

Les caractres suivant de lidentificateur peuvent


contenir des chiffres.

Il y a une distinction entre majuscule et minuscule.

Exemple:

Exemple:
{
x=2;
y=10;

{x=2;y=10;}

}
Bouhlel Mohamed Salah

z
Cours POO

13

Mots rservs / cl

MaClasse,
MaClasse, _maVariable,
_maVariable, $maFonction
$maFonction,, C1, (Valide)
Valide)
1var, -maclasse, fonctionfonction-recherche, (non valide)
valide)

Bouhlel Mohamed Salah

Cours POO

14

Types de donnes

Ce sont des identificateurs prdfinis et ont un sens bien dfinit.

Java prend en comptes les types de donnes suivant :


1. Les types primitifs

Abstract
double
int
boolean
else
interface
break
extends
long
byte
final
native
synchronized
case
finally
new
catch
float
package
char
for
private
class
goto
protected
const
if
public
continue
implements return
default
import
volatile
do
instanceof static
Bouhlel Mohamed Salah

Cours POO

strictfp
super
switch

2. Les chanes de caractres : Pour manipuler les chanes de


caractres Java offre une classe appele String. Une constante
chane de caractres est place entre doubles cotes.

this

3. Les types par rfrences : Contrairement aux types primitifs qui


possdent des tailles standard et fixes, un type tableau ou un type
classe ne peut pas avoir une taille standard. Au lieu de manipuler
directement un objet de la classe ou un objet tableau, Java
manipule une autre donne qui reprsente une rfrence lobjet
manipul. Pour cela classes ou types tableau sont appels des
types rfrences.

throw
throws
transient
try
void
short
while
15

Bouhlel Mohamed Salah

Cours POO

16

Types primitifs
z

Types primitifs

Catgorie logique : Type boolean


en java, un boolean nest pas considr comme une valeur
numrique. Seules valeurs possibles sont true ou false.
exemples:
boolean trouve=true;
Catgorie caractre : Type char
le type char permet de reprsenter les caractres isols
(cest un caractre Unicode reprsent sur 16 bits). Elle est
dlimit par deux apostrophes.
exemples:
char x=a; char omega=(char) 969;
char z=\u1200

Bouhlel Mohamed Salah

Cours POO

17

Types primitifs
z

Cat
Catgorie entier : types byte, short, int et long
il existe 4 types d
dentiers en java.
chaque type est d
dclar
clar avec llun des mots cl
cls byte, short, int et long.
Taille

Intervalle

byte

1O

-2exp7 .. (2exp7) -1

short

2O

-2exp15 .. (2exp15) -1

int

4O

-2exp31 .. (2exp31) -1

long

8O

-2exp63 .. (2exp63) -1

Exemple:
Int x=2;
Long y=3L;
Bouhlel Mohamed Salah

Cours POO

18

Dclaration et affectation

Catgorie flottant : type float et double


une constante numrique est flottante si elle contient un
point dcimal, une partie exponentielle lettre E ou si elle
sont suivit par la lettre F ou D.

int x=0, y=0;


float z=2.3F;
double t=2.3;
char c=
c=r;

2.3F
2.3
2.3E4
4F

Remarque : les expression littrale flottante sont de type


double sauf si elles sont explicitement suivit par la lettre
F.
Cours POO

La d
dclaration et llaffectation s
seffectue de mani
manire similaire au C.
Exemple :

Exemple :

Bouhlel Mohamed Salah

Type

19

Quand une constante est d


dclar
clar avec le modificateur final,
final, elle ne
peut plus tre modifier cest une constante nomm
nomme.
il est alors obligatoire de llinitialiser dans sa d
dclaration.
Exemple :
final double PI=3.14;

Bouhlel Mohamed Salah

Cours POO

20

Les expressions en java


Les oprateurs

Conversion de type
z

Si dans une expression les op


oprandes sont de diff
diffrents type le r
rsultat est
alors convertis vers le type le plus grand.
Exemple :
int x=2; long y=4, z;
z=x*y; //le r
rsultat est alors convertis en long

Pour llaffectation, la donn


donne a droite est convertie dans le type de celle de
gauche. Si le type de la destination est plus faible llinstruction est consid
considr
erron
errone.
Exemple :
int i=2; long x=5;
x=i; //instruction l
lgale
i=x; // instruction erron
errone

Voir document liste des oprateurs

On peut convertir explicitement une valeur en for


forant la transformation. Le
type cibl
cibl est plac
plac entre () et est utilis
utilis comme pr
prfixe de llexpression dont
on veut modifier le type.
<nom_variable>
nom_variable> = (<type>) <expression>
Exemple :
float z;
int x;

Bouhlel Mohamed Salah

Cours POO

21

Les structures de base


Structure alternative : if..else
z

if (<expression bool
boolenne>)
{
//instruction ou bloc d
dinstruction a ex
excuter si condition= vrai.
}
else
{
//instruction ou bloc d
dinstruction a ex
excuter si condition= faux.
}

Exemple :
int i=2; boolean fin;
if(i<0)
{fin=true
{fin=true;; i=0;}
else i++;
Bouhlel Mohamed Salah

Bouhlel Mohamed Salah

Cours POO

22

Les structures de base


Structure alternative : switch

La partie else est optionnelle et peut tre omise s


sil n
ny a pas d
dactions a
effectuer lorsque la condition est fausse.
z

z=(float
z=(float)) 14.33;
x=(int
x=(int)) z; //x contient la valeur 14

switch (<expression >)


{
case <valeur 1> :
case <valeur 2> :

case <valeur n> :


default : <bloc n+1>
}

<bloc 1>
<bloc 2>

break;
break;
break;
break;

<bloc n>

break;
break;

lexpression du switch doit tre de type compatible avec un entier. Les


expression en flottant ou en double ne sont pas permises.
la sp
spcification du break sont n
ncessaire pour g
grer les ruptures de
squences.

Cours POO

23

Bouhlel Mohamed Salah

Cours POO

24

Les structures de base


Structure alternative : switch
Exemple:
int k=0, i=2;
switch(i)
{

Les structures de base


Oprateur ternaire
varaiable = condition ? si_test_vrai : si_test_faux ;

Exemple:
int k=0, i=2;
switch(i)
{

case 1: k+=20; break;


case 2: k+=2; break;
case 3: k+=10; break;

Cest quivalent :
If(codition)
si_test_vrai
Else
si_test_faux

case 1: k+=20;
case 2: k+=2;
case 3: k+=10;

}
k=2

Bouhlel Mohamed Salah

Exemple:
int a=1,b=3;
int min=(a<b)?a:b; //parenthse facultatives

K=?

Cours POO

25

Les structures de base


Structure rptitive : while

Bouhlel Mohamed Salah

do
{

Exemple:

Exemple:

<instruction ou bloc>
}
while (<expression_bool
enne>)
(<expression_bool
enne>);;

int i=10;
System.out.println(
);
System.out.println(je
je sais compter jusqu
jusqua 10 a llenvers
envers);
do
{
System.out.println(i);
i--;
--;
}
while(i>=0);
while(i>=0);

int i=0;
System.out.println(
);
System.out.println(je
je sais compter jusqu
jusqua 10
10);
while (i<10)
{
System.out.println(i);
i++;
}
Cours POO

26

Les structures de base


Structure rptitive : do .. while

while (<expression_boolenne>)
{
<instruction ou bloc>
}

Bouhlel Mohamed Salah

Cours POO

27

Bouhlel Mohamed Salah

Cours POO

28

Les structures de base


Structure rptitive : for

Convention dcriture
z

for (
<initialisation> ; <expression_boolenne> ; <incrmentation> )
{
<instruction ou bloc dinstruction>
}

z
z
z

Exemple:

for (int
(int i=0;i<=10;i++)
System.out.println(i);

for ( ; ; ) boucle infinie

Bouhlel Mohamed Salah

Cours POO

29

Classes
class BankAccount, class RacingBike
Interfaces
interface Account
Mthodes
deposer() getName()
Packages
package coursJava
Variables
int accountNumber, int x
Constantes
MAXIMUM_SIZE

Bouhlel Mohamed Salah

Cours POO

30

Comment dvelopper une application?


Deux faons dcrire des programmes Java:
z

En crivant le code dans un simple diteur de texte


z

Premier Programme JAVA

Compilation et ex
excution du code en ligne de commande DOS

En utilisant un environnement de dveloppement (IDE)


z
z
z
z
z
z
z

Netbeans (http://www.netbeans.com
(http://www.netbeans.com )
Borland JBuilder (http://www.borland.com/jbuilder
(http://www.borland.com/jbuilder )
IBM WebSphere Studio (http://www.ibm.com/software/awdtools
(http://www.ibm.com/software/awdtools
Sun ONE Studio (http://wwws.sun.com/software/sundev
(http://wwws.sun.com/software/sundev))
Microsoft .Net Studio (http://msdn.microsoft.com/vstudio
(http://msdn.microsoft.com/vstudio))
Jcreator

Bouhlel Mohamed Salah

Cours POO

32

Une premire application


Application HelloWorld
z

Crer un fichier : HelloWorld.java


La premire ligne du programme doit tre
la dclaration de la classe

public class HelloWorld


{
public static void main (String[]args)
{
System.out.println("Hello the World");
}

Chapitre 2

Les principes de la
programmation Objet

Tout programme doit contenir une mthode


main qui porte la signature ci-contre
crire lcran Hello the World

Fermer les accolades

Objet, classe

Compiler le programme : javac


HelloWorld.java
Le compilateur gnre le bytecode dans le fichier : HelloWorld.class
Excuter lapplication : java
HelloWorld
Hello the World saffiche lcran
Bouhlel Mohamed Salah

Cours POO

33

Notion dobjet

Notion dobjet

Cest une notion trs proche de celle de la vie courante. On


reprsente en permanence le monde qui nous entour sous
forme dobjet plus ou moins abstrait (chaise, table,stylo,
voiture, animaux...).

Un objet est dfinit de la manire dont on peut


interagir avec lui et cela en fonction du problme
rsoudre.

Cette vision dun objet peut tre diffrente en fonction de nos


besoins :

Il correspond a un certain niveau dabstraction de la


ralit et est reprsent essentiellement par les
services quil peut nous rendre.

Nous faisons tous en permanence un tel travail


dabstraction pour pouvoir voir et comprendre
simplement le monde qui nous entour.

Un conducteur voit une voiture comme un ensemble complexe de


commande pour la faire avancer, diriger et interagir avec d
dautres
vhicules.
Un policier voit un ensemble de v
vhicule comme un ensemble d
dobjet
qui doivent respecter des r
rgles de circulation. (camion ou voiture
sont de mme type)
Un garagiste voit un v
vhicule comme tant un ensemble d
dobjets qui
interagissent entre eux.

Bouhlel Mohamed Salah

Cours POO

35

Bouhlel Mohamed Salah

Cours POO

36

Encapsulation, mthodes et invocation

Encapsulation, mthodes et invocation

Un objet est une boite noire qui offre un certain nombre de


fonctions ou mthodes permettant dinteragir avec lui. Peut
importe comment il est construit de manire interne.

La seule chose ncessaire pour pouvoir utiliser un objet est


savoir ce quil peut faire et surtout comment le lui demander.

Ex: un poste de tl est une boite noir ayant pour interface :


une tlcommande , cran, haut parleurs. Pour changer de
chane il suffit de demander a la boite noire de le faire pour
nous en appuyant sur un bouton.

Lensemble des mthodes proposes par un objet est


appel interface de lobjet.
Bouhlel Mohamed Salah

Cours POO

On dit qu
quun objet est encapsuler par son interface la seule fa
faon de
communiquer avec cet objet et d
dinvoquer une des m
mthodes de son
interface.

Lencapsulation d
dun objet par son interface permet de masquer son
contenu possibilit
possibilit de modifier son contenue sans impacte pour le
reste du monde.

Lencapsulation constitue un des points centraux de llapproche objet. En


faisant cela on dit a llobjet ce qu
quil doit faire et non comment il doit le
faire.

Ex: si on freine avec la voiture on ce contente d


dappyer sur la p
pdale
(m
(mthode freinage). Peut importe s
sil sajit dun frein a disque ou abs
abs

Ex:un policer invoque la m


mthode arrter en levant la main et il ne
soccupe pas de la mani
manire dont chaque v
vhicule s
sarrte.

37

Niveau dabstraction et classes dobjets

Bouhlel Mohamed Salah

Plusieurs niveaux dabstractions sont possible


lorsque lon reprsente un certain objet rel.

Ex: lorsquon regarde une table de cuisine, on fait


gnralement abstraction des lments qui la
compose physiquement pour ne voir que lobjet de
notre cuisine qui permet de ranger les couverts et
servir de support pour nos repas.

Une table de cuisine est une table qui possde des


caractristiques spcifiques. On dit que la classe des tables
de cuisine est une classe fille de la classe des tables et
quelle hrite des caractristiques de cette classe tout en la
spcialisent par lajout de nouvelle fonctionnalits.

Une classe fille est dfinie partir de sa mre par hritage


(rutilisation de ce qui est dj dfini) et spcialisation (ajout
de nouvelles fonctionnalits).
Meubles
Tables

Table de cuisine
Cours POO

38

En fait on range implicitement cette table de cuisine


particulire instance dans lensemble le plus
grand de celui des tables de cuisine ayant les
mme fonctionnalits classe .
Bouhlel Mohamed Salah

Cours POO

Niveau dabstraction et classes dobjets

39

Bouhlel Mohamed Salah

Chaises

Table de salon
Cours POO

40

Polymorphisme
z

Objets, Classes

Cest un mot Greg plusieurs formes .

Qu
Quest ce qu
quun objet?
z

Signifie quune mthode peut tre dfinit dans plusieurs


classe et que chaque classe peut implmenter (raliser)
cette mthode a sa manire.

Ex: lorsquon freine dans une voiture, on sais que la fonction


attendue est de stopper le vhicule. En fonction du type rel
de vhicule (de sa classe plus spcifique) les actions relle
sont trs diffrentes (abs, tambours,). Le conducteur na
pas besoin de ce niveau de dtail pour savoir sarrter.

Bouhlel Mohamed Salah

Cours POO

Attributs typ
typs.
Mthodes.
Identit
Identit, pour le distinguer des autres objets.

Exemple:
z

On peut mod
modliser une personne par llobjet Personne. Les attribut sont alors
les information concernant la personne (nom, pr
prnom, DN,
DN,). Et comme
mthode on aurais par exemple calcul_Age,
calcul_Age, calcul_salaire
calcul_salaire

Bouhlel Mohamed Salah

Cours POO

42

Objets, Classes

Qu
Quest ce qu
quune classe?
z Cest une description d
dun ensemble d
dobjets ayant des propri
proprits et
des comportements commun.
z Les objets sont a lors des repr
reprsentations dynamique (ou
instanciation ) vivante du mod
modle d
dfinit pour eux au travers de la
classe.
Une classe en java est d
dfinie en pr
prcisant son nom, en d
dclarant ces
attributs et en d
dfinissant ses m
mthodes.

Syntaxe:
Class nom_classe
{
// d
dclaration des attributs
// d
dclaration des m
mthodes
}
z

Bouhlel Mohamed Salah

41

Objets, Classes

Un objet est caract


caractris
ris par :
z

Cest llunit
unit de base de la conception OO.
Il regroupe a la fois des donn
donnes et des op
oprations qui permettent de
manipuler ces derni
dernires.
Les donn
donnes sont g
gnralement appel
appel attributs et les op
oprations sont
appel
appeles mthode.
thode.

Cours POO

43

Exemple:
Class Rectangle
{
//declaration
//declaration attributs
int long;
int larg;
larg;
// autres attributs eventuels
//declartion
//declartion des fonctions
void allongerRectangle(
allongerRectangle(int lg)
{ longueur+=lg;}
//
// autres m
mthodes
}

Bouhlel Mohamed Salah

Cours POO

44

Objets, Classes
z

Objets, Classes

Dclaration des attributs

Cration et initialisation des objets

[<modificateur_visiblit
>] <type> <nom>[=<expression>]
[<modificateur_visiblit
public int x;
public int y=34;
private int z=2;
z

1.

Dclarer une variable de la classe que lon dsire


instancier. Cette variable nest pas lobjet lui-mme
mais une rfrence cet objet.
Ex: Rectangle r1; // r1 ??

2.

Allouer lespace mmoire ncessaire lobjet et


renvoyer ladresse de lobjet la variable rfrence.
Cette opration ce fait a laide de loprateur new au
quel on passe le nom de la classe.
ex : r1= new Rectange();

Dclaration des mthodes


[<modificateur_visiblit
>] <type_retour
> <nom>([<arguments>])
[<modificateur_visiblit
<type_retour>
{
// declaration variable
// les instructions
}
Bouhlel Mohamed Salah

Cours POO

45

Objets, Classes

46

Constructeur de classe

Un constructeur est une mthode particulire appele


au moment de la cration dun objet. Son role est
dinitialiser lobjet en fonction des paramtres fournis
par lutilisateur.
Le nom du constructeur doit correspondre au nom de la
classe sans aucun type de retour.
Ex:
Rectangle(int lg,int larg) {
longueur=lg; largeur=larg;
}

Bouhlel Mohamed Salah

Cours POO

Objets, Classes

Constructeur de classe

Bouhlel Mohamed Salah

Cours POO

47

Une classe peut avoir plus qu


quun constructeur

Ex:
Rectangle (int
(int lg,int larg)
larg) {
longueur=lg; largeur=larg
largeur=larg;;
}
Rectangle () {
longueur=0; largeur=0;
}

Toute classe comporte au moins un constructeur. En effet, si aucun


aucun
nest pr
prciser on a le constructeur par d
dfaut.

Bouhlel Mohamed Salah

Cours POO

48

Objets, Classes

Objets, Classes
Contrle daccs au membre :

Utiliser un objet
z

Lacc
accs a un attribut dans une classe se fait toujours a llint
intrieur
dune m
mthode. Cette m
mthode peut intervenir a la classe elleellemme ou a autre classe.
z Si l
lacc
accs se fait de llext
extrieur de la classe, alors on cr
cre un objet
de la classe puis on applique cette syntaxe:
<nom_Objet>.<
Nom_Attribut>
>
nom_Objet>.<Nom_Attribut
z

Invocation dune mthode :


z
z

Mme principe. A llint


intrieur de la mme classe c
cest llappel
directe : <nom_m
thode>(<
liste_arguments>);
>);
<nom_m
thode>(<liste_arguments
si a llext
extrieur de la classe on utilise un objet.

Bouhlel Mohamed Salah

Cours POO

49

Objets, Classes

z
z

==: teste si 2 r
rfrences d
dsignent le mme objet.
!= : teste si 2 r
rfrence ne d
dsignent pas le mme objet
instanceof : retourne true si llobjet gauche est une instance de la classe plac
plac
sa droite ou si la comparaison est faite entre un objet d
dune classe impl
implmentant
une interface . Sinon il retourne false.

z Ex :
Class Rectangle
{ private int longueur;
longueur; private int largeur;
largeur;
// d
dclaration des m
mthodes
thodes
}
Class Test
{public static void main (String[] args){
args){
Rectangle r=new Rectangle();
boolean val1=r instanceof Rectangle;//val=true
Rectangle;//val=true
boolean val2=r instanceof Test;//val=false
}}
Bouhlel Mohamed Salah

Cours POO

50

La r
rfrence this :

Ce sont les variables qui permettent de d


dsigner et manipuler les objets.
Les seuls op
oprateurs sur les r
rfrences sont des op
oprateurs logiques:
z

Bouhlel Mohamed Salah

Objets, Classes

Les r
rfrences :
z

Lacc
accs aux membre (donn
(donnes et m
mthodes) d
dune classe peut tre
contrl
contrl. En effet, llutilisation du modificateur d
dacc
accs private
pour un membre rend impossible tout acc
accs ce membre partir de
lext
extrieur.
z Ex :
Class Rectangle
{ private int longueur;
longueur; private int largeur;
largeur;
// d
dclaration des m
mthodes
thodes
}
Class Test
{public static void main (String[] args){
args){
Rectangle r=new Rectangle();
r.longueur=10; //instruction ronn
ronn}}
z

Accs a un attribut :

Cours POO

Le mot cl
cl this repr
reprsente une r
rfrence sur llobjet courant (celui qui est
entrain d
dex
excuter la m
mthode contenant le this).
this).
La r
rfrence this peut tre utile :
z
z

Lorsqu
Lorsquune variable locale ou param
paramtre cache, en portant le mme nom, un
attribut de la classe.
Pour d
dclencher un constructeur depuis un autre constructeur.

Ex :
Class Date
{
z

int jour=1, mois=1, an=1990;


Date()
{an=2000; /* peut s
crire : this.an=2000*/}
scrire
Date(int
Date(int an)
{this.an=an; /* le param
paramtre en cache llattribut an*/}
Date(int
Date(int an, int mois, int jour)
{this.jour=jour;
this.mois=mois;
this(an);
this(an); /* Appel du deuxi
deuxime constructeur*/}

}
51

Bouhlel Mohamed Salah

Cours POO

52

Objets, Classes

Objets, Classes

La r
rfrence null :
z Le mot cl
cl null permet de repr
reprsenter la r
rfrence qui ne repr
reprsente
rien.
z On peut assigner cette valeur a n
nimporte quelle variable ou attribut
contenant une r
rfrence.
z Cest aussi la valeur par d
dfaut d
dinitialisation des attributs
repr
reprsentant des r
rfrences.
z Ex :
Class Test
{
Voiture v1; //initialisation a null par dfault.
fault.
void methode()
methode()
{

if (v1==null
(v1==null)) v1=new Voiture();

}
}
Bouhlel Mohamed Salah

Cours POO

53

Objets, Classes

Java ne transmet les arguments de type simple que par valeur


largument ne peut tre modifi
modifi par la m
mthode appel
appele.
Si une instance d

un
objet
est
transmise
comme
argument a une
d
mthode. Le contenue de llobjet peut tre modifi
modifi dans la m
mthode
appel
appele et non sa r
rfrence.
Ex :

class Test
{ int val=11;
public void modif(
modif(int n)
{ n=22; }
public void modifObj(Test
modifObj(Test obj)
obj)
{ obj.val=22; }
public static void main(String a[])
{
Test t=new Test();
int n=0;
t.modif(n); System.out.println(n);
System.out.println(n); //n=0;
t.modifObj(t); System.out.println(t.val);
System.out.println(t.val); //val=22
}
}
Bouhlel Mohamed Salah

Java permet de rutiliser un mme nom de mthode pour


plusieurs fonctionnalits. On dit que la mthode est
surcharge.
z Ex :
Une mthode qui permet laffichage de son argument.
z

void print(
print(int)
int)
void print(
print(float)
float)
void print (double)
z

Les mthodes surcharger sont soumise a certaines


rgles:
z
z

Arguments suffisamment diff


diffrent (nombre et/ou type)
Le type de retour des m
mthodes surcharg
surcharges peut tre diff
diffrent
mais cette diff
diffrence a elle seule n
nest pas suffisante.

Bouhlel Mohamed Salah

Cours POO

54

Objets, Classes

Passage de paramtre des mthodes:


z

Surcharge des mthodes :

Cours POO

55

Attributs de classe:
Cest un attribut marqu par le mot cl static.
z Le mot cl static , utilis pour un attribut, permet
dindiquer que cet attribut est commun a tous les objets
de la classe concerne si on modifie cet attribut pour
un objet donn, il sera modifi pour tous les objets de la
classe.
public static void main (String[] args){
z Ex :
Voiture V1=new Voiture();
class Voiture
Voiture V2=new Voiture();
{ static int count =0;
System.out.println(V1.count);
V1.count=55;
int id;
System.out.println(V2.count);
voiture(){
Voiture.count=22;
count++;
System.out.println(V1.count);
id=count;
}
}
}
z

Bouhlel Mohamed Salah

Cours POO

56

Objets, Classes

Objets, Classes
Mthodes de classe:

Attributs de classe:
z On

accde a un attribut statique :

z Via

une instance quelconque de la classe :


V1.id
z Via le nom de la classe : Voiture.id

peut associer static a final pour un


attribut constant et commun a tous les
objets de la classe.
final static float PI=3.14F;

Une mthode de classe est une mthode de type static.

Une mthode de classe est une mthode dont les actions


concernent la classe entire.

Une mthode statique ne peut accder quau attribut


statique de la classe.

On peut invoquer une mthode statique soit :

z On

Bouhlel Mohamed Salah

Cours POO

z
z

57

Objets, Classes

Bouhlel Mohamed Salah

Cours POO

58

Objets, Classes

Mthodes de classe:
z Ex :
class MathTool
{ final static double PI=3.14;
static double getPI()
{return(PI);}

class Test
{
void methode1()
{
double i =
MathTool.power(6);
}
static double diametre(double
diametre(double rayon)
void mthode2()
{return(2*PI*rayon);}
{
static double power(double x)
MathTool t=new
{return (x*x);}
MathTool
();
}
double i = t.power(6);
}
}
Bouhlel Mohamed Salah

Sur la classe elleelle-mme


Sur un objet de cette classe

Cours POO

59

Mthodes de classe:
z

Une mthode statique ne peut pas avoir de


rfrence this car elle peut tre appel sans
lintermdiaire dun objet.

On utilise gnralement des mthodes static pour


rassembler un ensemble doutil sur un certain objet.

La mthode main est une mthode de classe, elle


est la premire a tre appele quand on lance la
JVM avec sa classe. La mthode main peut tre
lance sans quaucune instance de la classe qui la
contient nexiste.

Bouhlel Mohamed Salah

Cours POO

60

Les tableaux
z

En java le type tableau est assimilable une classe et


un tableau est un objet rfrenc.

Un objet tableau ne rfrence pas lobjet lui-mme


mais uniquement ladresse mmoire a qui il fait
rfrence.

Dclarer un tableau en java revient a rserver de la


place mmoire pour ladresse de ce tableau.

Pour crer un tableau il faut lui allouer lespace


mmoire ncessaire aprs lavoir dclar.

Chapitre 3

Tableaux et chanes de
caractres

Bouhlel Mohamed Salah

Les tableaux

62

Les tableaux
Tableau une dimension

Tableau une dimension


z

Dclaration :
<type> <nomTableau>[ ]; ou
<type> [ ]<nomTableau>;

Exemples:
Int notes[]; // tableau entiers
char[] lettres; //tableau de caractres
short t1[100]; //instruction illgale car il nest pas
//possible de dfinir un tableau de
//taille fixe la dclaration.

Bouhlel Mohamed Salah

Cours POO

Cours POO

Cr
Cration :
la d
dclaration ne fait que r
rserver llespace m
mmoire allant
contenir lladresse du tableau. Cette place m
mmoire est
identifi
identifi par le nom du tableau.
lallocation de la place m
mmoire se fiat par le mot cl
cl new :
<nomTableau>
nomTableau> = new <Type>[<dimension>];

Exemple :
notes = new int[3];
int[3];

Ox123

notes
Ox123

63

Bouhlel Mohamed Salah

Cours POO

64

Les tableaux

Les tableaux

Tableau une dimension


z

Tableau une dimension

Initialisation:
Lorsqu
Lorsquun tableau est cr
cr.. Chacun de ces lments est
initialis
initialis. Cette initialisation se fait a 0 si les lments sont
des entiers ou des r
rels. A false s
sils sont des bool
boolens et a
null sinon.

lacc
accs un lments du tableau se fait en mettant llindice de
cet lment entre crochets. Par ailleurs si on essaie d
dacc
accd
un lment qui ce trouve en dehors des bornes du tableau
une erreur sera g
gnre.

Exemples:
int tab={3, 5, 7}; // c
cest quivalent a faire
int tab=new int[3];
int[3]; tab[0]=3; tab[1]=5; tab[2]=7;
z

La longueur d
dun tableau peut tre obtenue partir de la
variable membre length.
length.
<nomTableau>.
length
nomTableau>.length

Bouhlel Mohamed Salah

Cours POO

65

Les tableaux

Utilisation:
in[] tab=new int[10];
int[10];
tab[0]=1;
tab[10]=2;// erreur la compilation

Bouhlel Mohamed Salah

Cours POO

66

Les tableaux

Tableau deux dimensions


Un tableau a 2 dimensions est tableau dont chaque
composantes est forme par un tableau.
z

Dclaration & cr
cration:
<type> [ ][ ]<
]<nomTableau>=new
nomTableau>=new <type> [N1][ ];
];
<nomTableau>[0]=new
nomTableau>[0]=new <type>[N21];
<nomTableau>[0]=new
nomTableau>[0]=new <type>[N22];
];

Exemples:
Int[][] notes=new int[3][];
int[3][];
notes[0]=new int[3];
int[3];
notes[1]=new int[2];
int[2];
notes[2]=new int[1];
int[1];

Bouhlel Mohamed Salah

Utilisation:
le premier lment d
dun tableau commence a llindice 0 et le
dernier lment a llindice nn-1 (n le nombre d
dllments du
tableau).

Cours POO

Tableau une dimension

67

Dclaration & cr
cration:
si le tableau a deux dimension est rectangulaire, on peut le
cr
crer comme suit :
<type>[][]<nomtableau
>=new<type>[N1][N2];
<type>[][]<nomtableau>=new<type>[N1][N2];
N1: nombre de tableautableau-lment.
N2: nombre d
dllment de chaque tableautableau-lment.

Exemple :
cr
crer une matrice carr
carr :
int [][] matrice= new int[2][2];
int[2][2];
matrice[0][0]=1;
matrice[0][1]=1;
matrice[1][0]=1;
matrice[1][1]=1;

Bouhlel Mohamed Salah

Cours POO

68

Les tableaux

Les tableaux
Exercice :

Tableau une dimension

1. crire une m
mthode qui permet de faire un affichage de ce genre:

z Le

nombre de tableau-lment peut tre


obtenue en utilisant la variable length.

z Exemple:

int[][] tab={{1,0,9},{2,8},{8,5,7}};

tab.length3
tab[1].length2
Bouhlel Mohamed Salah

2. crire une m
mthode qui permet de calculer la somme et la diff
diffrence
de deux matrices pass
pass en param
paramtre.

Cours POO

69

Les chanes de caractres

String est une classe qui est fourni avec lAPI Java, elle
dcrit des objets qui contiennent une chane de caractre
constante et permet un traitement trs riches des chanes
de caractres.
Elle dispose des oprateurs + ou += pour concatnation
des chanes de caractres.
Exemple:
String s=il est beau java;
Cours POO

Cours POO

70

Les chanes de caractres

Le type String (chane) sert a reprsenter des squences


de caractre. Une chane constante est dlimit par des
guillemets.

Bouhlel Mohamed Salah

Bouhlel Mohamed Salah

71

Quelques mthodes de la classe String:

int length()
length() : retourne le nombre de caract
caractre de la cha
chane.

int indexOf(char
indexOf(char c, int i) : retourne la position du caract
caractre c
partir de la position i.

String substring(
substring(int i, int j): retourne une cha
chane extraite de la
cha
chane sur laquelle est appliqu
applique la m
mthode en partant de la
position i a la position j.

boolean equals(String
equals(String s) : effectue la comparaison
smantique de 2 cha
chanes.

char charAt(
charAt(int i) : retourne la caract
caractre qui se trouve la
position i.

Bouhlel Mohamed Salah

Cours POO

72

Hritage
Introduction :

Chapitre 4

un des avantages de la POO est de d


dfinir des
dpendances entre les classes.
class Date
{ int jour, mois, anne;
Date(int j, int m, int a)
{jour=j; mois=m; anne=a;}

public void affiche()


{ System.out.println(jour+/+mois+/+anne);}
}

Hritage, Interface et
Package

Supposons qu
quon veut d
dfinir une 2me classe
DateEvenement qui associe a une date un vnement
donn
donne.

Bouhlel Mohamed Salah

Hritage

Introduction :

Une solution est de r


crire enti
rcrire
entirement cette classe.

class DateEvenement
{ int jour, mois, anne; String evenement;
DateEvenement(int j, int m, int a, String e)
{jour=j; mois=m; anne=a; evenement=e;}
public void affecter(int j, int m, int a, String e)
{ jour=j; mois=m; anne=a; evenement=e;}

public void affiche()


{ System.out.println(jour+/+mois+/+anne+ +evenement);}
}
Bouhlel Mohamed Salah

74

Hritage

Introduction :

Cours POO

Cours POO

75

Cette solution est a lloppos


oppos de ce qu
quest la programmation
objet.

Puisqu
Puisquon a d
dj la classe Date, on a un moyen plus simple
de d
dfinir la classe DateEvenement qui est lhritage.

Une classe obtenue par h


hritage poss
possde la totalit
totalit des
membres de la classe de base ainsi que ces m
mthodes.

On dira que la classe DateEvenement hrite des attributs et


des fonctionnalit
fonctionnalits de la classe de base Date.

Bouhlel Mohamed Salah

Cours POO

76

Hritage

Hritage

Introduction :

Constructeur de la sous classe :

On peut alors d
driv
riv la classe DateEvenement partir de la
classe Date en utilisant le mot cl
cl extends:

class DateEvenement extends Date


{
String evenement;

public String quelEvent()


{return evenement;}
}

Lorsqu'on d
dfinit une classe d
driv
rive, il faut s'assurer que, lors de la
cr
cration des objets de cette nouvelle classe, les champs propres
cette classe d
driv
rive ainsi que les champs de la classe de base
soient initialis
initialiss correctement.

Pour invoquer le constructeur de la classe de base, on fera appel


appel
l'instruction super(...). Un constructeur d'une classe d
driv
rive se
compose g
gnralement deux parties :
z
z

Bouhlel Mohamed Salah

Cours POO

77

Hritage

Bouhlel Mohamed Salah

Cours POO

78

Constructeur de la sous classe :

On peut alors d
driv
riv la classe DateEvenement partir de la
classe Date en utilisant le mot cl
cl extends:

class DateEvenement extends Date


{
String evenement;
DateEvenement(int j, int m, int a, String e)
{
super(j,m,a); //appel au constructeur de la classe de Base.
evenement=e; //initialisation des champ de la classe drive
}

}
Bouhlel Mohamed Salah

L'invocation de super(...) doit tre la premi


premire instruction du
constructeur de la classe d
driv
rive.

Hritage

Constructeur de la sous classe :

celle concernant les champs de la classe de base


et celle concernant les champs propres de la classe d
driv
rive.

Cours POO

Constructeur par d
dfaut : Si le constructeur de la classe d
driv
rive
n'invoque pas le constructeur de la classe de base explicitement
avec l'instruction super(...), Java fait quand mme appel au
constructeur, sans argument, de la classe de base : super(). Un
constructeur d
dfinit comme suit

public DateEvenement(String
DateEvenement(String e) {event
{event = e ; }
est automatiquement transform
transform en
public DateEvenement(String e) { super() ; event = e ; }
z

79

Dans le cas o
o un tel constructeur n'existe pas dans la classe de
base, une erreur de compilation est g
gnre. Il existe un cas o
o
l'absence de l'instruction super(...) ne conduit pas cet appel implicite
implicite
: celui o
o le corps du constructeur commence par l'instruction
this(...).
this(...).

Bouhlel Mohamed Salah

Cours POO

80

Hritage

Hritage
Red
Redfinition des champs :

Enchainement de constructeur :
z

Les champs dclars dans la classes drive sont toujours des champs
supplmentaires.

Pour tout objet cr


cre, le constructeur de la classe de base est
invoqu
invoqu qui lui a son tour invoque le constructeur de sa classe de
base et ainsi de suite. Il existe donc un encha
enchanement d'invocation
de constructeurs. Cette cascade d'appels aux constructeurs s'arrte
s'arrte
ds que l'on atteint le constructeur de la classe Object.

La classe Object est la m


mre de toutes les classes ; toute classe est
driv
rive directement ou indirectement de la classe Object.

Ainsi, lors de la cr
cration d'un objet, le premier constructeur invoqu
invoqu
est celui de la classe Object suivi des autres constructeurs dans
dans
l'ordre de la hi
hirarchie de d
drivation des classes.

Bouhlel Mohamed Salah

Cours POO

Pour avoir accs au champ de la classe de base, il faudra changer le type de la


rfrence pointant sur l'objet ou en utilisant le mot cl super.

class A
{
public int i ;
...
}

81

Hritage

class B extends A {
public int i ;
...
public void uneMethode() {
i = 0 ; // i est le champ dfini dans la classe B
this.i = 0 ; // i est le champ dfini dans la classe B
super.i = 1 ; // i est le champ dfini dans la classe A
( (A) this ).i = 1 // i est le champ dfini dans la classe A
}}

Bouhlel Mohamed Salah

Cours POO

82

Hritage

Red
Redfinition des champs :
z Cette technique peut s'appliquer en cascade de la manire suivante :
class C extends B {
public int i ;
...
public void uneMethode()
{
i = 0 ; this.i = 0 ; // i est le champ dfini dans la classe C
super.i = 1 ; ( (B) this ).i = 1; // i est le champ dfini dans la classe B
( (A) this ).i = 1 // i est le champ dfini dans la classe A
}}
Par contre, l'instruction suivante est incorrecte :
super.super.i = 1 ; // Incorrect syntaxiquement !
Tout comme l'utilisation du mot cl this, le mot cl super ne peut tre utilis
dans les mthodes static.
Bouhlel Mohamed Salah

Si l'on dfinit un champ dans la sous classe ayant le mme nom qu'un champ de
la classe de base, il existera deux champs de mme noms. le nom de champ
dsignera toujours le champ dclar dans la classe drive.

Cours POO

83

Red
Redfinition des m
mthodes:

On n'est, videmment pas, tenu de dclarer des nouveaux champs dans


une classe drive : il est tout possible que l'on drive une classe pour
uniquement modifier les mthodes de la classe de base.

Par exemple, si l'on voulait une nouvelle classe DateAnglais qui ne diffre
de la classe Date que par le format d'impression de la date, il suffirait de
dfinir une classe drive de la classe Date et de redfinir la mthode
imprimer pour cette nouvelle classe.

La redfinition d'une mthode consiste fournir une implantation diffrente


de la mthode de mme signature fournie par la classe de base. Dans cet
exemple, la mthode affiche des classes Date et DateAnglais ont la mme
signature ; celle de la classe DateAnglais redfinit celle de la classe Date.

class DateAnglais extends Date {


public void aaffiche()
{ System.out.println(quelMois() + "/" + quelJour() + "/" + quelAnne() ) ; }
}
Bouhlel Mohamed Salah

Cours POO

84

Hritage

Hritage

Mthode de la classe de base:

Mthode static:

Pour avoir accs une mthode redfinie de la classe de base, l'intrieur


d'une mthode de la classe drive, il faudra utiliser le mot cl super. Comme
pour les champs redfinis, il suffit de prfixer le nom de mthode par le mot
cl super pour invoquer la mthode de la classe de base.

Mthode final:

class DateEvenement extends Date


{
private String event = null ;
public DateEvenement(int j, int m, int a, int e)
{ super(j, m, a) ;
event = e ; }

Une mthode final est une mthode qui ne peut tre redfinit dans aucune
sous classe.

Exemple :
class Date {
private int jour, mois, anne ;
public final quelJour() { return jour ; }
... }

public void afficher()


{ super.afficher(); System.out.println(e); }
...
}
Bouhlel Mohamed Salah

Cours POO

85

Hritage
Cest la classe de base de toutes les classe Java.

Les m
mthodes d
dfinit dans cette classes peuvent alors tre utilis
utilis ou
red
redfinis.

Exemples de m
mthodes :
z
z
z
z
z
z
z
z
z

public String toString()


toString()
public boolean equals(Object obj)
obj)
public final native Class getClass()
getClass()
public native int hashCode()
hashCode()
protected native Object clone()
protected void finalize() throws Throwable
public final native void notify()
notify()
public final native void notifyAll()
notifyAll()
public final native void wait(long timeout)throws InterruptedException
public final void wait(long timeout, int nanos)throws InterruptedException
public final void wait()throws InterruptedException

Bouhlel Mohamed Salah

Cours POO

86

La classe Object :

Bouhlel Mohamed Salah

Hritage

La classe Object :

Une mthode static peut galement tre redfinie par une autre mthode
static. Par contre, une static ne peut tre redfinie en une mthode non static.

Cours POO

87

z public

String toString ()
La m
mthode toString est utilis
utilise pour donner une repr
reprsentation
textuelle d'un objet. Ainsi on pourra utilis
utilis la m
mthode System.out.print
en lui donnant comme param
paramtre le nom de llobjet.
Exemple :
public String toString()
e; }
toString() { return jour + " /" + mois + " /" +ann
+ann
z public

boolean equals (Object obj)


obj)
Comme la m
mthode toString,
toString, la m
mthode equals rend la valeur true si
l'objet sur lequel la m
mthode equals est invoqu
invoque est gale l'objet
pass
pass en param
paramtre. Qu'est ce que l'
l'galit
galit ? La notion de l'
l'galit
galit
dpend des objets concern
concerns. Par d
dfaut, la s
smantique de la m
mthode
equals fournie dans la classe Object est l'
l'galit
galit entre les valeurs des
rfrences : les deux r
rfrences d
dsignent le mme objet.
Bouhlel Mohamed Salah

Cours POO

88

Hritage

Hritage

Classes et mthodes abstraite:

Classes et mthodes abstraite:


Une mthode abstraite est une mthode dont la dfinition est suppose
tre donne par redfinition dans les classes drives. la classe de base
ne peut fournir une mthode par dfaut.

On peut parfois utiliser les classes pour dfinir, non pas un type d'objet
bien prcis, mais un concept.

Exemple : soit une classe Forme avec des mthodes abstraites comme
superficie, primtre, tourner, etc On ne sait pas implanter la mthode
superficie dans le cas d'une forme gnrale.

Par contre, une fois connue une forme prcise (un carr, un cercle, etc.),
on sait implanter cette mthode pour cette forme. Autrement dit, un objet de
type forme n'a aucun intrt en soi.

Il ne sera jamais possible de crer un objet de type Forme. Les objets qui
sont susceptible d'exister sont des formes bien prcises : des carrs, des
cercles, des lignes, etc. Ces formes effectives, seront des objets des
classes obtenus en drivant la classe Forme.

Une classe abstraite est une classe partiellement implante i.e. que
certaines des mthodes sont abstraites. Le langage Java impose de
qualifier la classe d'abstraite lorsqu'une de ses mthode est abstraite.

Les objets utiles sont les carrs, les cercles, etc. Par contre, il existe
souvent des caractristiques et comportements communs toutes les
formes.

Bouhlel Mohamed Salah

Cours POO

89

Hritage

Bouhlel Mohamed Salah

Cours POO

90

Interface

Classes et mthodes abstraite:


Tout ceci permet de regrouper des donn
donnes et m
mthodes communes dans
une classe et de sp
spcifier les m
mthodes qu'une classe d
driv
rive de cellecelle-ci
doit absolument implanter.

Si l'on d
dfinit une sous classes sans implanter toutes les m
mthodes
abstraites de la classe de base, une erreur de compilation est g
gnre.
Exemple :

Introduction :
z Le langage Java ne permet pas l'h
l'hritage multiple. Il pallie ce manque
par l'introduction des interfaces. Le choix d
dlib
libr de Java de supprimer
l'h
l'hritage multiple est dict
dict par un souci de simplicit
simplicit.

z Pour supprimer les probl


problmes li
lis l'h
l'hritage multiple, les interfaces
sont des ``sortes de classes'' qui ne poss
possdent que des champs static
final (autant dire des constantes) et des m
mthodes abstraites.

abstract class Forme {


...
public abstract void superficie() ;
... }

z En fait, les interfaces sont un moyen de pr


prciser les services qu'une
classe peut rendre. On dira qu'une classe implante une interface Z si
cette classe fournit les implantations des m
mthodes d
dclar
clares dans
l'interface Z. Autrement dit, la d
dfinition d'une interface consiste a donner
une collection de m
mthodes abstraites et de constantes. L'implantation de
ces m
mthodes devra videmment tre fournie par les classes qui se
rclament de cette interface.

class Carr
Carre extends Forme {
...
public void superficie () { ... }
... }
Bouhlel Mohamed Salah

Cours POO

91

Bouhlel Mohamed Salah

Cours POO

92

Interface

Interface

Dclaration des interfaces :

Dclaration des interfaces :

Comme les classes, les interfaces sont constitu


constitues de champs et de
mthodes ; mais, comme nous l'avons d
dj dit, il existe de tr
trs fortes
contraintes sur la nature des membres d'une interface :
z

Toutes les m
mthodes qui sont d
dclar
clares dans cette interface sont
abstraites ; aucune implantation n'est donn
donne dans la d
dfinition de
l'interface. Toutes les m
mthodes tant publiques et abstraites, les
mots cl
cls public et abstract n'apparaissent pas : ils sont implicites.

Toutes les m
mthodes d'une interfaces sont toujours publiques et non
statiques.

Tous les champs d'une interface sont public, static et final. Ils sont l
l
pour d
dfinir des constantes qui sont parfois utilis
utilises dans les
mthodes de l'interface. Les mots cl
cls static et final ne figurent pas
dans la d
dfinition des champs ; ils sont implicites.

Bouhlel Mohamed Salah

Cours POO

93

Interface

Bouhlel Mohamed Salah

Cours POO

94

Interface

Implanter les Interfaces :

Interface publique :

z Les interfaces dfinissent des ``promesses de services''.

Une interface peut tre qualifie de public. Une


interface public peut tre utilise par n'importe
quelle classe.
z

Mais seule une classe peut rendre effectivement les services


qu'une interface promet. Autrement dit, l'interface toute seule
ne sert rien : il nous faut une classe qui implante l'interface.
Une classe qui implante une interface la dclare dans son
entte

En l'absence de ce qualifier, elle ne peut tre


utilise que par les seules classes appartenant au
mme package que l'interface.
z

Bouhlel Mohamed Salah

Exemple :
La syntaxe de la dclaration d'une interface est la suivante :
interface Service
{
int MAX = 1024 ;
...
int une_mthode(...) ;
...
}

Cours POO

95

class X implements Service


{ ...
int une_mthode(...) { ... }
...
}
Bouhlel Mohamed Salah

Cours POO

96

Interface

Interface
Interface driv :

Implanter les Interfaces :


z Par cette d
dclaration, la classe X promet d'implanter toutes les
mthodes d
dclar
clares dans l'interface Service. La classe X doit donc
fournir l'implantation des m
mthodes pr
prcis
cises dans l'interface Service ; on
devra donc trouver dans la d
dfinition de cette classe, l'implantation de la
la mthode une_m
une_mthode.
thode.
z La signature de la m
mthode doit videmment tre la mme que celle
promise par l'interface. Dans le cas contraire, la m
mthode est consid
considre
comme une m
mthode de la classe et non une implantation de l'interface.
z Si une m
mthode de mme signature existe dans la classe mais avec un
type de retour diff
diffrent une erreur de compilation est g
gnre.

Bouhlel Mohamed Salah

Cours POO

97

Interface

z Tout comme les classes, les interfaces peuvent tre organis


organises de mani
manire
hi
hirarchique l'aide de l'h
l'hritage. Une classe ne peut tre d
driv
rive que d'une
autre classe ; de mme, une interface ne peut tre d
driv
rive que d'une autre
interface.
z Mais, contrairement aux classes, une interface peut tendre plusieurs
interfaces.
interface A extends B {
...
}
interface A extends B, C, D {
...
}
z Une interface d
driv
rive h
hrite de toutes les constantes et m
mthodes des
interfaces anctres ; moins qu'un autre champ de mme nom ou une autre
mthode de mme signature soit red
redfinie dans l'interface d
driv
rive.
Bouhlel Mohamed Salah

Cours POO

98

Interface
Hritage diamant :

Redfinition des champs :

Un mme champ peut tre hrit de plusieurs manire


pour une mme interface

zTout

comme pour les classes, les champs des interfaces


peut tre redfinis dans une interface drive.

Exemple :
interface A { char infoA = 'A'; }
interface B extends A { char infoB = 'B'; }
interface C extends A { char infoC = 'C'; }
interface D extends B, C { char infoD = 'D'; }

Exemple :
interface A { int info = 1; }
interface B extends A { int info = 2; }

Le champ infoA est hrit par l'interface D de deux


manires : une fois par l'interface B et une autre fois par celle
de C. Mais il n'existera pas deux champs infoA dans
l'interface D ; il n'y en aura qu'un.

zLa

dfinition du champ info dans l'interface B masque la


dfinition du champ info de l'interface A. Pour parler du
champ info de l'interface A, on le notera A.info.

Bouhlel Mohamed Salah

Cours POO

99

Bouhlel Mohamed Salah

Cours POO

100

Package

Package
Importer des packages :

Introduction :

z Lorsqu'on veut utiliser une classe d'un package, le moyen le plus


plus direct est de
nommer cette classes par son nom absolu (fully
(fully qualified name) :
CoursJava.monpackage.Date d ;
d = new CoursJava.monpackage.Date(15, 9, 57) ;

Un package est un ensemble de classes, d'interfaces et d'autres


packages regroup
regroups sous un nom.
z

au
z Il correspondent, en quelque sorte, au concept de librairies adapt
adapt
langage Java. Un fichier source destin
destin faire partie du package
monpackage doit pr
prciser son appartenance par la d
dclaration :
package monpackage ;
z Cette d
dclaration pr
prcise que toutes les classes et interfaces d
dfinies
dans ce fichier font partie du package monpackage.
monpackage. Elle doit appara
apparatre
avant toute d
dclaration de classes et interfaces.
z Le

nom d'un package sert de convention de nommage : il constitue une


sorte de pr
prfixe pour chaque nom figurant dans le fichier source.
Bouhlel Mohamed Salah

Cours POO

101

Package

Visibilit

Bouhlel Mohamed Salah

z On aura compris que cette mani


manire de faire est bien trop fastidieuse pour qu'on
s'en contente.
z Pour viter cette lourdeur, Java dispose de la directive import.
import. Il s'agit de
pr
prvenir le compilateur que l'on risque d'utiliser des noms simplifi
simplifis pour nos
classes et qu'il devra pr
prfix
fix tout seul les noms de classes quand c'est
ncessaire.

import CoursJava.monpackage.Date ; ou import CoursJava.monpackage.*;


CoursJava.monpackage.*;
Une fois cette classe import
importe, on pourra d
dsormais utiliser les noms simplifi
simplifis
pour les classes import
importes.
Date d = new Date(15, 9, 57) ;
Bouhlel Mohamed Salah

Cours POO

102

Cours POO

104

Package

Cours POO

103

Bouhlel Mohamed Salah

Classe Interne

Classe Interne

Classe interne non statique :

Classe interne non statique :

z Elles sont une extension du langage JAVA a partir de la version 1.1 du


JDK.

z Si une classe interne est d


dclar
clar priv
priv implique que cette classe ne
pourra tre utilis
utilis que dans la classe parente.

z Une classe peut tre dfinie lintrieur dune autre classe. Elle
constitue des membres a part entire des classes dinclusion au
mme titre que les mthodes ou les variables.

z Une classe interne ne peut pas tre d


dclar
clar dans un initialisateur
statique ou de membre d
dinterface.
z Une classe interne ne peut pas d
dclarer de membre statique hormis s
sil
comporte le modificateur final.

Permettre de d
dfinir une classe lendroit ou une seule autre en a
besoin.
z

Une classe interne peut tre d


dclar
clare avec n
nimporte quel modificateur
dacc
accs (public, protected,
protected, par dfault ou private)
private) et les modificateurs
sp
spciaux final, abstract et static.
static.
z

Bouhlel Mohamed Salah

Cours POO

105

Classe Interne

z Tous les membres de la classe externe sont accessible dans la classe


classe
interne mmes ceux d
dclarer priv
priv.
z Elles sont enregistr
enregistre dans un fichier .class particulier dont le nom est
de la forme : ClasseParente$
ClasseParente$ClasseInterne.class
Bouhlel Mohamed Salah

106

Classe Interne

Classe interne non statique :

Classe interne non statique :

class ClasseParente
{
int x = 10; int y = 12;
private int addition()
{ return (x + y); }

class Externe {
int x = 10; int y = 12;
Externe(){
Externe(){ new Interne(); }
public static void main(String[]
main(String[] args){
args){
new Externe();}
Externe();}

class ClasseInterne
{
void verification()
{ if((x + y)== addition())
System.out.println("La classe interne a bien accd aux membres de sa
classe parente.");
}}
public static void main(String[]
main(String[] args)
args)
{ ClassParente obj_out = new ClasseParente();
ClasseParente();
ClasseInterne obj_in = obj_out.new ClasseInterne();
//c
//cest quivalent : ClasseInterne obj_in = (new ClassParente()).new ClasseInterne();
obj_in.verification();
obj_in.verification();
}}
Bouhlel Mohamed Salah

Cours POO

Cours POO

107

class Interne {
int x = 8; int y = 14;
Interne() {
if (this.x
+ this.y == Externe.this.x + Externe.this.y))
(
System.out.println(
System.out.println( "La classe interne a bien acc
accd l'ensemble des
membres des classes imbriqu
imbriques.");
es.");
}
}
}
Bouhlel Mohamed Salah

Cours POO

108

Classe Interne (exemple liste chain)

Classe Interne (exemple liste chain)


void inserer(String
inserer(String prenom)
prenom)
{
premier = new Maillon(prenom
Maillon(prenom,, premier);
}
void affichage()
{
while (premier!=null
(premier!=null))
{
System.out.println(premier);
System.out.println(premier);
premier=premier.suivant
premier=premier.suivant;;
}
}

public class Famille


{
String nom;
Maillon premier;
Famille(String nom) {this.nom=nom;}
private class Maillon
{
String prenom;
prenom;
Maillon suivant;
Maillon(String prenom,
prenom, Maillon suivant)
{
this.prenom = prenom;
prenom;
this.suivant = suivant;
}
public String toString()
toString()
{
return prenom + " , " + nom;
}
}

public static void main(String[] args)


args)
{
Famille f=new Famille("familleAli
");
Famille("familleAli");
f.inserer("
ali");
");
f.inserer("ali
f.inserer("ali1");
f.inserer("ali1");
f.inserer("ali2");
f.inserer("ali2");
f.affichage();
f.affichage();
}
}

Bouhlel Mohamed Salah

Cours POO

109

Classe Interne

Cours POO

110

Classe Interne

Classe interne locale (local inner-classes):


Elles sont dfinies a lintrieure dune mthode ou dun
bloc de code.

Elles ne sont utilisables que dans le bloc de code ou elle


sont dfinies.

Elles peuvent avoir accs aux membres de la classe


englobant.

Bouhlel Mohamed Salah

Bouhlel Mohamed Salah

Cours POO

Classe interne locale (local


inner-classes):
class ClasseExterne {
int x = 10; int y = 12;
int z = x + y;
void addition(){
class ClasseLocale {
boolean verification(){
if (x + y == z) return true;
else return false;
}
}
ClasseLocale obj_in = new
ClasseLocale();

111

Bouhlel Mohamed Salah

If (obj_in.verification())
{ x = x + y;
System.out.println("La classe
interne a bien
accd aux membres de la
classe extrieure.n x = " +
x+
"ny = " + y + "nz = " + z);
}
else System.out.println("Erreur
!");
}
public static void main(String[] args)
{
ClasseExterne obj_out = new
ClasseExterne();
obj_out.addition(); }
}}
Cours POO

112

Classe Interne

Classe Interne

Classe interne locale (local innerinner-classes):


Seules les variables locales et les param
paramtres de la m
mthode d'inclusion, d
dclar
clares avec le
modificateur final,
final, peuvent tre exploit
exploites par les classes internes locales, sinon une erreur se
produit lors de la compilation. De plus, ces variables doivent tre
tre imp
imprativement assign
assignes
avant leur emploi dans la classe locale.
ClasseLocale obj_in = new ClasseLocale();
ClasseLocale();
class ClasseExterne {
if (obj_in.verification
()){
(obj_in.verification()){
int x = 10; int y = 12;
x = x + y;
// Param
Paramtre constant utilisable par la classe locale
System.out.println("La
System.out.println("La classe interne a
ClasseExterne(final
ClasseExterne(final int p)
bien acc
accd aux membres de la classe
{
ext
extrieure. nx = " + x + "ny
"ny = " + y +
// Constante utilisable par la classe locale
final int a = 20;
"na = "
+ a);
// Variable inutilisable par la classe locale
}
int b = 44;
else
class ClasseLocale {
System.out.println("Erreur
System.out.println("Erreur !");
boolean verification(){
}
if(x + y == a + p)
return true;
else
return false;
}}
Bouhlel Mohamed Salah

Cours POO

113

Seules, les variables statiques de la classe externe peuvent


tre exploites par la classe localise dans la mthode
statique.

Bouhlel Mohamed Salah

Cours POO

114

Classe Interne

Classe interne locale (local inner-classes):


class ClasseExterne {

if (obj_in.verification
())
(obj_in.verification())
{ x = x + y;
System.out.println("La
System.out.println("La classe interne
accede aux membres statiques de

static int x = 10;


static int y = 12;
static int z = x + y;

Classe interne statique (static member inner


classes):
z Ce sont des classes internes qui ne poss
possdent pas de r
rfrence vers
leur classe principale.

la
classe");}
else
System.out.println("Erreur
System.out.println("Erreur !");
}

z Elles ne peuvent pas acc


accd aux membres d
dinstance de la classe
englobant. Mais peuvent acc
accd au membre statique.

public static void main (String[] args)


args)
{ addition(); }

Pour les d
dclarer on utilise le modificateur static dans la d
dclaration de
la classe.
z

}
z Elles sont interpr
interprter par le compilateur comme tant une classe a part
enti

re.
enti

ClasseLocale obj_in = new ClasseLocale();


ClasseLocale();
Bouhlel Mohamed Salah

Lorsqu'une classe locale est dclare dans une mthode


statique, alors les variables d'instances de la classe externe ne
sont plus accessibles pour la classe imbrique.

public static void main(String[] args){


args){
ClasseExterne obj_out = new
ClasseExterne(2);
ClasseExterne(2);
}}

Classe Interne

static void addition(){


class ClasseLocale {
boolean verification()
{ if(x + y == z)
return true;
else
return false;
}}

Classe interne locale (local inner-classes):

Cours POO

115

Bouhlel Mohamed Salah

Cours POO

116

Classe Interne

Classe Interne

class ClasseParente {
static int x = 10; static int y = 12;
// La classe interne statique ne peut acc
accder cette variable
int z = x + y;
static int addition() { return (x + y); }
// La classe interne statique ne peut acc
accder cette m
mthode
int resultat()
resultat() { return (z); }
static class ClasseInterne
{
ClasseInterne()
{
if((x + y)== addition())
System.out.println("La classe interne a bien accd aux membres
statiques de sa classe parente.");
}
}
public static void main(String[] args)
args)
{ new ClasseInterne();
ClasseInterne(); }
}
Bouhlel Mohamed Salah

Cours POO

Classe interne statique (static member inner


classes):
z Il n'est pas ncessaire de crer une instance de la classe
parente pour pouvoir instancier la classe intrieure statique
contrairement aux classes internes simples.

Le mot-cl this n'est pas utilisable dans le contexte des


classes internes statiques, celles-ci n'ont pas accs aux
variables et mthodes non-statiques de leur classe
d'inclusion.

Les mthodes d'une classe interne statique peuvent tre


accdes dans la classe parente de la mme faon que les
classes internes simples, c'est--dire, suite l'instanciation
de leur propre classe.

117

Classe Interne

Cours POO

118

Classe Interne

Classe anonyme (anonymous classes):


z Elles sont dclares immdiatement aprs l'expression d'instanciation
d'une classe, permettant directement d'tendre ou d'implmenter
respectivement la classe ou l'interface instancie.
z La dclaration d'une classe anonyme doit tre toujours suivie d'un
point virgule immdiatement aprs son accolade fermante.
z Les

classes anonymes obissent aux mmes restrictions que les


classes locales et de plus, ne peuvent ni tre abstraites (abstract) ni
tre statiques (static).
Par contre, elles portent toujours implicitement le modificateur final.
z En fait, aucun modificateur n'est permis dans une dclaration de
classe anonyme
Bouhlel Mohamed Salah

Bouhlel Mohamed Salah

Cours POO

119

class ClasseExterne {
static int x = 10; static int y = 12;
public static void main(String[] args)
args)
{
Calcul obj = new Calcul() {
float resultat;
public float soustraction(float a, float b) {
resultat = a - b;
System.out.println(resultat);
return resultat; }
public float multiplication(float a, float b) {
resultat = a * b;
System.out.println(resultat);
return resultat; }
public float division(float a, float b) {
if(b != 0){
resultat = a / b;
System.out.println(resultat);
return resultat;
}
else return 0;
} Bouhlel
}; Mohamed Salah
Cours POO
Bouhlel Mohamed Salah

Cours POO

obj.addition(x,
obj.addition(x, y);
obj.soustraction(x,
obj.soustraction(x, y);
obj.multiplication(x,
obj.multiplication(x, y);
obj.division(x,
obj.division(x, y);
}
}
class Calcul {
public float addition(float
addition(float a, float b) {
return a + b;
}
public float soustraction(float
soustraction(float a, float b) {
return a - b;
}
public float multiplication(float
multiplication(float a, float b) {
return a * b;
}
public float division(float
division(float a, float b) {
return a / b;
}
}
120

Classe Interne

Classe Interne
class ClasseExterne {
static int x = 10; static int y = 12;

Classe anonyme (anonymous classes):


On Pourrat remarquer que le compilateur gnrera un fichier .class de
la classe anonyme sous la forme ClasseEnglobante$1.class.
z

Une classe anonyme ne peut dclarer explicitement un constructeur, le


compilateur Java fournissant automatiquement un constructeur anonyme
pour ce genre de classe.

z Une classe anonyme ne possde pas d'identificateur et est


immdiatement utilise lors de l'instanciation de la classe ou l'interface
concerne.
z Dans le cas d'une implmentation, la classe anonyme doit dfinir
chacune des mthodes abstraites de l'interface instancier, sinon une
erreur de compilation se produira.
Bouhlel Mohamed Salah

Cours POO

121

obj.addition();
obj.soustraction();
obj.multiplication();
obj.division();

public static void main(String[]


args){
ICalcul obj = new ICalcul() {
public float addition()
{ return (x + y); }
public float soustraction()
{ return (x - y); }
public float multiplication()
{ return x * y; }
public float division()
{
if(y != 0) return x / y;
else return 0;
}
Bouhlel Mohamed Salah
};

}
}
interface ICalcul {
float addition();
float soustraction();
float multiplication();
float division();
}

Cours POO

122

Cest quoi une exception

Chapitre 5

La gestion des exceptions

Une exception est un vnement (une erreur) qui se produit lors de l'ex
l'excution d'un
programme, et qui va provoquer un fonctionnement anormal (par exemple
exemple l'arrt du
programme) de ce dernier.

Soit
1
2
3
4
5
6
7
8
9

le programme suivant :
public class Div1 {
public static int divint (int x, int y) {
return (x/y);
}
public static void main (String [] args)
args) {
int c=0,a=1,b=0;
c= divint(
divint(a,b);
a,b);
System.out.println("
res:: " + c);
System.out.println("res
System.exit(0);
System.exit(0); } }

Le syst
systme affiche l'erreur suivante:
Exception in thread "main" java.lang.ArithmeticException:
java.lang.ArithmeticException: / by zero
at Div.divint(
Div.divint(Div.java:3)
Div.java:3)
at Div.main(
Div.main(Div.java:7)
Div.java:7)
Bouhlel Mohamed Salah

Cours POO

124

Gestion des exceptions


z

Gestion des exceptions

La gestion des exceptions se substitue en quelque sorte l'algorithmique permettant la


gestion des erreurs. Dans l'exemple pr
prcdent, si nous avons voulu anticiper sur la gestion
de l'erreur, il fallait pr
prvoir un traitement ad
adquat pour contrer la division par z
zro:
if (y!=0)
return(x/y);
else
// traitement de l'erreur.

Le langage Java offre un m


mcanisme tr
trs souple pour la gestion des erreurs. Ce
mcanisme permet d'isoler d'une part la partie du code g
gnrant l'erreur du reste
du programme, et d'autre part de dissocier les op
oprations de d
dtection et de
traitement de cette erreur.

Par ailleurs, le langage Java utilise des objets pour repr


reprsenter les erreurs
(exceptions) et l'h
l'hritage pour hi
hirarchiser les diff
diffrents types d'exception.

Le traitement de l'erreur pourrait consister retourner une valeur: -1 pour une division par
zro, -2 pour un index qui d
dborde etc. Ce traitement devient fastidieux la longue !

La gestion des erreurs consiste donc dfinir le bloc pouvant provoquer l'erreur
(le bloc try),
try), ainsi ce bloc devient isol
isol du reste du programme ; lancer (throw
(throw))
ou attraper (catch) les "objets" repr
reprsentant les exceptions g
gnres.

traitement A
if (!traitement_A
(!traitement_A)) m
mthodes de correction
else
traitement_B
if (!traitement_B
(!traitement_B)) m
mthodes de correction
else
etc.
Bouhlel Mohamed Salah

Cours POO

125

Hirarchie des exceptions


z

public class Div2 {


public static int divint (int x, int y) { return (x/y); }
public static void main (String [] args)
args) {
int c=0,a=1,b=0;
try { c= divint(
divint(a,b);
a,b); }
catch (ArithmeticException
System.out.println("Erreur a t captur
capture"); }
(ArithmeticException e) { System.out.println("Erreur
System.out.println("
res:: " + c);
System.out.println("res
System.exit(0);}}
Bouhlel Mohamed Salah System.exit(0);}}
Cours POO
126

Hirarchie des exceptions

Il existe deux types dexception :


z
z

Object

Exceptions contrle
Exception non contrle

Throwable
Error

Une exception non contrle se subdivise en deux


catgories Error et RuntimeException. Elle ne
ncessite pas dtre capture, cest mme
dconseiller pour certaine dentre elle.
Une exception contrle est une exception qui doit
tre capture par le programme. Les exceptions
cres par le programmeur doivent tre contrle
sinon une erreur de compilation sera signal.

LinkageError

Exception
IOEcxeption

IllegalAccessException

NoSuchMethodException
ThreadDeath

RuntimeException

VirtualMachineError

IndexOutOfBoundsException
NullPointerException

NumberFormatException

ArithmeticException
Bouhlel Mohamed Salah

Cours POO

127

Bouhlel Mohamed Salah

Cours POO

128

Mcanisme de traitement des exceptions


z

Mcanisme de traitement des exceptions

Lorsqu'une exception est leve dans une mthode


donne, les instructions qui suivent le lancement de
l'exception, se trouvant dans cette mthode, sont
ignores.

1. Une exception est leve


En dehors d'un bloc try :

L'exception peut-tre attrape par un bloc catch (s'il


existe un try) se trouvant dans cette mthode.

Si l'exception n'a pas t capture, le traitement de


cette exception remonte vers la mthode appelante,
jusqu' tre attrape ou bien on est arriv la fin du
programme (ici nous nous trouvons au niveau de la
mthode main).
Bouhlel Mohamed Salah

Cours POO

129

Mcanisme de traitement des exceptions

z Si

Si une instruction donne de ce bloc try (par exemple


c=divint(a,b)) ne gnre pas une exception, le
programme passe au traitement de l'instruction suivante
dans ce bloc la.

Bouhlel Mohamed Salah

Cours POO

elle ne peut pas, il y a arrt du programme.

Bouhlel Mohamed Salah

Cours POO

130

Par contre, si une des instructions du bloc try


provoque une exception (par exemple:
c=divint(a,b)), les instructions suivantes du bloc try
ne seront pas excutes.

Dans le prcdent exemple : System.out.println .


ne sera pas excute. On sort compltement du
bloc try ; et la main sera donne un bloc catch

Dans une mthode, si ncessaire, il peut y avoir


plusieurs bloc try.

Un bloc try est dfini et contient quelques instructions qui


risqueraient de lever une ou plusieurs exceptions.
try {
c= divint(
divint(a,b);
a,b);
System.out.println ("la suite du programme!");
}

ce cas, on remonte immdiatement


dans la mthode appelante pour lui donner la
possibilit de traiter cette exception.

Mcanisme de traitement des exceptions

dans un bloc try :


z

z Dans

131

Bouhlel Mohamed Salah

Cours POO

132

Mcanisme de traitement des exceptions

Mcanisme de traitement des exceptions

2. Capturons lexception

Un bloc catch sert capturer un type d'exception


donn, par exemple ArithmeticException, etc. et de
raliser des oprations comme:

Dans le cas o il n'y pas eu d'exception leve par aucune


des instructions du bloc try, l'excution du programme se
poursuit aprs le dernier bloc catch. Comme si aucun bloc
catch n'a t dfini dans le programme.

Par contre, si une exception est leve, deux cas se


prsentent:

corriger l'erreur qui a provoqu l'exception, proposer un


traitement alternatif, retourner une valeur particulire,
sortir de l'application, relancer la mme exception, faire
qu'une partie du traitement et la mthode appelante fera
le reste etc.

S'il existe un bloc catch qui peut capturer cette exception, il sera
ex
excut
cut en premier, puis le programme poursuit apr
aprs le dernier bloc
catch.

Si aucun bloc catch ne peut capturer cette exception, la main est


est
donn
donne la m
mthode appelante. elle de voir si elle peut traiter
cette exception, sinon on remonte de m
mthode en m
mthode la
recherche d'un bloc catch ad
adquat, jusqu'
jusqu' terminer le programme
(donc niveau main).

Un bloc catch, s'il existe dans un programme, il suit


immdiatement un bloc try (donc contigu au bloc try).

Bouhlel Mohamed Salah

Cours POO

133

Mcanisme de traitement des exceptions

Bouhlel Mohamed Salah

exceptions sont reprsentes en quelque


sorte par des "objets", instancis donc partir de
classes ; de ce fait, chaque exception fait
rfrence une classe.
z Pour lever une exception, nous devons crer une
instance de la classe o rside cette exception.

try
{ c= divint(
divint(a,b);
a,b); }
catch (ArithmeticException
(ArithmeticException e)
{ System.out.println("Erreur
System.out.println("Erreur a t captur
capture"); }

z Les

Cours POO

134

public class Div3


{
public static int divint (int x, int y) {
if (y==0) throw new ArithmeticException();
ArithmeticException();
return (x/y);
}
public static void main (String [] args)
args)
{
int c=0,a=1,b=0;

Une exception est donc leve si une opration


illgale risquerait d'avoir lieu. Pour le faire, nous
utilisons le mot cl throw mais il faudra faire
attention aux points suivants:

Bouhlel Mohamed Salah

Cours POO

Mcanisme de traitement des exceptions

3 mais peut-on la lever?


z

135

System.out.println("
res:: " + c);
System.out.println("res
}
}

Req : les exceptions de type RuntimeException sont propag


propages automatiquement
Bouhlel Mohamed Salah

Cours POO

136

Mcanisme de traitement des exceptions


z

Dfinir sa propre exception

Si nous avons affaire une m


mthode susceptible de lever une exception qu'elle
ne traite pas localement, cette m
mthode doit mentionner son type dans son enentte en utilisant pour cela, le mot r
rserv
serv throws.
throws.
Soit l'exception est trait
traite localement, soit elle est propag
propage par throws.
throws.

public class Div3


{
public int divint (int x, int y) throws MaArithmeticException
{
if (y==0) throw new MaArithmeticException();
MaArithmeticException();
return (x/y);
}
public int carr
carr(int x, int y) throws MaArithmeticException
{ return divint(
divint((x,y);
divint(x,y)*
x,y)*divint
x,y); }
public static void main (String [] args)
args)
{
int c=0,a=1,b=0;
try { c= divint(
divint(a,b);
a,b); }
catch (MaArithmeticException
("Erreur a t captur
(MaArithmeticException e) {System.out.println
{System.out.println("Erreur
capture");}
System.out.println("
res:: " + c);
System.out.println("res
}
}

Bouhlel Mohamed Salah

Cours POO

137

Dfinir sa propre exception


class MaArithmeticException extends Exception
{
MaArithmeticException(String s)
{
super(s);
}
MaArithmeticException()
{}
public String toString()
{
return "Mon erreur MaArithmeticException";
}
}
Bouhlel Mohamed Salah

Cours POO

Si on veut pouvoir signaler un vnement


exceptionnel dun type non prvue par java, il faut
tendre la classe java.lang.Exception.

Les mthodes utiles de la classe Exception sont :


z

Exception() : constructeur sans argument, construit une


exeption.

Exception(String s) : Construit une exception avec le


message s qui sera stock dans lexception cre.

String getMessage() : (mthode hrit de la classe


throwable), renvoie le message stock dans une
exception.

Bouhlel Mohamed Salah

Cours POO

138

Exemple : factorielle

139

class Factorielle
{
public int calcul(int x)
{
if(x==0)
1;
La solutionreturn
est simple,
tu
tes
tromper
de
else
return x*calcul(x-1);
chiffre 5 au lieu de -5.
}
Fais attention la
!!!
publicprochaine
static fois
void
main(String[] args)
{
Factorielle f=new Factorielle();
System.out.println(f.calcul(-5));
}
}
Bouhlel Mohamed Salah

Cours POO

Mais,
pourquoi ca
plante !!!

140

Exemple : factorielle

Exemple : factorielle

Que faire ?
Si je me trompe
encore une fois ?
Quelquun peut-il
maider?

Bouhlel Mohamed Salah

Cours POO

141

Exemple : factorielle

142

Exemple : factorielle
class Factorielle
{
public int calcul(int
calcul(int x) throws EntierNegatifException,
EntierNegatifException, EntierGrandException
{
if(x<0)
throw new EntierNegatifException();
EntierNegatifException();
else if (x>27)
throw new EntierGrandException("Mon
EntierGrandException("Mon exception entier > 27");
else if(x==0) return 1;
else return x*calcul(xx*calcul(x-1);
}
public static void main(String[] args)
args)
{
Factorielle f=new Factorielle();
try {System.out.println(
System.out.println(f.calcul(88));}
f.calcul(88));}
catch (EntierGrandException e) {System.out.println
{System.out.println((e.getMessage());}
e.getMessage());}
catch (EntierNegatifException e){System.out.println
(e);}
e){System.out.println(e);}
}
}

Cest tous???
Cest facile alors !!!

Non !!!!
Il manque une
dernire
tapes???

Bouhlel Mohamed Salah

class EntierNegatifException extends Exception


{
EntierNegatifException(){}
public String toString()
{
return "Mon exception : entier < 0";
}
}
class EntierGrandException extends Exception
Simple ! Mais tas
{
pas vue les
exceptions ???
EntierGrandException(String s)
{
super(s);
}
} Bouhlel Mohamed Salah
Cours POO

Cours POO

143

Bouhlel Mohamed Salah

Cours POO

144

Le bloc finally

Exemple

On peut avoir un bloc dinstructions commenant


avec le mot cl finally :

Soit aprs un bloc try.


Soit aprs un bloc try suivit dun bloc catch.

Les instructions du bloc finally sont excutes :

Dans le premier cas aprs la sortie du bloc try.


Dans le second cas aprs lexcution du bloc catch.

Il est gnralement utilis pour effectuer des


nettoyages tels que la fermeture de fichier
Bouhlel Mohamed Salah

Cours POO

145

Exemple

Bouhlel Mohamed Salah

Bouhlel Mohamed Salah

Cours POO

146

Cours POO

148

Exemple

Cours POO

147

Bouhlel Mohamed Salah

Les E/S Gnralits


z

Dans la plupart des langages de programmation les notions


d'entres / sorties sont considres comme une technique
de base, car les manipulations de fichiers, notamment, sont
trs frquentes.

En Java, et pour des raisons de scurit, on distingue deux


cas :

Chapitre 6

Les Entres Sorties

le cas des applications Java autonomes, o


o, comme dans n'importe
quel autre langage, il est g
gnralement fait un usage important de
fichiers,

le cas des applets Java qui, ne peuvent pas, en principe, acc


accder,
tant en criture qu'en lecture, aux fichiers de la machine sur laquelle
s'ex
s'excute le navigateur (machine cliente).

Bouhlel Mohamed Salah

Notion de Flux
z

Les E / S sont g
gres de fa
faon portable (selon les OS) grce la notion
de flux (stream
(stream en anglais).

L'int
L'intrt de la notion de flux est qu'elle permet une gestion homog
homogne :
z

Un flux est en quelque sorte un canal dans lequel de l'information


l'information
transite. L'ordre dans lequel llinformation y est transmise est respect
respect.

Un flux peut tre :


z
z

Soit une source d


doctets partir de laquelle il est possible de lire de
l'information. On parle de flux d'entr
d'entre.
Soit une destination d
doctets dans laquelle il est possible d'
d'crire de
l'information. On parle de flux de sortie.

Certains flux de donn


donnes peuvent tre associ
associs des ressources qui
fournissent ou re
reoivent des donn
donnes comme :
z
z
z

les fichiers,
les tableaux de donn
donnes en m
mmoire,
les lignes de communication (connexion r
rseau).

Cours POO

Les flux sont regroup


regroups dans le paquetage java.io

Il existe de nombreuses classes repr


reprsentant les flux
z

il n'est pas toujours ais


ais de se rep
reprer.

Certains types de flux agissent sur la fa


faon dont sont trait
traites les
donn
donnes qui transitent par leur interm
intermdiaire :
z

151

Combin
Combins des flux d
dentr
entre ou de sortie, ils permettent de traduire les
donn
donnes.

z
Bouhlel Mohamed Salah

quelle que soit la ressource associ


associe au flux de donn
donnes,
quel que soit le flux (entr
(entre ou sortie).

Certains flux peuvent tre associ


associs des filtres
z

150

Notion de Flux

Cours POO

E / S bufferis
bufferises,
es, traduction de donn
donnes,

Il va donc s
sagir de combiner ces diff
diffrents types de flux pour r
raliser la
gestion souhait
souhaite pour les E / S.
Bouhlel Mohamed Salah

Cours POO

152

Exemples

Flux Octets et Flux Caractres


z

Il existe des flux de bas niveau et des flux de plus


haut niveau (travaillant sur des donnes plus
volues que les simples octets) :
z Les

Mr. Tous ca est


bien!!!
mais comment vaisvaisje lire un caract
caractre
que je viens d
crire
dcrire
au clavier ???

flux doctets

z classes

abstraites InputStream et OutputStream et


leurs sous-classes concrtes respectives.

z Les

flux de caractres

z classes

abstraites Reader et Writer et leurs sousclasses concrtes respectives.

Bouhlel Mohamed Salah

Cours POO

153

Exemples
z

Bouhlel Mohamed Salah

Cours POO

154

Exemples
z

La plupart des plates formes ont une notion classique


dentre, de sortie standard et de sortie derreur
standard.

First :
z System : La classe System poss
possde les variables statiques in,
out et err qui sont connect
connectes aux trois flots du syst
systme avant que le
programme commence son ex
excution
z PrintStream

En effet, un clavier, un fichier, ou la sortie dun autre


programme peuvent reprsenter lentre standard.

out

Flot standard de sortie

Une fentre, une imprimante, un fichier ou lentre dun


autre programme peuvent constituer la sortie standard.

z InputStream

in

Flot standard dentr

La sortie derreurs standard sert pour afficher les


messages derreurs lutilisateur.

z PrintStream

err

Flot standard de sortie derreur


Bouhlel Mohamed Salah

Cours POO

155

Bouhlel Mohamed Salah

Cours POO

156

Exemples
z

Exemple

Second : utiliser lentre standard


public char lectureChar()
{
int b=0;
try
{
b=System.in.read() ;
}
catch(IOException e){System.out.println(erreur E/S);}

Si jai bien compris, ca


correspond au premier type
de flux Octet.
Comment je fais pour le cas
du deuxime type de flux
caractre?

System.out.println(Donne lue :+(char)b);


return (char)b;
}
Bouhlel Mohamed Salah

Cours POO

157

Exemples
z

Bouhlel Mohamed Salah

158

La classe InputStream / Reader

2me possibilit
public char lectureChar()
{
char b=0;
try
{

Cette classe abstraite InputStream reprsente la super


classe de toutes les classes dentr de flux doctet.

Parmi ces mthodes on site :

InputStreamReader isr=new InputStreamReader(System.in);


b=(char)isr.read();

}
catch(IOException e){System.out.println(erreur E/S);}
System.out.println(Donne lue :+b);
return b;

}
Bouhlel Mohamed Salah

Cours POO

Cours POO

159

public abstract int read()


read() throws IOException : cette m
mthode lit un
octet sur le flux sp
spcifi
cifi et retourne cette valeur sous la forme d
dun
entier. Il s'agit d
dune lecture bloquante.

public void close() throws IOException : cette m


mthode referme le flux
dentr
entr et lib
libre les ressources syst
systme.

La classe abstraite Reader joue le mme rle que la classe


InputStream, mais elle agit sur les caractres.
Bouhlel Mohamed Salah

Cours POO

160

La classe OutputStream / Writer

Exemple

La classe abstraite OutputStream reprsente la super classe


de toutes les classes de sortie de flux doctet.

Parmi ces mthodes on site :


z

public void close() throws IOException : cette m


mthode referme le flux
de sortie et lib
libre les ressources syst
systme relative a ce flux.

Mais si cest une chane de


caractre je fais quoi???

La classe abstraite Writer joue le mme rle que la classe


outputStream, mais elle agit sur les caractres.
Bouhlel Mohamed Salah

Cours POO

161

Exemple

Je crois que je commence a


comprendre mais !!!

public abstract void write(


write(int b) throws IOException : cette m
mthode
crit un octet sur le flux de sortie. L
Loctet a crire est pass
pass en
param
paramtre a la m
mthode. Cette m
mthode est bloquante jusqu
jusqu la
ralisation de l
criture.
lcriture.

Bouhlel Mohamed Salah

Cours POO

162

Cours POO

164

Exemple

Jaurais besoin de quelque chose qui me


permet de stocker les valeurs
(BufferedReader) que je vais entre au
clavier (System.in).

cest ce quon appelle un buffer.


z

Il existe en java des classes prdfinies


qui me permettent de grer ca :
InputStreamReader, BufferedReader.
Bouhlel Mohamed Salah

Cours POO

163

Bouhlel Mohamed Salah

Exemples

Exemples

public String lectureChaine()


{
String res=null;
try
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
res=br.readLine();

Et maintenant pour
voir si vous avez
compris.
Comment je fais pour
lire un entier.

}
catch(IOException e){System.out.println(erreur E/S);}
System.out.println(Donne lue :+res);
return res;
}
Bouhlel Mohamed Salah

Cours POO

165

Exemples

Bouhlel Mohamed Salah

166

Gestion des Fichiers


z

public int lectureEntier()


{
int res=0;
try
{
res=Integer.parseInt ( lectureChaine() );

Exemples de mthodes pour grer les fichiers :


z

Les classes FileInputStream et FileOutputStream :dfinit


respectivement des flux doctets en lecture et en criture.

Les classes FileReader et FileWriter : dfinit


respectivement des flux de caractre en lecture et en
criture.

La classe File : qui peut reprsenter un fichier ou un


rpertoire. Elle possdent un ensemble de mthodes qui
permettent d'interroger ou d'agir sur le systme de
gestion de fichiers du systme d'exploitation.

}
catch(NumberFormatException e){}
return res;
}

Bouhlel Mohamed Salah

Cours POO

Cours POO

167

Bouhlel Mohamed Salah

Cours POO

168

Flux doctet en lecture sur un fichier

Flux doctet en lecture sur un fichier

Il faut instancier un objet de la classe


FileInputStream.

Cette classe offre plusieurs constructeurs qui levent


une exception de type FileNotFoundException :
z
z

FileInputStream(String nom) : ouvre un flux en lecture sur


le fichier dont le nom est donn en paramtre.
FileInputStream(File f) : idem mais le fichier est prcis
avec un objet de type File.

Cette classe offre aussi plusieurs mthodes :


z
z

int read() : permet de lire un octet du flux.


void close() : ferme le flux et libre les ressources qui lui
taient associ.

Bouhlel Mohamed Salah

Cours POO

169

Flux doctet en criture sur un fichier


z

Il faut instancier un objet de la classe FileOutputStream.

Cette classe offre plusieurs constructeurs:


z

FileOutputStream(String
FileOutputStream(String nom) : si le fichier pr
prcis
cis nexiste pas, il
sera cr
cr.. Si il existe et qu
quil contient des donn
donnes cellescelles-ci seront
cras
crases.
FileOutputStream(String
FileOutputStream(String nom, boolean ajout) : le boolean permet de
pr
prciser si les donn
donnes seront ajout
ajoutes au fichier (valeur true)
true) ou
crasent les donn
donnes existantes (valeur false).

void write(
crire lloctet en param
write(int a) : permet d
dcrire
paramtre dans le flux.
void close() : permet de fermer le flux et lib
libre les ressources qui lui
taient associ
associ.

Bouhlel Mohamed Salah

Cours POO

Bouhlel Mohamed Salah

Cours POO

170

Flux doctet en criture sur un fichier

Cette classe offre aussi plusieurs mthodes :


z

public static void main (String[] args)


args)
{
try
{
FileInputStream f=new FileInputStream("e:
FileInputStream("e:\\\test\
test\\a.txt");
int octet=0;
while(octet!=
while(octet!=--1)
{
octet=f.read
();
octet=f.read();
System.out.print((
char)octet);
);
System.out.print((char)octet
}
f.close();
f.close();
}
catch(FileNotFoundException
catch(FileNotFoundException e){ System.out.print("fichier
System.out.print("fichier introuvable");}
catch(IOException
catch(IOException e){}
}

171

public static void main (String[] args)


args)
{
try{
try{
FileInputStream f=new FileInputStream("e:
FileInputStream("e:\\\test\
test\\a.txt");
FileOutputStream fcopy=new
fcopy=new FileOutputStream("e:
FileOutputStream("e:\\\test\
test\\acopy.txt");
int octet=0;
while(octet!=
while(octet!=--1)
{
octet=f.read
();
octet=f.read();
fcopy.write(octet);
fcopy.write(octet);
}
f.close();
f.close();
fcopy.close();
fcopy.close();
}
("errrrrrue
errrrrrue");}
");}
catch(FileNotFoundException
catch(FileNotFoundException e){System.out.print
e){System.out.print("
catch(IOException
IOException
e){}
catch(
}
Bouhlel Mohamed Salah

Cours POO

172

Flux de caractres en lecture sur un fichier

Flux de caractre en lecture sur un fichier

Il faut instancier un objet de la classe FileReader. Cette


classe hrite de la classe InputStreamReader.

Cette classe offre plusieurs constructeurs qui lvent une


exception de type FileNotFoundException :
z FileReader(String nom) : ouvre un flux en lecture sur le
fichier dont le nom est donn en paramtre.
z FileReader(File f) : idem mais le fichier est prcis avec
un objet de type File.

Cette classe offre aussi plusieurs mthodes :


z int read() : permet de lire un octet du flux.
z void close() : ferme le flux et libre les ressources qui lui
taient associ.
Bouhlel Mohamed Salah

Cours POO

173

Flux de caractre en criture sur un fichier


z

Il faut instancier un objet de la classe Filewriter.

Cette classe offre plusieurs constructeurs:


z
z

FileWriter(String
FileWriter(String nom) : si le fichier pr
prcis
cis nexiste pas, il sera cr
cr..
Si il existe et qu
quil contient des donn
donnes cellescelles-ci seront cras
crases.
FileWriter(String
FileWriter(String nom, boolean ajout) : le boolean permet de pr
prciser
si les donn
donnes seront ajout
ajoutes au fichier (valeur true)
true) ou crasent les
donn
donnes existantes (valeur false).

void write(
crire lloctet en param
write(int a) : permet d
dcrire
paramtre dans le flux.
void close() : permet de fermer le flux et lib
libre les ressources qui lui
taient associ
associ.

Bouhlel Mohamed Salah

Cours POO

Bouhlel Mohamed Salah

Cours POO

174

Flux de caractre en criture sur un fichier

Cette classe offre aussi plusieurs mthodes :


z

public static void main (String[] args)


args)
{
try
{
FileReader f=new FileReader("e:
FileReader("e:\\\test\
test\\a.txt");
int octet=0;
while(octet!=
while(octet!=--1)
{
octet=f.read
();
octet=f.read();
System.out.print((
char)octet);
);
System.out.print((char)octet
}
f.close();
f.close();
}
catch(FileNotFoundException
("errrrrrue
errrrrrue");}
");}
catch(FileNotFoundException e){System.out.print
e){System.out.print("
catch(IOException
catch(IOException e){}
}

175

public static void main (String[] args)


args)
{
try
{
FileReader f=new FileReader("e:
FileReader("e:\\\test\
test\\a.txt");
FileWriter fcopy=new
);
fcopy=new FileWriter("e:
FileWriter("e:\\\test\
test\\acopy.txt",true
acopy.txt",true);
int octet=0;
while(octet!=
while(octet!=--1)
{
octet=f.read
();
octet=f.read();
fcopy.write(octet);
fcopy.write(octet);
}
f.close();
f.close();
fcopy.close();
fcopy.close();
}
catch(FileNotFoundException
("errrrrrue
errrrrrue");}
");}
e){System.out.print("
catch(FileNotFoundException e){System.out.print
catch(IOException
catch(IOException e){}
}
Bouhlel Mohamed Salah

Cours POO

176

Flux de caractre tamponns avec un fichier

Exemple

Pour am
amlior
lior les performances des flux sur un fichier, la mise en tampon des
donn
donnes lues ou crites permet de traiter un ensemble de caract
caractres
repr
reprsentant une ligne plutt que de traiter les donn
donnes caract
caractres par
caract
caractres. Le nombre d
dop
opration est alors r
rduit.

Il faut instancier un objet de la classe BufferedReader ou BufferedWriter.


BufferedWriter.

Ces classes offre plusieurs constructeurs:


z BufferedReader(Reader
BufferedReader(Reader a) : a correspond au flux a lire.
z BufferedReader(Reader
BufferedReader(Reader a, int taille) : taille correspond a la taille du buffer.
z BufferedWriter(
BufferedWriter(writer a) : a correspond au flux dans lequel les donn
donnes sont
crites.
z BufferedWriter(
BufferedWriter(writer a, int taille) : taille correspond a la taille du buffer.

La classe BufferedReader offre aussi plusieurs m


mthodes :
z String readLine()
readLine() : permet de lire une ligne de caract
caractre dans le flux (\
(\r, \n).

La classe BufferedWriter offre aussi plusieurs m


mthodes :
z void newLine()
newLine() : crit un s
sparateur de ligne dans le flux.
z void write(String
write(String ligne) : crit une ligne dans le buffer.
Bouhlel Mohamed Salah

Cours POO

177

Exemple

Cours POO

178

Exemple

public void lecture (String source)


{
try
{
FileReader f=new FileReader(source);
FileReader(source);
BufferedReader br=new
br=new BufferedReader(f);
BufferedReader(f);
String ligne;
while((ligne=
br.readLine())!=
())!=null
null))
while((ligne=br.readLine
{
System.out.println(ligne);
System.out.println(ligne);
}
br.close();
br.close();
}
catch(FileNotFoundException
("errrrrrue
errrrrrue");}
");}
catch(FileNotFoundException e){System.out.print
e){System.out.print("
catch(IOException
catch(IOException e){}
}
Bouhlel Mohamed Salah

Bouhlel Mohamed Salah

Cours POO

179

public void copy (String source, String destination)


{
try
{
FileReader f=new FileReader(source);
FileReader(source);
BufferedReader br=new
br=new BufferedReader(f);
BufferedReader(f);
FileWriter fcopy=new
fcopy=new FileWriter(destination);
FileWriter(destination);
BufferedWriter bw=new
bw=new BufferedWriter(
BufferedWriter(fcopy);
fcopy);
String ligne;
while((ligne=
br.readLine())!=
())!=null
null))
while((ligne=br.readLine
{
bw.write(ligne);
bw.write(ligne);
bw.newLine();
bw.newLine();
}
br.close();
br.close();
bw.close();
bw.close();
}
errrrrrue");}
");}
catch(FileNotFoundException
("errrrrrue
catch(FileNotFoundException e){System.out.print
e){System.out.print("
catch(IOException
catch(IOException e){}
} Bouhlel Mohamed Salah
Cours POO

180

La classe File
z

Exemple

Voici un aper
aperu de quelques constructeurs et m
mthodes de la classe File :
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z

File (String name)


name)
File (String path,
path, String name)
name)
File (File dir,
dir, String name)
name)
boolean isFile(
isFile( ) : teste si le File courant est un fichier.
boolean isDirectory(
isDirectory( ) : teste si le File courant est un r
rpertoire.
boolean mkdir(
mkdir( ) : cr
crer le r
rpertoire pr
prsent dans le File.
boolean mkdirs(
mkdirs( ) : cr
crer le r
rpertoire pr
prsent dans le File et toutes l
larborescence si
elle n
nexiste pas.
boolean exists(
exists( ) : teste l
lexistence du File.
boolean delete(
delete( ) : supprime le File courant.
boolean canWrite(
canWrite( ) : Teste la possibilit
possibilit dcriture
criture sur le File.
boolean canRead(
canRead( ) : teste la possibilit
possibilit de lecture sur le File.
File getParentFile(
getParentFile( ) : retourne le chemin du File parent, or null sil n
ny on a pas.
long lastModified(
lastModified( ) : retourne le temps de la derni
dernire modification du fichier.
String[] list()
list() : retourne un tableau de String repr
reprsentant les noms des r
rpertoires et
fichiers present dans le File courant.
File[] listFiles()
listFiles() : retourne un tableau de File repr
reprsentant les Files pr
prsent dans le
File courant.

Bouhlel Mohamed Salah

Cours POO

181

Exemples

public static void main (String[] args)


args)
{
try
{
File fs=
fs= new File("e:\
File("e:\\test\
test\\a.txt");
BufferedReader br=new
br=new BufferedReader(new
BufferedReader(new FileReader(
FileReader(fs));
fs));
File fd=
fd= new File("e:\
File("e:\\test\
test\\acopy.txt");
BufferedWriter bw=new
bw=new BufferedWriter(new
BufferedWriter(new FileWriter(
FileWriter(fd));
fd));
String ligne;
while((ligne=
br.readLine())!=
())!=null
null))
while((ligne=br.readLine
{
bw.write(ligne);
bw.write(ligne); bw.newLine();
bw.newLine();
}
br.close();
br.close(); bw.close();
bw.close();
}
catch(FileNotFoundException
("errrrrrue
errrrrrue");}
");}
catch(FileNotFoundException e){System.out.print
e){System.out.print("
catch(IOException
catch(IOException e){}
} Bouhlel Mohamed Salah
Cours POO

182

Exemples

EstEst-ce que l
lutilit
utilit
de la classe File
sarrte a ce stade?
Cest une trs bonne question.

Alors c
cest pareil a
ce qui pr
prcde.

Bouhlel Mohamed Salah

La rponse est non son utilit


dpasse ce cadre dutilisation

Cours POO

183

Bouhlel Mohamed Salah

Cours POO

184

Exemples

Exemple : simulation de la commende dir


La mthode dir prend comme paramtre
le rpertoire a parcourir.
public void dir(File rep)
{
Je rcupre la liste des fichiers est
String[] names=rep.list();
rpertoire dans le tableau names.
for(int i=0; i<names.length;i++)
{
File interim=new File(rep.getPath()+"\\"+names[i]);
if (interim.isFile())
System.out.println(names[i]);
else
System.out.println("repertoire =>"+names[i]);
}
}
On fait laffichage adquat

Bouhlel Mohamed Salah

On teste si le nom correspond a un


fichier ou un rpertoire.

Cours POO

185

Hirarchie des flux d'octets en entre

Bouhlel Mohamed Salah

Cours POO

Et maintenant pour voir si vous avais compris???


1. Ecrire une mthode qui permet de dupliquer une
arborescence.
2. Ecrire une mthode qui permet de tester si un
fichier existe dans un rpertoire ou non.
3. Ecrire une mthode qui retourne le nombre
doccurrence dun fichier dans une
arborescence.

Bouhlel Mohamed Salah

Cours POO

186

Hirarchie des flux d'octets en sortie

187

Bouhlel Mohamed Salah

Cours POO

188

Introduction

Chapitre 7

Besoin daccs a une base de donne partir


dune application JAVA.
z Fournir un accs homogne aux SGBDR.
z Abstraction des SGBDR cibles.
z Support du langage SQL.
z Simple mettre en uvre.
z

Java Data Base


Connectivity (JDBC)

Bouhlel Mohamed Salah

Quest ce que JDBC ?


z

190

LAPI JDBC
z

Java DataBase Connectivity (Core API 1.1)

Est fournie par le package java(x).sql


z

Permet de formuler et grer les requtes aux


bases de donnes relationnelles.

supporte le standard SQL

Contient les Classes/interfaces dfinissant les


objets ncessaires :

API Java adapte la connexion avec les bases de


donnes relationnelles (SGBDR).
Fournit un ensemble de classes et dinterfaces
permettant lutilisation sur le rseau dun ou
plusieurs SGBDR partir dun programme Java.

la connexion une base de donne


z et la cration et excution de requtes SQL et
rcupration du rsultat.

Indpendance vis--vis des fournisseurs.


Bouhlel Mohamed Salah

Cours POO

Cours POO

191

Bouhlel Mohamed Salah

Cours POO

192

Interaction avec une BD

Chargement du driver de la BD
z

Chargement du driver de la BD.

contient la requte
SQL et la transmet
la base de donnes.
z Connexion la base de
charge et configure
permet de parcourir
lesla base
donnes.
le driver de
informations retournes
par
de donnes.
la base de donnes dans le
cas d'une slection de
z Excution des commandes
donnes

SQL.

DriverManager

Connection

1.

JDBCJDBC-ODBC bridge driver : c


cest un pont entre JDBC et ODBC.
ODBC
ODBC (Open Data Base Connectivity) est une API de Windows
permettant d'accder diverses bases de donnes .

2.

NativeNative-API partlypartly-Java driver : fait appel des fonctions natives


(non Java) de l API du SGBDR qui sont souvent fournis par le
constructeur.

3.

JDBCJDBC-Net allall-Java driver : interagit avec une API rseau gnrique


et communique avec une application intermdiaire (middleware) sur
le serveur. Le middleware accde par un moyen quelconque aux
diffrents SGBDR. Il est portable car entirement crit en Java.

4.

NativeNative-protocol allall-Java driver : utilise le protocole rseau du


SGBDR. Interagit avec la base de donnes via des sockets
gnralement fourni par lditeur.

Statement
ralise la connexion
et l'authentification
des
rsultats
(si
la base
de donnes.

Inspection
disponible).
Bouhlel Mohamed Salah

Il existe quatre types de drivers JDBC:

ResultSet

Cours POO

193

Bouhlel Mohamed Salah

Cours POO

194

Chargement du driver de la BD

Chargement du driver de la BD
JDBC-ODBC bridge driver
Application java
Driver JDBC
Driver ODBC
Les mthodes du driver JDBC font appel des
fonctions en langage C d'un driver ODBC.

SGBD

Bouhlel Mohamed Salah

Cours POO

195

Bouhlel Mohamed Salah

Cours POO

196

Chargement du driver de la BD

Chargement du driver de la BD

Native-API partly-Java driver

JDBC-Net all-Java driver


Application java
Partie JAVA

Application java
Driver en JAVA

Driver

Partie Native
Les mthodes du driver JDBC font appel des
fonctions d'une bibliothque crite dans un
autre langage que Java, qui accdent au SGBD

Les mthodes du driver JDBC se


connectent par socket au serveur
middleware et lui envoient les requtes
SQL ; le serveur middleware les traitent
en se connectant au SGBD

Protocole du
SGBDR

SGBD

Bouhlel Mohamed Salah

Cours POO

197

Bouhlel Mohamed Salah

198

1. Chargement du driver
z
Application java
Driver en JAVA

Pour se connecter une base de donnes via


ODBC, il faut tout d'abord charger le pilote JDBCODBC qui fait le lien entre les deux.
z

Utiliser la mthode forName de la classe Class :


z

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Protocole rseau
du SGBD

z
SGBD

Pour se connecter une base en utilisant un driver


spcifique, la documentation du driver fournit le nom
de la classe utiliser. Ex
z

Cours POO

Cours POO

Travailler avec JDBC

Native-protocol all-Java driver

Bouhlel Mohamed Salah

Serveur middleware

SGBD

Chargement du driver de la BD

Les mthodes du driver JDBC utilisent


des sockets pour dialoguer avec le
SGBD selon son protocole rseau

Protocole du
middleware

199

Class.forName("oracle.jdbc.driver.OracleDriver");

Bouhlel Mohamed Salah

Cours POO

200

Travailler avec JDBC

Travailler avec JDBC

2. Etablissement de la connexion

1. Chargement du driver
z

Ce traitement charge le pilote et crer


une instance de cette classe.
La mthode static forName() de la classe
Class peut lever l'exception
java.lang.ClassNotFoundException.

Bouhlel Mohamed Salah

Cours POO

201

Pour se connecter une base de donnes, il faut instancier


un objet de la classe Connection en lui prcisant sous forme
d'URL la base accder.

La syntaxe de lURL peut varier d'un type de base de


donnes l'autres mais elle est toujours de la forme :
protocole : sous_protocole : nom
z
z
z

protocole dsigne le protocole est vaut toujours jdbc .


sous_protocole dsigne le sous protocole qui dfinit le mcanisme
de connection pour un type de bases de donnes. Ex : odbc .
nom dsigne le nom de la base de donnes et doit tre celui saisie
dans le nom de la source sous ODBC.

Bouhlel Mohamed Salah

Cours POO

Travailler avec JDBC

Travailler avec JDBC

2. Etablissement de la connexion

2. Etablissement de la connexion

Exemple :

202

String dbURL= jdbc : odbc : test

String dbURL= jdbc : odbc : test


Connection con = DriverManager.getConnection(dbURL);

La mthode getConnection peut lever une exception


de la classe java.sql.SQLException.

Si la base a laquelle on va ce connect ncessite un


login et un mot de passe alors :

Mais que reprsente


test ?
Le nom de la base ou
quoi?

Connection con = DriverManager.getConnection(dbURL, "Login", "Pwd");


Bouhlel Mohamed Salah

Cours POO

203

Bouhlel Mohamed Salah

Cours POO

204

Travailler avec JDBC

Travailler avec JDBC

2. Etablissement de la connexion

2. Etablissement de la connexion

Bouhlel Mohamed Salah

Cours POO

205

Bouhlel Mohamed Salah

Cours POO

Travailler avec JDBC

Travailler avec JDBC

3. Accder la base de donnes

3. Accder la base de donnes

Laccs la BD se fait a travers un objet Statement que lon


obtient depuis lobjet Connexion.

Statement stmt = con.createStatement();


z

Cet objet Statement sert dintermdiaire pour passer les


requtes SQL la BD.

Comment vais-je excuter la requte alors ?

Bouhlel Mohamed Salah

Cours POO

207

206

Ca dpond du type de requte quon a :


z

executeQuery : pour les requtes de slection


(SELECT).

executeUpdate : pour les requtes INSERT, UPDATE,


DELETE, CREATE TABLE et DROP TABLE. Requte
de mise jour dans le cas gnrale.

execute : pour quelques cas rares (excution de


procdures stockes)

Bouhlel Mohamed Salah

Cours POO

208

Travailler avec JDBC

Travailler avec JDBC

3. Accder la base de donnes

3. Accder la base de donnes

Ex : requte de slection
String req = "SELECT * FROM personne" ;
ResultSet rs = stmt.executeQuery ( req ) ;

La m
mthode executeQuery est susceptible de g
gnrer une exception du
type SQLException :

Le rsultat dune requte de slection est un ensemble de ligne


stocker dans un objet ResultSet.

La m
mthode executeUpdate est susceptible de g
gnrer une exception du
type SQLException :

Ex : requte de mise jour


String req = "INSERT INTO personne VALUES (3,ali',salah')";
int nbMaj = stmt.executeUpdate ( req ) ;

Cours POO

Si la requte SQL est fausse.


Ne correspond pas une requte de mise jour.

Si executeUpdate retourne 0 alors :

La requte na affecter aucune ligne.

Ou

Le rsultat dune requte de mise jour est un entier


reprsentant le nombre de mise jour effectuer.
Bouhlel Mohamed Salah

Si la requte SQL est fausse.


Si la requte SQL passer comme paramtre ne correspond pas a une
requte de slection.

209

La requte est une requte DDL.

Bouhlel Mohamed Salah

Cours POO

Travailler avec JDBC

Travailler avec JDBC

4. Inspection du rsultat

4. Inspection du rsultat
z

Linstruction :

Les principales mthodes de la classe ResultSet sont :


z

getInt(int) / getInt(String) : retourne le contenu de la colonne dont


le numro / nom est pass en paramtre sous forme d'entier.

getFloat(int) / getFloat(String) : retourne le contenu de la colonne


dont le numro / nom est pass en paramtre sous forme de nombre
flottant.

getDate(int) / getDate(String) : retourne le contenu de la colonne


dont le numro / nom est pass en paramtre sous forme de date.

next() : se dplace sur le prochain enregistrement : retourne false si


la fin est atteinte.

Close() : ferme le ResultSet

getMetaData() : retourne un objet ResultSetMetaData associ au


ResultSet.

ResultSet rs = stmt.executeQuery ( req )


z

Dans le cas dune requte de slection le rsultat est stock


dans un ResultSet.
Un ResultSet reprsente une abstraction d'une table qui se
compose de plusieurs enregistrements constitus de
colonnes qui contiennent les donnes.
Reste alors le parcours de ce ResultSet ?
Bouhlel Mohamed Salah

Cours POO

211

210

Bouhlel Mohamed Salah

Cours POO

212

Travailler avec JDBC

Travailler avec JDBC

4. Inspection du rsultat

4. Inspection du rsultat : exemple

La mthode next() dplace le curseur sur le prochain


enregistrement.

Le curseur pointe initialement juste avant le premier


enregistrement : il est ncessaire de faire un premier appel la
mthode next() pour ce placer sur le premier enregistrement.

Des appels successifs next permettent de parcourir


l'ensemble des enregistrements.

Elle retourne false lorsqu'il n'y a plus d'enregistrement. Il faut


toujours protger le parcours d'une table dans un bloc de
capture d'exception.

Bouhlel Mohamed Salah

Cours POO

Soit la table
personne suivante :

Elle est constitue


des tuples suivant :

213

Bouhlel Mohamed Salah

Travailler avec JDBC

Travailler avec JDBC

4. Inspection du rsultat : exemple

5. fermeture

try
{
stmt=
stmt=con.createStatement();
con.createStatement();
String req=
req= "select * from personne" ;
rs = stmt.executeQuery (req)
req) ;
while(
while(rs.next())
rs.next())
{
System.out.print("id
System.out.print("id = "+ rs.getInt (1) +",\
+",\t ");
System.out.print("nom
("nom
=
"+
rs.getString
(2) +",\
System.out.print
+",\t ");
System.out.print("
prenom = "+ rs.getString (3) +"\
System.out.print("prenom
+"\n ");
}

Cours POO

214

Une fois le travail terminer on ferme toutes les connexions


ouvertes.

On utilise la mthode close() de la classe :


z
z
z

ResultSet
Statement
Connection

Exemple :
try {
rs.close();
stmt.close();
con.close();
} catch(SQLException e){}

}
catch(SQLException
(); }
catch(SQLException e){e.printStackTrace
e){e.printStackTrace();

Bouhlel Mohamed Salah

Cours POO

215

Bouhlel Mohamed Salah

Cours POO

216

Travailler avec JDBC

Travailler avec JDBC

Exemple Complet :

Suite exemple Complet :


try {
stmt=con.createStatement();
String req="select * from personne";
rs=stmt.executeQuery(req);
while(rs.next()){
System.out.print("id = "+rs.getInt(1)+",\t ");
System.out.print("nom = "+rs.getString(2)+",\t ");
System.out.print("prenom = "+rs.getString(3)+"\n ");
}
}catch(SQLException e){e.printStackTrace(); }
try {
rs.close();
stmt.close();
con.close();
} catch(SQLException e){} } }

import java.sql.*;
class Test {
public static void main(String[] args) {
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e)
{System.out.println("impossible de charger le drivers");}
try {
String url="jdbc:odbc:test";
con=DriverManager.getConnection(url,"","");
}catch(SQLException e)
{System.out.println("impossible de crer une connexion");}
Bouhlel Mohamed Salah

Cours POO

217

Chargement du driver de la BD

Bouhlel Mohamed Salah

Cours POO

219

Bouhlel Mohamed Salah

Cours POO

218