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