Vous êtes sur la page 1sur 53

Le langage Java

Cours Elec5 EPU


Granet Vincent
6 decembre 2010

Bibliography

0-0
V. Granet U.N.S.A.

Le langage Java

Part 1: Bibliography

R
ef
erences
[1] Vincent Granet and Jean-Pierre Regourd.
Aide-Memoire de Java. Dunod, 2 edition,
2008.
[2] Bertrand Meyer. Conception et
Programmation orientees objet. Eyrolles, 2000.
[3] Walter Savitch. Java, an Introduction to
Computer Science and Programming.
Prentice-Hall, 1999.
[4] H.M. Deitel and P.J. Deitel. Java. How to
program. Prentice-Hall, 1998.

Introduction

[5] J. Skansholm. Java From the Beginning.


Addison Wesley, 2000.
[6] R. Lafore. Data Structures and Algorithms in
Java. Wait Group Press, 1998.
[7] Vincent Granet. Algorithmique et
programmation en Java. Dunod, 2 edition,
2004.
[8] Web Java. voir http://java.sun.com.

V. Granet U.N.S.A.

Le langage Java

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Part 2: Introduction

Historique

Langage `a objets vs langage procedural

1991, J. Gosling et Sun. Langage pour


programmer des processeurs embarques dans
des appareils electromenagers
1994, Java utilise pour ecrire un navigateur
Web (futur HotJava)
Netscape inclut un interpr`ete Java dans son
navigateur
2006, Java 2 (version 1.6)
Java langage de programmation `a usage general
+ application pour le Web (applet = little
application)
Java embarque : PDA, telephones mobiles
Origine du nom : Oak puis Java (kawa)

crit`eres de justesse et fiabilite


structuration autour des actions
programmation descendante par raffinements
successifs
structuration autour des objets
perinite des objets par rapport aux actions

objet = attributs + methodes


programme = collection dobjets dynamiques
qui sont en interaction
envoie de messages
extensibilite, compatibilite, reutilisabilite

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

V. Granet U.N.S.A.

Inconvenients

langage `a objets
syntaxe simple
notation issue de C
portabilite
API tr`es vaste
javadoc
interfaces graphiques (awt, Swing)
environnement jdk gratuit

V. Granet U.N.S.A.

Part 2: Introduction

Avantages

Le langage Java

Le langage Java

produit industriel
temps dexecution - Interpretation (mais JIT)
API tr`es (trop ?) vaste, difficile `a maitriser
constructions archaques issues de C
temps reel

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Part 2: Introduction

Premi`eres applications

Compter les caract`eres

/* ma premi`
e re application Java */

/* * La classe Wc
e crit le nombre de caract`
e res

c l a s s HelloWorld {
public

static

v o i d main ( String [] args ) {

lus sur l entr


e e standard

*/

i m p o r t java . io .*;

System . out . println (" Hello World ! " );

public

c l a s s Wc {

public

} // fin classe HelloWorld

static

v o i d main ( String [] args )

t h r o w s IOException
{
i n t nbc = 0; // compteur de caract`eres
w h i l e ( System . in . read () != -1)
/* ma premi`
e re applet Java */

nbc ++;

i m p o r t java . awt . Graphics ;

// fin de fichier de lentr


ee standard

i m p o r t java . applet . Applet ;

System . out . println ( nbc );


}

public

c l a s s HelloWorldApplet e x t e n d s Applet {

} // fin classe Wc

p u b l i c v o i d paint ( Graphics g ) {
g . drawString ( " Hello World ! " , 5 , 25);
}
} // fin classe HelloWorldApplet

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Principe de compilation

Comment compiler et executer ?

interpretation
$ javac HelloWorld.java
$ java HelloWorld
compilateur Java
source
Java
(.java)

Java

Java
bytecode

Hello World!

fichier
Java
bytecode

$ javac HelloWorldApplet.java

(.class)

$ appletviewer HelloWorldApplet.html

<applet

interprte

code="HelloWorldApplet.class" width=400 height=150>

Java

</applet>

la variable CLASSPATH
Production code `a la volee (JIT)

V. Granet U.N.S.A.

Le langage Java

10

V. Granet U.N.S.A.

Le langage Java

11

Part 2: Introduction

La documentation

javadoc
produit une documentation en html
traite les commentaires /** */
reconnat des macros :
@author
@version
@param
@return
@see
...

Les types
el
ementaires

$ javadoc Wc.java
$ firefox index.html

V. Granet U.N.S.A.

Le langage Java

12

Part 3: Les types


el
ementaires

V. Granet U.N.S.A.

13

Part 3: Les types


el
ementaires

Les nombres

Le langage Java

Les booleens

Arithmetique classique
byte (8 bits)
short (16 bits)
int (32 bits)
long (64 bits)

boolean
false et true
operateurs :
!

la negation

la disjonction

la disjonction exclusive

Byte.MIN VALUE Byte.MAX VALUE

&

la conjection

Short.MIN VALUE Short.MAX VALUE

||

la disjonction conditionnelle

Integer.MIN VALUE Integer.MAX VALUE

&&

la conjection conditionnelle

123 0 98 067 0xAeF1

Long.MIN VALUE Long.MAX VALUE

float (32 bits)


double (64 bits)
123.12 0. .12 98.

i f (i < n && t [ i ]) {
....

3.5e-7

1.5e2

Float.MIN VALUE Float.MAX VALUE


Double.MIN VALUE Double.MAX VALUE

V. Granet U.N.S.A.

Le langage Java

14

V. Granet U.N.S.A.

Le langage Java

15

Part 3: Les types


el
ementaires

Part 3: Les types


el
ementaires

Les conteneurs

Les caract`eres

Les valeurs des types elementaires ne sont pas


des objets (au sens de la programmation objet)

char
jeu de caract`eres Unicode sur 16 bits
www.unicode.org
constantes denotees en apostrophes (e.g. a,
4, , etc.)
caract`eres speciaux :

Byte Short Integer Long


Float Double
Boolean

\b \f \n \r \t \\ \
valeur hexadecimale : \uxxxx (e.g. \u0041)
int nbEl`
eves;
double ;

Character
mais conversions implicites (jdk1.5)

Integer i = 5;
c h a r c = new Character ( z );

V. Granet U.N.S.A.

Le langage Java

16

V. Granet U.N.S.A.

Le langage Java

17

Part 4: Les
enonc
es

Les enonces conditionnels


meme semantique que C
if
switch

Les
enonc
es

V. Granet U.N.S.A.

Le langage Java

18

V. Granet U.N.S.A.

Le langage Java

19

Part 4: Les
enonc
es

Part 4: Les
enonc
es

Les enonces iteratifs


public

static

v o i d main ( String [] args ) t h r o w s IOEx

{
final

d o u b l e = 0.0001; // precision du calcul

d o u b l e a = StdInput . readDouble () ,
b = StdInput . readDouble () ,
c = StdInput . readlnDouble () ,
r1 , r2 , i1 , i2 , ;

meme semantique que C


while
do-while
for

// a6=0, b et c coefficients r
eels de
// l
equation du second degr
e, ax2 + bx + c

public

= ( b * b ) -4* a * c;

static

l o n g factorielle ( l o n g n )

// Ant
ec
edent: n > 0

i f ( >=0) { // calcul des racines reelles

// Cons
equent: factorielle=n!

i f (b >0) r1 = -( b + Math . sqrt ())/(2* a );


{

e l s e r1 = ( Math . sqrt () -b )/(2* a );


// r1 est la racine la plus grande en valeur absolue

l o n g i = 0 , fact = 1;

r2 =

// Invariant : fact=i!

Math . abs ( r1 ) < ? 0 : c /( a * r1 );

w h i l e (i < n ) {

i1 = i2 = 0;

// fact * (i+1) = i!*(i+1) et i<n

// (x-r1)(x-r2)=0

i ++;

// fact*i = i!

e l s e { // calcul des racines complexes


r1 = r2 = -b /(2* a );

fact *= i ;

i1 = Math . sqrt ( -)/(2* a ); i2 = - i1 ;

// fact = i!

// (x-(r1+ii1)) (x-(r2+ii2)) = 0

// i=n et fact = i! = n!

return

//
ecrire les racines solutions sur la sortie standard

System . out . println (" r1 = ( " + r1 + " ," + i1 + " ) " );

fact ;

System . out . println (" r2 = ( " + r2 + " ," + i2 + " ) " );


}

V. Granet U.N.S.A.

Le langage Java

20

V. Granet U.N.S.A.

Le langage Java

21

Part 5: Les objets

Objets et Classes
application = collection dobjets
dynamiques en interaction
objet = fournisseur de services utilises
par des clients
programmation par contrat. B. Meyer.
classe = moule `a objets
une classe nest pas un objet (en Java)
un objet est une instance dune classe
attributs et methodes

Les objets

c l a s s Rectangle {
d o u b l e largeur , longueur ;
}

V. Granet U.N.S.A.

Le langage Java

22

V. Granet U.N.S.A.

Le langage Java

23

Part 5: Les objets

Part 5: Les objets

Creation des objets

References
La variable r est une reference a
` lobjet, et non pas
lobjet lui-meme.

Rectangle r;
r = new Rectangle ();

Pb de laffectation, de la comparaison et du
passage de param`etre.

ou

Rectangle q = r ;

Rectangle r = new Rectangle ();

largeur
r
rfrence

0.0

longueur

0.0

rfrence

longueur

largeur
r

0.0

rfrence

0.0

objet de type Rectangle

V. Granet U.N.S.A.

Le langage Java

24

Part 5: Les objets

Le langage Java

25

Part 5: Les objets

Les constructeurs

V. Granet U.N.S.A.

Destruction des objets

pour initialiser lobjet construit


du nom de la classe
constructeur par defaut (e.g. Rectangle())
valeur initiale 0 (0.0, \u0000, false , null )

automatique en Java
`a la charge du support dexecution
va dans le sens de la securite

// construit un Rectangle de largeur l et de longueur L

Rectangle ( d o u b l e l , d o u b l e L ) {
largeur = l; longueur = L ;
}

Le constructeur par defaut est perdu ! Il faut le


redefinir.

// construit un Rectangle de largeur et de longueur e


gales a
` 0

Rectangle () {
largeur = longueur = 0.0;
}

V. Granet U.N.S.A.

Le langage Java

26

V. Granet U.N.S.A.

Le langage Java

27

Part 5: Les objets

Part 5: Les objets

Les methodes

Acc`es aux attributs et aux methodes

procedures et fonctions
objet = automate `a etats
une procedure modifie letat
une fonction renvoie une description de letat
mod`ele pas toujours possible

notation pointee
r.largeur;
r.p
erim`
etre();

attributs publics
attributs prives

c l a s s Rectangle {
d o u b l e largeur , longueur ;
// modifie la largeur du Rectangle courant

c l a s s Rectangle {

v o i d changerLargeur ( d o u b l e l ) {

p r i v a t e d o u b l e largeur , longueur ;

largeur = l ;

// modifie la largeur du Rectangle courant

p u b l i c v o i d changerLargeur ( d o u b l e l ) {

// renvoie le p
erim`
etre du Rectangle courant

d o u b l e p
e rim`
e tre () {

// renvoie le p
erim`
etre du Rectangle courant

largeur = l ;

r e t u r n 2 * ( largeur + longueur );

p u b l i c d o u b l e p
e rim`
e tre () {

r e t u r n 2 * ( largeur + longueur );

}
}

V. Granet U.N.S.A.

Le langage Java

28

Part 5: Les objets

V. Granet U.N.S.A.

Le langage Java

29

Part 5: Les objets

Methodes et attributs statiques

Paquetages(1/2)
Paquetage = ensemble de classes dune meme
thematique (java.awt, java.lang, java.math, ...)

static

i n t partag
e;

static

v o i d uneM
e thode () { ... }

java

Existent independamment de la creation des


objets
Accessibles avec le nom de la classe

applet

awt

javax org

io lang

p a c k a g e monpaquetage ;

des attributs

System.out

p a c k a g e mon . paquetage ;
p a c k a g e java . io ;

Math.PI
Math.exp(13.4)

des methodes

Math.sin(3.14)

le paquetage est un repertoire du syst`eme de


fichiers
par defaut une classe appartient au repertoire
courant
CLASSPATH

StdInput.readInt()
main

Les methodes statiques remettent en cause le


mod`ele objet !

V. Granet U.N.S.A.

Le langage Java

30

V. Granet U.N.S.A.

Le langage Java

31

Part 5: Les objets

Part 5: Les objets

Portees

Paquetages(2/2)
les classes

Notation qualifiee :

defaut

le paquetage

public

partout

java . util . Random r = new java . util . Random ();

les attributs et les methodes


mais

defaut

le paquetage

public

partout

private

la classe

protected

classe

i m p o r t java . util . Random ;


Random r = new Random ();

sous-classes
Exemples

paquetage

i m p o r t paquetage . classe ;
i m p o r t paquetage .*;
i m p o r t java . awt . Canvas ;
i m p o r t java . io .*;

V. Granet U.N.S.A.

Le langage Java

32

V. Granet U.N.S.A.

Le langage Java

33

Part 6: Les chanes de caract`


eres

Les chanes de caract`eres(1/3)


Les chanes de caract`eres sont des objets
String et StringBuilder

String s = " Hello " ;

est equivalent `
a

Les chanes de caract`


eres

String s = new String ( " Hello " );

la position du 1er caract`ere est `a 0


operateur de concatenation +
attribut length longueur du chane

V. Granet U.N.S.A.

Le langage Java

34

V. Granet U.N.S.A.

Le langage Java

35

Part 6: Les chanes de caract`


eres

Part 6: Les chanes de caract`


eres

Les chanes de caract`eres (2/3)


String pr
e nom = " Pierre " ,
nom

= " Martin " ;

La concatenation peut provoquer une


conversion implicite

System . out . println ( pr


e nom + " " + nom );
System . out . println ( pr
e nom . length );

System . out . println (5 + " 2 " );

pour un objet : appel implicite `a la methode


toString.

p u b l i c String toString () {
r e t u r n " Rectangle ( " + largeur + " ,"
+ longueur + " )" ;
}

V. Granet U.N.S.A.

Le langage Java

36

V. Granet U.N.S.A.

Le langage Java

37

Part 6: Les chanes de caract`


eres

Les chanes de caract`eres (3/3)


char

charAt(int index)

int

indexOf(int ch)

int

indexOf(int ch, int index)

int

indexOf(String str)

int

indexOf(String str, int index)

String

substring(int beginIndex)

String

toLowerCase()

String

toUpperCase()

int

compareTo(String s)

boolean

equals(String s)

Les tableaux

i n t pos = 0; // position du mod`ele dans le texte


w h i l e (( pos = texte . indexOf ( mod`
e le , pos )) != -1)
System . out . println ( pos ++);

V. Granet U.N.S.A.

Le langage Java

38

V. Granet U.N.S.A.

Le langage Java

39

Part 7: Les tableaux

Part 7: Les tableaux

Tableaux `a une dimension (1/4)


d o u b l e [] t3 = { 3.4 , 2.0 , -34 }; // 3 reels doubles
t1 = new i n t [] { 1 , 2 , 3 }; // 3 entiers

les tableaux sont des objets (mais pas


dheritage)
declaration :

i n t [] t ; // t est un tableau dentiers

La declaration dun tableau NE cree PAS ses composants

i n t [] t1 = new i n t [ 10 ]; // 10 entiers
Complexe [] t2 = new Complexe [5]; // 5 references

composants de t[0] `a t[max-1]


initialisation a` 0, false , \u0000ou null

V. Granet U.N.S.A.

Le langage Java

40

Part 7: Les tableaux

V. Granet U.N.S.A.

Le langage Java

41

Part 7: Les tableaux

Tableaux a` 1 dimension (2/4)

Tableaux `a 1 dimension (3/4)

la taille du tableau est fixee `a sa creation


lattribut length retourne le nb de composants
length ne peut pas etre modifie

public

c l a s s Table {

private

i n t [] tab ;

// le g
en
erateur de nombres al
earoires

p r i v a t e Random rand = new Random ();

Les variables de type tableau sont des references.


Les operateurs = et == nop`erent pas sur les composants !
t1 = t2 affectation de r
eferences
t1 == t2 comparaison de r
eferences
idem pour le passage de param`etres tableaux

p u b l i c Table ( i n t n )
// R^
ole: initialise le tableau tab de fa
con al
eatoire

{
i f (n <=0) {
System . err . println ( " taille <= 0 " );
System . exit (1);
}
tab = new i n t [ n ];
f o r ( i n t i = 0; i < tab . length ; i ++)
// les
el
ements tab[0]..tab[i-1] sont
// initialis
es de fa
con al
eatoire

t = ( i n t []) t1 . clone ();

tab [ i ] = rand . nextInt ();

System . out . println ( Arrays . equals (t , t1 ));

}
} // fin classe Table

V. Granet U.N.S.A.

Le langage Java

42

V. Granet U.N.S.A.

Le langage Java

43

Part 7: Les tableaux

Part 7: Les tableaux

Param`etres de lapplication

Tableaux a` 1 dimension (4/4)

tableau de chanes de caract`eres


param`etre de la fonction main

/* Trie une table par s


e lection ordinaire */

p u b l i c v o i d s
e lectionOrdinaire () {
f o r ( i n t i = 0; i < tab . length - 1 ; i ++) {
/* *

// le tableau tab[0..i-1] est tri


e, et ces e
l
ements
// sont inf
erieurs `
a ceux de tab[i..tab.length-1]

* Cette application
e crit sur la sortie standard

i n t min = i;

* ses param`
e tres pass
e s lors de son ex
e cution
*/

// chercher la place du min dans tab[i..tab.length-1]

c l a s s Echo {

f o r ( i n t j = i +1; j < tab . length ; j ++)

public

i f ( tab [ j] < tab [ min ]) min = j ;

static

v o i d main ( String [] args ) {

f o r ( i n t i = 0; i < ( args . length -1); i ++)

//
echanger le i`
eme et l
el
ement min

System . out . print ( args [ i ] + " " );

e changer ( min , i );

// e
crire le dernier param`
etre et le passage `
a la ligne

System . out . println ( args [ args . length -1]);

}
}

private void
e changer ( i n t i , i n t j ) {
}

//
echange les valeurs de tab[i] et tab[j]

i n t temp = tab [i ];
tab [ i ] = tab [j ];
tab [ j ] = temp ;
}

V. Granet U.N.S.A.

Le langage Java

44

Part 7: Les tableaux

V. Granet U.N.S.A.

Le langage Java

45

Part 7: Les tableaux

Tableaux `a plusieurs dimensions (1/3)

Tableaux `a plusieurs dimensions (2/3)

comme en C tableaux de tableaux


memes remarques qu`a une dimension

c l a s s Matrice {
// Invariant : this est une matrice (lignes,colonnes)

p r i v a t e \ d o u b l e [][] m;
d o u b l e [][] matriceD = new d o u b l e [m ][ n ];

publicfinal i n t nblgs , nbcols ;

Complexe [][][] matriceC = new Complexe [ m ][ n ][ t ];

// le g
en
erateur de nombres al
earoires

p r i v a t e Random rand = new Random ();


public

Matrice ( i n t l , i n t c )

// R^
ole: cr
eer une matrice (l,c)

le nombre de composants des dimensions peut


etre different

// v
erifier que l et c sont > 0

...
m = new i n t [ l ][ c ];
nblgs = l; nbcols = c ;

d o u b l e [][] matriceD = new d o u b l e [m ][];

...
}

matriceD [0] = new d o u b l e [5];

} // fin classe Matrice

matriceD [1] = new d o u b l e [10];


...

V. Granet U.N.S.A.

Le langage Java

46

V. Granet U.N.S.A.

Le langage Java

47

Part 7: Les tableaux

Tableaux `a plusieurs dimensions (3/3)

p u b l i c Matrice produit ( Matrice m ) {


// Ant
ec
edent : this(n,k) et m(k,p) sont
//

des matrices initialis


ees

// Cons
equent : renvoie une matrice (n,p)
//

produit de this par m

Matrice c =
new Matrice ( t h i s . nblgs ,m . nbcols );
f o r ( i n t i = 0; i < c . nblgs ; i ++)
f o r ( i n t j = 0; j < c . nbcols ; j ++) {
// x 0..i 1, y 0..j 1,
P
k = 1pthis xkm ky

H
eritage

// c x, y =

d o u b l e somme =0;
f o r ( i n t k = 0; k < t h i s . nbcols ; k ++)
somme += t h i s .m [ i ][ k ]* m . m [ k ][ j ];
c . m [i ][ j ] = somme ;
}
r e t u r n c;
}

V. Granet U.N.S.A.

Le langage Java

48

Part 8: H
eritage

V. Granet U.N.S.A.

Le langage Java

49

Part 8: H
eritage

Introduction

Classe heriti`eres (1/2)

propriete fondamentale des langages `a objets


outil de la reutilisabilite
biblioth`eques de classes extensibles

public

c l a s s Carr
e {

// Invariant de classe : cot


e > 0

p r i v a t e d o u b l e cot
e;
p u b l i c Carr
e( double c)
{
cot
e = c;
}
p u b l i c d o u b l e p
e rim`
e tre ()
// R^
ole: retourne le p
erim`
etre du carr
e

{
r e t u r n 4* cot
e;
}
p u b l i c d o u b l e surface ()
// R^
ole: retourne la surface du carr
e

{
r e t u r n cot
e * cot
e;
}
} // fin classe Carre

V. Granet U.N.S.A.

Le langage Java

50

V. Granet U.N.S.A.

Le langage Java

51

Part 8: H
eritage

Part 8: H
eritage

Heritage ou client

Classe heriti`eres (2/2)

relation est-un
relation a-un
mais ...

un carre est un rectangle particulier


reutilisation de la classe Rectangle

public

c l a s s Carr
e e x t e n d s Rectangle {

// Invariant de classe : largeur == longueur > 0

public

p u b l i c Carr
e ( d o u b l e c) {

c l a s s Rectangle {

Point origine ;

s u p e r (c ,c );

...

p u b l i c v o i d changerCot
e ( d o u b l e cot
e) {
// R^
ole: met `
a jour le cot
e

changerLargeur ( cot
e );
changerLongueur ( cot
e );

ou

}
}

public

c l a s s Rectangle e x t e n d s Point {

....

protected
super et super()

la classe Object
le graphe dheritage
heritage = specialisation et extension

V. Granet U.N.S.A.

Le langage Java

52

Part 8: H
eritage

V. Granet U.N.S.A.

Le langage Java

53

Part 8: H
eritage

Redefinition des methodes (1/2)

Redefinition des methodes (2/2)

les classes heriti`eres peuvent redefinir des


methodes
elles doivent posseder la meme signature (sinon
surcharge)
les classes Rectangle et Carre definissent les
methodes suivantes :

Rectangle r = new Rectangle (2 ,4);


Carr
e c = new Carr
e (6);
System . out . println ( r ); // r.toString()
System . out . println ( c ); // c.toString()

// Dans la classe Rectangle

p u b l i c String toString ()

rectangle de largeur 2 et de longueur 4

carr
e de cot
e
egal `
a 6
r e t u r n " rectangle de largeur " + largeur
+ " et de longueur " + longueur ;

}
// Dans la classe Carr
e

p u b l i c String toString ()
{
r e t u r n " carr
e de cot
e
e gal `
a " + largeur ;
}

V. Granet U.N.S.A.

Le langage Java

54

V. Granet U.N.S.A.

Le langage Java

55

Part 8: H
eritage

Part 8: H
eritage

Recherche dun attribut ou dune methode

Polymorphisme (1/2)

chaque fois que lon desire acceder `a un attribut


ou une methode dune occurrence dobjet dune
classe C, il devra etre defini soit dans la classe
C, soit dans lun de ses ancetres.
si lattribut ou la methode nest pas trouve,
cest une erreur
sil y a eu des redefinitions, sa premi`ere
apparition en remontant le graphe dheritage
sera choisie.

langages polymorphiques et non


polymorphiques (langage type et non type)
polymorphisme dans les langages de classes est
contr
ole par lheritage

Rectangle r;
Carr
e c = new Carr
e (3);
r = c; // valide : un carre est rectangle
c = r; // erreur de compilation !
// un rectangle nest pas (forc
ement) un carr
e

Cast : c = (Carre) r ; si on est s


ur que r est un
Carre
Exemple une classe Forme pour representer les
formes geometriques quelconques

V. Granet U.N.S.A.

Le langage Java

56

Part 8: H
eritage

V. Granet U.N.S.A.

Le langage Java

57

Part 8: H
eritage

Liaison dynamique

Polymorphisme (2/2)

Forme

tf [0] = new Rectangle (3 ,10);


tf [1] = new Cercle (7);
...
tf [0] = tf [1]; // tf[0] designe un cercle ?
...

Ellipse

Rectangle

Cercle

System . out . println ( tf [0]); // toString() de Cercle ?

lorsque quil y a des redefinitions de methodes,


cest a` lexecution que lon connat la methode
a` appliquer.
elle est determinee `a partir de la forme
dynamique de lobjet sur lequel elle sapplique.
Interet :
localisation
evite le pb du switch

Carr

Forme [] tf = new Formes [10];

V. Granet U.N.S.A.

Le langage Java

58

V. Granet U.N.S.A.

Le langage Java

59

Part 8: H
eritage

Part 8: H
eritage

Classes et methodes abstraites

Heritage simple vs multiple

Une methode abstraite nest definie que par sa


signature
Introduite par le mot-cle abstract
Une classe peut etre declaree abstraite,
elle decrit des caracteristiques mais pas un
fonctionnement

public abstract

en Java lheritage est simple


evite les pb complexes de recherche des noms
de lheritage multiple
Cercle

Carr

c l a s s Forme {

p u b l i c a b s t r a c t i n t p
e rim`
e tre ();

CercledansCarr

p u b l i c a b s t r a c t i n t surface ();
}

les interfaces permettent un heritage multiple


simplifie
Une classe abstraite ne peut etre instanciee !

V. Granet U.N.S.A.

Le langage Java

60

Part 8: H
eritage

V. Granet U.N.S.A.

Le langage Java

61

Part 8: H
eritage

Interfaces (1/2)

Interfaces (2/2)

pour une forme simplifiee de lheritage multiple


pour la genericite
ce sont des classes dont toutes les methodes
sont implicitement abstraites
elles ne poss`edent pas dattribut, `a lexception
de constantes
ne peuvent pas etre instanciees

une classe peut se comporter comme une ou


plusieurs interfaces
Elle doit implanter (implements) le ou les
interfaces
elle et ses descendants sengagent `a definir le
corps des methodes de linterface

c l a s s MaClasse i m p l e m e n t s MonInterface {
public

p u b l i c v o i d uneM
e thode ( i n t x ) {

i n t e r f a c e MonInterface {

static

final

....

i n t uneConstate = 10;
}

a b s t r a c t p u b l i c v o i d uneM
e thode ( i n t x );
}

V. Granet U.N.S.A.

Le langage Java

62

Serializable
Cloneable
Runnable
ActionListener
...

V. Granet U.N.S.A.

Le langage Java

63

Part 8: H
eritage

Part 8: H
eritage

Interfaces et Polymorphisme
I [] table = new I [10];

les interfaces permettent un polymorphisme


independant de la hierarchie dheritage

table [0] = new C1 ();


table [1] = new C2 ();
table [2] = new C3 ();

une variable de type interface I peut designer


nimporte quel objet de toute classe qui implante
cette interface.

c l a s s C1 i m p l e m e n t s I {
...
}
c l a s s C2 i m p l e m e n t s I {
...
}
c l a s s C3 i m p l e m e n t s I {
...
}

V. Granet U.N.S.A.

Le langage Java

64

Part 8: H
eritage

V. Granet U.N.S.A.

Le langage Java

65

Part 8: H
eritage

Interfaces et genericite(1/2)

Interfaces et genericite(2/2)

appliquer un traitement des objets quel que soit


leur type
jusqu`
a la version 1.4.2 de Java, la genericite est
limitee et `a mettre en uvre avec des interfaces
version 1.5 : notion du langage `a part enti`ere

c l a s s Carr
e Comparable e x t e n d s Carr
e
implements
E ltComparable {
p u b l i c b o o l e a n infOu
E gal ( EltComparable o ) {
r e t u r n t h i s . surface () <= (( Carr
e Comparable ) o
}
}

On veut ecrire une methode de tri qui puisse trier


un tableau dobjets quelconques on doit
pouvoir les comparer

c l a s s PersonneComparable e x t e n d s Personne
ltComparable {
implements E
E gal ( EltComparable o ) {
p u b l i c b o o l e a n infOu
r e t u r n t h i s . taille () <= (( PersonneComparable )
}
}

ltComparable [] t ) {
v o i d tri ( E
gal ( t [j ]) ...
... t [ i ]. infOu E

public

static

}
interface
E ltComparable {
E gal ( EltComparable o );
p u b l i c b o o l e a n infOu
Carr
e Comparable [] t1 =

{ new Carr
e Comparable (3) , ... ,
new Carr
e Comparable (12) , ... };
C . tri ( t1 );
PersonneComparable [] t2 =
{ new PersonneComparable (1.73) , ... ,
new PersonneComparable (1.90) , };
C . tri ( t2 );

V. Granet U.N.S.A.

Le langage Java

66

V. Granet U.N.S.A.

Le langage Java

67

Part 9: Les exceptions

Le probl`eme
Un evenement qui indique une situation anormale
pouvant provoquer un dysfonctionnement du
programme :
pb materiel (E/S, memoire, ...)
pb logiciel (division par zero, non respect des
invariants, ...)

tantque B f a i r e
...

Les exceptions

s i erreur a l o r s
traiter erreur
finsi
...
fintant

le code normal et le traitement des erreurs


melanges
code de retour (souvent un entier) pauvre en
information
un mecanisme elabore : les exceptions

V. Granet U.N.S.A.

Le langage Java

68

Part 9: Les exceptions

V. Granet U.N.S.A.

Le langage Java

69

Part 9: Les exceptions

Traitement

Exceptions en Java

Une exception survient au cours de lexecution


dune action :

Les exceptions sont des objets


situation anormale emission dune exception
java.lang.Exception java.lang.Throwable

reexecution de laction en changeant les


conditions initiales dexecution ;
transmission de lexception `a lenvironnement

Object

Throwable

E1
Error

E2

RuntimeException

E3

ArithmeticException

E4

V. Granet U.N.S.A.

Exception

Le langage Java

IOException

........

........

toutes les exceptions (sauf RuntimeException )


doivent etre explicitement capturees ou
deleguees

exception

70

V. Granet U.N.S.A.

Le langage Java

71

Part 9: Les exceptions

Part 9: Les exceptions

Capture dune exception (1/2)

Capture dune exception (2/2)

clauses try-catch
try {
i n t x = StdInput . readlnInt ();

try {

....

// code normal

...
o. m ();

c a t c h ( IOException e ) {
// la m
ethode m peut provoquer une exception

System . err . println ( e );

...

System . exit (1);

c a t c h ( UneException e ) {
// code de traitement de lexception d
esign
ee par e

...
}

public

static

i n t lirelnInt () {

try {

clause finally

r e t u r n StdInput . readlnInt ();


}
c a t c h ( IOException e ) {
System . err . println (e );

finally {

System . out . println (" r


e essayer : " );

// code ex
ecut
e quoiquil arrive

r e t u r n lirelnInt ();

}
}

V. Granet U.N.S.A.

Le langage Java

72

Part 9: Les exceptions

V. Granet U.N.S.A.

Le langage Java

73

Part 9: Les exceptions

Delegation dune exception

Creer ses propres exceptions

une methode nest pas tenue de capturer une


exception
elle peut deleguer la capture `a son
environnement
elle le signale avec la clause throws dans son
en-tete
sauf pour les exceptions de type

public

c l a s s MonException e x t e n d s Exception {

i n t code ;
p u b l i c MonException () {
s u p e r ();
}
p u b l i c MonException ( String msg ) {
s u p e r ( msg );
}

RuntimeException

p u b l i c MonException ( String msg , i n t c ) {


s u p e r ( msg );
code = c ;

// c 6= 0

p u b l i c v o i d maM
e thode () t h r o w s IOException {

p u b l i c String toString () {

i n t x = StdInput . readlnInt ();

r e t u r n getMessage () + " " + code ;

....
}

}
}

V. Granet U.N.S.A.

Le langage Java

74

V. Granet U.N.S.A.

Le langage Java

75

Part 9: Les exceptions

Emettre
une exception
throw (sans s)

p u b l i c v o i d uneM
e thode () {
i f (...) {
throw new ArithmeticException ();
}
...
}

Les entr
ees/sorties
p u b l i c v o i d maM
e thode () t h r o w s MonException {
i f (...) {
throw new MonException (" une erreur " , 3);
}
...
}

la clause throws est obligatoire dans len-tete


de la methode qui l`eve une exception (sauf
RuntimeException )
V. Granet U.N.S.A.

Le langage Java

76

Part 10: Les entr


ees/sorties

V. Granet U.N.S.A.

Fichiers doctets

flots sequentiels unidirectionnels


flots `a acc`es direct
octets et caract`eres Unicode
quatre classes de base :

Declaration :

FileInputStream is = new FileInputStream ( " entr


e e " );
FileOutputStream os = new FileOutputStream ( " sortie " );

lecture

ecriture

flots doctets

InputStream

OutputStream

flots de caract`eres

Reader

Writer

methodes de base :
int read()
void write(int)
void close()

paquetage java.io

V. Granet U.N.S.A.

77

Part 10: Les entr


ees/sorties

Flots doctets et de caract`eres

Le langage Java

Le langage Java

78

V. Granet U.N.S.A.

Le langage Java

79

Part 10: Les entr


ees/sorties

Part 10: Les entr


ees/sorties

Exemple : recopie dun fichier

Fichier dobjets elementaires

p u b l i c v o i d copie ( String in , String out )


t h r o w s IOException
{
FileInputStream is =

new FileInputStream ( in );

DataInputStream et DataOutputstream
readChar, writeChar, readInt, writeInt,
readDouble, writeDouble, ...
fin de fichier exception EOFException

FileOutputStream os = new FileOutputStream ( out )


p u b l i c d o u b l e moyenne ( String in )

i n t c;

t h r o w s IOException {

w h i l e (( c = is . read ()) != -1)

DataInputStream is =

os . write ( c );

new DataInputStream (new FileInputStream ( in ))

// EOF de is

is . close ();

i n t nb
E lem = 0;

os . close ();

d o u b l e moy = 0;
try {

while ( true ) {
moy += is . readDouble ();
nb
E lem ++;
}
}
c a t c h ( EOFException e ) {
is . close ();
}
r e t u r n nb
E lem == 0 ? 0 : moy / nb
E lem ;
}

V. Granet U.N.S.A.

Le langage Java

80

Part 10: Les entr


ees/sorties

V. Granet U.N.S.A.

Le langage Java

81

Part 10: Les entr


ees/sorties

Fichier dobjets

Fichier de texte

ObjectInputStream et ObjectOutputstream
Object readObject()
void writeObject(Object)

- caract`eres Unicode
- FileReader et FileWriter

Rectangle r = new Rectangle (3 ,4);


ObjectOutputStream os = new ObjectOutputStream (
new FileOutputStream ( " Frect " )
//
ecriture dun objet de type Rectangle sur le fichier os

os . writeObject ( r );
os . close ();
ObjectInputStream is = new ObjectInputStream (
new FileInputStream ( " Frect " ))
// lecture dun objet de type Rectangle sur le fichier is

r = ( Rectangle ) is . readObject (); // conversion necessaire


is . close ();

interface Serializable

public

c l a s s Rectangle i m p l e m e n t s Serializable {

...

V. Granet U.N.S.A.

Le langage Java

82

V. Granet U.N.S.A.

Le langage Java

83

Part 10: Les entr


ees/sorties

Part 10: Les entr


ees/sorties

E/S bufferisees
FileReader is = new FileReader (" entr
e e " );
boolean
e tatDansMot = f a l s e ;

Pour ameliorer les performances, les lectures et


les ecritures utilisent une zone tampon.

i n t c , nbCar = 0 , nbMots = 0 , nbLignes = 0;


w h i l e (( c = is . read ()) != -1) {
// incr
ementer le compteur de caract`
eres

BufferedInputStream, BufferedOutputStream

nbCar ++;

BufferedReader, BufferedWriter

i f (c == || c == \ t || c == \ n ) {
// c est un s
eparateur de mot

i f (
e tatDansMot )
e tatDansMot = f a l s e ;
i f ( c == \ n )

FileInputStream is = new FileInputStream ( " entr


e e " );

// fin dune ligne incr


ementer le compteur de lignes

FileOutputStream os = new FileOutputStream ( " sortie " );

nbLignes ++;
}

BufferedInputStream bis = new BufferedInputStream ( is );

e l s e // on est dans un mot

BufferedOutputStream bos = new BufferedOutputStream ( os )

i f (!
e tatDansMot ) {
// 1er car du mot incr
ementer le compteur de mots

nbMots ++;

e tatDansMot = t r u e ;
}
}
// fin de fichier afficher les r
esultats

is . close ();
System . out . println ( nbLignes + " " + nbMots + " " + nbCar

V. Granet U.N.S.A.

Le langage Java

84

V. Granet U.N.S.A.

Le langage Java

85

Part 10: Les entr


ees/sorties

Entree et sortie standard


System.in de type InputStream
System.out de type PrintStream
System.err de type PrintStream
La classe PrintStream propose des methodes print
et println pour ecrire tout type dobjet apr`es
conversion en chane de caract`eres avec
toString()
System.in ne permet de lire que des octets. Pas de

LAPI

conversion de type implicite classe locale StdInput

d o u b l e x = System . in . read (); // suspect


d o u b l e x = StdInput . readlnDouble ();

V. Granet U.N.S.A.

Le langage Java

86

V. Granet U.N.S.A.

Le langage Java

87

Part 11: LAPI

Part 11: LAPI

Application Programming Interface

ensemble de classes pretes `a lemploi


couvre de nombreux aspects de linformatique
facilite la construction des applications
offre des algorithmes efficaces

collections
arithmetique precision infinie
gestion dimages 2D et3D
gestion du son
interfaces graphiques et applet
processus legers - synchronisation
reseau (URL, mod`ele client-serveur RMI, objets
distribues IDL Corba)
beans
base de donnees (jdbc)
reflexivite
SDK (mecanismes de securite)

V. Granet U.N.S.A.

Le langage Java

Collections et Tables

88

Part 11: LAPI

paquetage java.util
Vector, tableaux dynamiques
Hashtable, tables dadressage dispers
e
Stack, piles
ensembles
listes
arbres
algorithmes de tri
algorithmes de recherche
...

V. Granet U.N.S.A.

Le langage Java

89

Part 11: LAPI

Collections

La classe

tableau dynamique dont la taille est ajustable en


fonction des besoins

Collection

List

Vector

Set

Vector v = new Vector (3);


ArrayList

Vector

LinkedList

SortedSet

HashSet

System . out . println ( v . size ());

// 0

f o r ( i n t i = 0; i < 10; i ++)


v. addElement (new Integer ( i * i ));

TreeSet

System . out . println ( v . size ());

Liste et Ensembles generiques


Enonce foreach

// 10

System . out . println ( v . elementAt (3)); // 9


v . setSize (20);
v . setElementAt (new Integer (3) ,18);
System . out . println ( v . size ());

//

20

//

19

//

v . removeElementAt (0);
System . out . println ( v . size ());
List < String > vs = new Vector < String >();

v . removeAllElements ();

SortedSet < String > ts = new TreeSet < String >( vs );

V. Granet U.N.S.A.

Le langage Java

System . out . println ( v . size ());

90

V. Granet U.N.S.A.

Le langage Java

91

Part 11: LAPI

Part 11: LAPI

Tables

La classe

Hashtable

Table dont les elements sont reperes par des cles


et dont lacc`es se fait par adressage disperse.

Map

Hashtable < String , Integer > ht =


new Hashtable < String , Integer >();

SortedMap
ht . put ( " Paul " , 3);

ht . put ( " Pierre " ,19);


Integer n =

TreeMap

HashMap

Hashtable

ht . get ( " Pierre " );

i f ( n != n u l l )
System . out . println ( " Pierre = " + n );

Valeur + Cle

V. Granet U.N.S.A.

Le langage Java

92

Part 11: LAPI

V. Granet U.N.S.A.

Le langage Java

93

Part 11: LAPI

Les Properties

Threads

sous-classe de Hashtable
correspondance cles et des valeurs String
une instance de Properties peut etre reliee `a
une autre instance de Properties
lues et sauvegardees dans un fichier (texte ou
XML)

processus legers vs processus


execution (quasi) parall`ele des processus
partage de ressources communes
interface runnable
synchronisation (methodes synchronized)

c l a s s MonThread e x t e n d s Thread {
p u b l i c MonThread () { ... }

Properties p1 = new Properties ();


Properties p2 = new Properties ( p1 );

p u b l i c v o i d run () { ... }

p1 . setProperty ( " Auteur " , " Moli`


e re " );
}

p2 . setProperty ( " Compositeur " , " Bach " );

public

System . out . print ( p1 . getProperty ( " Auteur " ));

c l a s s TestThread {

public

System . out . print ( p2 . getProperty ( " Compositeur " ));

static

v o i d main ( String [] arg ) {

MonThread threadA = new MonThread () ,

System . out . println ( p2 . getProperty ( " Acteur " ," inconnu " ));

threadB = new MonThread ();


//

threadA . start () // et non pas run()

propri
et
es de lenvironnement dex
ecution

threadB . start ();

System . out . print ( System . getProperty (" java . version " ));
}

System . out . print ( System . getProperty (" os . version " ));


}

System . out . println ( System . getProperty ( " os . arch " ));

V. Granet U.N.S.A.

Le langage Java

94

V. Granet U.N.S.A.

Le langage Java

95

Part 11: LAPI

Interfaces Graphiques

necessite des interfaces graphiques


Abstract Window Toolkit (AWT)
Java Foundation Classes (JFC) Swing
applet (little application)
programmation par evenements
composants graphiques (boutons, menus,
canvas, ascenseurs, botes de dialogue, etc.)

Introspection

V. Granet U.N.S.A.

Le langage Java

96

V. Granet U.N.S.A.

Le langage Java

97

Part 12: Introspection

Introspection
possibilite de consulter et dutiliser
dynamiquement la structure de classe des
objets.
necessaire pour les butineurs de classes,
debogueurs, ...
la classe Class et le paquetage
java.lang.reflect permet lintrospection

Beans

V. Granet U.N.S.A.

Le langage Java

98

V. Granet U.N.S.A.

Le langage Java

99

Part 13: Beans

Part 13: Beans

Beans (1/13)

Beans (2/13)

grain (de cafe)


composant logiciel reutilisable destine `a etre
manipule par un outil de developpement
interactif et graphique (beanbox, beanbuilder,
...)
bean = classe Java
implemente linterface Serializable
constructeur public sans param`etre
pour etre exploitable, un bean doit etre archive
(format jar)

V. Granet U.N.S.A.

Le langage Java

Un bean :
est capable dintrospection (reflect, inspector)
poss`ede des proprietes (accessibles par des
methodes setXX(), getXX(), isXX()),
realise la persitence (une fois crees, les beans
doivent pouvoir etre conserves)
communication entre beans par des evenements

100

Part 13: Beans

V. Granet U.N.S.A.

Le langage Java

101

Part 13: Beans

Beans (3/13)

Beans (4/13)
Compilation et archivage

i m p o r t java . awt .*;

javac

i m p o r t java . io .*;
public

FirstBean.java

jar cvfm FirstBean.jar manifest.tmp FirstBean.class

c l a s s FirstBean e x t e n d s Canvas
i m p l e m e n t s Serializable {

final

public

static

i n t RECTANGLE = 0;

final

public

static

i n t CERCLE = 1;

protected

fichier manifest

i n t forme = CERCLE ; // propriete


Name: FirstBean.class

p u b l i c FirstBean () {

Java-Bean: True

setSize (100 ,100); // taille du canvas


}
p u b l i c v o i d paint ( Graphics g ) {
g . drawRect (2 ,2 ,90 ,90);
g . setColor ( Color . red );
i f ( forme == RECTANGLE ) g. fillRect (10 ,10 ,20 ,20)
e l s e g . fillArc (10 ,10 ,20 ,20 ,0 ,360);
}
// m
ethodes dacc`
es `
a la prori
et
e forme

p u b l i c i n t getForme () { r e t u r n forme ; }
p u b l i c v o i d setForme ( i n t f) { forme = f; }
}

V. Granet U.N.S.A.

Le langage Java

102

V. Granet U.N.S.A.

Le langage Java

103

Part 13: Beans

Part 13: Beans

Beans (5/13)

Beans (6/13)

Un bean source peut emettre un evenement qui


produit lexecution dune action sur un bean cible.

3. gestion de lemission de levenement (source)

1. definition de levenement (ObjectEvent)

i m p o r t java . util .*;


public

c l a s s MyEvent e x t e n d s EventObject {

p u b l i c MyEvent ( Object o ) {
s u p e r ( o );
}
}

2. definition de lauditeur (EventListener)

i m p o r t java . util .*;


public

i n t e r f a c e MyEventListener e x t e n d s EventListe

p u b l i c a b s t r a c t v o i d myEventPerformed ( MyEvent e
}

V. Granet U.N.S.A.

Le langage Java

104

Part 13: Beans

V. Granet U.N.S.A.

Le langage Java

105

Part 13: Beans

Beans (7/13)
i m p o r t java . util .*;
public

c l a s s Source {

p r i v a t e Vector myEventListeners = new Vector ();

4. gestion de la reception (cible)

p u b l i c s y n c h r o n i z e d v o i d addMyEventListener ( MyEv
myEventListeners . addElement ( l );
public

c l a s s Cible i m p l e m e n t s MyEventListener {

Source src = new Source ();

p u b l i c s y n c h r o n i z e d v o i d removeMyEventListener ( M

p u b l i c Cible () {

myEventListeners . removeElement ( l );

src . addMyEventListener ( t h i s );

}
}

p r o t e c t e d v o i d notifyMyEvent () {

p u b l i c v o i d myEventPerformed ( MyEvent e ) {

Vector l ;
MyEvent e = new MyEvent ( t h i s );

// callback ...

synchronized ( t h i s ) {
}

// pour
eviter toute modification

l = ( Vector ) myEventListeners . clone ();


}
f o r ( i n t i =0; i < l . size (); i ++) {
MyEventListener mel = ( MyEventListener ) l . ele
mel . myEventPerformed ( e );
}
}
...
\ emph { appel `
a notifyMyEvent pour
e mettre l
e v
e neme
...
}

V. Granet U.N.S.A.

Le langage Java

106

V. Granet U.N.S.A.

Le langage Java

107

Part 13: Beans

Part 13: Beans

Beans (8/13)

Beans (9/13)

Les proprietes peuvent etre liees (lien


unidirectionnel).

i m p o r t java . beans .*;


public

Lorsquil y modification dune propriete liee, il


faut notifier le changement.

c l a s s FirstBean e x t e n d s Canvas i m p l e m e n t s

....
p r i v a t e PropertyChangeSupport changes

= new PropertyChangeSupport ( t h i s )

Elle envoie un PropertyChangeEvent chaque fois


quelle change. Levenement est recu par les
auditeurs qui implementent
PropertyChangeListener.

p u b l i c v o i d addPropertyListener ( PropertyChangeListene
{
changes . addPropertyChangeLi ste ner ( l );
}
p u b l i c v o i d removePropertyListener (

PropertyChangeEvent poss`ede les methodes :

PropertyChangeListener l ) {
changes . removePropertyCha ng eLi st ene r (l );

getSource()
getOldValue()
getNewValue()
getPropertyName()

}
p u b l i c v o i d setForme ( i n t newForme )
{
i n t oldForme = newForme ;
forme = newForme ;

changes . firePropertyChange ( " forme " , oldForme , newForm


}
...
}

V. Granet U.N.S.A.

Le langage Java

108

Part 13: Beans

V. Granet U.N.S.A.

109

Part 13: Beans

Beans (10/13)

Beans (11/13)

Le bean auditeur doit implementer linterface


PropertyChangeListener.

i m p o r t java . beans .*;


public

Le langage Java

c l a s s BeanAudit

i m p l e m e n t s PropertyChangeListener ,

Serializable

{
......

Une propriete peut etre aussi contrainte :


elle envoie un PropertyChangeEvent juste avant
quelle ne change. Mais dautres composants
peuvent soppser `a ce changement
VetoableChangeListener.
Les methodes setXX doivent gerer lexception
PropertyVetoException.

p u b l i c v o i d propertyChange ( PropertyChangeEvent e )
....
}
...
}

V. Granet U.N.S.A.

Le langage Java

110

V. Granet U.N.S.A.

Le langage Java

111

Part 13: Beans

Part 13: Beans

Beans (12/13)

Beans (13/13)
Le bean qui emet le veto

i m p o r t java . beans .*;


public

c l a s s FirstBean e x t e n d s Canvas

public

i m p l e m e n t s Serializable {

c l a s s BeanAudit

i m p l e m e n t s VetoableChangeListener ,

p r i v a t e VetoableChangeSupport v
e to

Serializable

= new VetoableChangeSupport ( t h i s )

......

p u b l i c v o i d addVetoableChangeLis ten er (

p u b l i c v o i d vetoableChange ( PropertyChangeEvent e )

VetoableChangeListener l ) {

t h r o w s PropertyVetoException {

changes . addVetoableChangeLi ste ner ( l );

....

p u b l i c v o i d removeVetoableCha nge Li ste ne r (

PropertyChangeListener l ) {
changes . removeVetoableCha ng eLi st ene r (l );
}
p u b l i c v o i d setForme ( i n t newForme )
t h r o w s PropertyVetoException {
i n t oldForme = newForme ;
v
e to . fireVetoableChange (" forme " , oldForme , newForme );
forme = newForme ;
changes . firePropertyChange ( " forme " , oldForme , newForm
}
...
}

V. Granet U.N.S.A.

Le langage Java

112

V. Granet U.N.S.A.

Le langage Java

113

Part 14: Threads

Introduction

processus = programme en cours dexecution


execution (quasi) parall`ele des processus
processus leger (thread)
la classe Thread (java.lang)

c l a s s MonThread e x t e n d s Thread {
p u b l i c MonThread () { ... }
p u b l i c v o i d run () { ... }

Threads

}
public

c l a s s TestThread {

public

static

v o i d main ( String [] arg ) {

MonThread threadA = new MonThread () ,


threadB = new MonThread ();
threadA . start () // et non pas run()
threadB . start ();
}
}

V. Granet U.N.S.A.

Le langage Java

114

V. Granet U.N.S.A.

Le langage Java

115

Part 14: Threads

Part 14: Threads

Linterface Runnable (1/2)

Linterface Runnable (2/2)

pas dheritage multiple interface Runnable


Thread t1 = new Thread(t2)

public

creation des processus legers


demarrage des processus legers
un thread pour main
application terminee lorsque tous les threads
sont finis
priorite (getPriority() et setPriority(p))

c l a s s Al
e atoire i m p l e m e n t s Runnable {

p u b l i c Thread proc = new Thread ( t h i s );


p r i v a t e Random rand ;
p r i v a t e l o n g intervalle ;
p u b l i c Al
e atoire ( l o n g germe , l o n g time ) {
rand = new Random ( germe );

public

intervalle = time * 1000;

c l a s s TestProd {

public

static

v o i d main ( String [] args ) {

new Al
e atoire (10 , 1). proc . start ();

p u b l i c v o i d run () {

new Al
e atoire (15 , 3). proc . start ();

while ( true ) {

new Al
e atoire (13 , 3). proc . start ();

t r y { Thread . sleep ( intervalle ); }

c a t c h ( InterruptedException e ) {}
System . out . print ( rand . nextInt () + " " );

System . out . flush ();


}
}
} // fin classe Aleatoire

V. Granet U.N.S.A.

Le langage Java

116

Part 14: Threads

V. Granet U.N.S.A.

Le langage Java

117

Part 14: Threads

Etats
dun threads

Interruption dun processus (1/2)

BLOCKED

thread en attente de la lib


eration dune
donn
ee.

NEW

thread qui na pas encore commenc


e`
a
sex
ecuter.

RUNNABLE

thread ex
ecutable, pr
et `
a disposer de la
puissance de calcul.

methode interrupt()
le processus peut verifier sil est interrompu ou
non (il g`ere linterruption)

p u b l i c v o i d run () {

thread dont lex


ecution est termin
ee.

TERMINATED

w h i l e (! Thread . interrupted ()) {


try {

thread en attente avec une dur


ee maximum sp
ecifi
ee.

TIMED WAITING

Thread . sleep ( intervalle );


}

thread en attente.

WAITING

c a t c h ( InterruptedException e ) {
// interruption lors du sleep

break ;
}

new Thread()

System . out . print ( rand . nextInt () + " " );


System . out . flush ();
}

NEW

TERMINATED
yield()

start()

fin de run()
RUNNABLE

sleep(dure)

fin dure

TIMED_WAITING

V. Granet U.N.S.A.

IO?

IO ok

BLOCKED

Le langage Java

wait()

notify()

WAITING

118

V. Granet U.N.S.A.

Le langage Java

119

Part 14: Threads

Part 14: Threads

Attente de la fin dun thread

Interruption dun processus (2/2)

public

methodes join() ou join(long ms) (pour les


timeout)

c l a s s TestProd {

public

static

v o i d main ( String [] args ) {

new Al
e atoire (10 , 1). proc . start ();
public

new Al
e atoire (15 , 3). proc . start ();

static

v o i d main ( String [] args ) {

Al
e atoire p1 = new Al
e atoire (10 , 1);

Al
e atoire p = new Al
e atoire (13 , 1);
p . proc . start ();

Al
e atoire p2 = new Al
e atoire (15 , 2);

...

Al
e atoire p3 = new Al
e atoire (13 , 1);

// arr^
et du 3`
eme thread

p1 . proc . start ();

p . proc . interrupt ();

p2 . proc . start ();

p3 . proc . start ();

try {
p1 . proc . join (); // attendre la fin de p1
p2 . proc . join (); // attendre la fin de p2
p3 . proc . join (); // attendre la fin de p3
}
c a t c h ( InterruptedException e ) {}

interruption dans le sleep exception


hors du sleep drapeau Thread.interrupted()
getPriority() et setPriority(int)

V. Granet U.N.S.A.

Le langage Java

...
}

120

Part 14: Threads

V. Granet U.N.S.A.

static void

String

Gestion des threads (2/3)

currentThread()

void

Retourne une r
ef
erence sur le thread
actif.

void

join(long millis)

ou

join(long

Affiche une trace de la pile dex


ecution
du thread courant.

Attend que le thread meurt, au plus le temps


indiqu
e en millisecondes et nanosecondes si
ces param`
etres sont fournis.

getName()

void

notify()

R
eveille le thread pr
ec
edemment mis en attente.

getPriority()

void

getState()

run()

Cette m
ethode par d
efaut ne fait rien. Si le
thread est issu dun objet de type Runnable,
cest la m
ethode run de cet objet qui est
ex
ecut
ee ou sinon sa red
efinition
eventuelle.

interrupted()

Retourne true si le thread est interrompu.


boolean

ou

millis, int nanos)

Retourne l
etat courant du thread.
static boolean

join()

dumpStack()

Retourne la priorit
e du thread.
Thread.State

interrupt()

Interrompt le thread.

Retourne le nom du thread.


int

121

Part 14: Threads

Gestion des threads (1/2)


static Thread

Le langage Java

isAlive()

Teste si le thread est actif.


void

setName(String name)

Change le nom du thread.


void

setPriority(int newPriority)

Change la priorit
e du thread.

V. Granet U.N.S.A.

Le langage Java

122

V. Granet U.N.S.A.

Le langage Java

123

Part 14: Threads

Part 14: Threads

Gestion des threads (3/3)


static void

Synchronisation des threads (1/3)

sleep(long millis) ou sleep(long millis, int


nanos)

Provoque lendormissement du thread pour


une dur
ee
egale au nombre de millisecondes auquel sajoutent les
eventuelles nanosecondes.
void

start()

pb de lacc`es `a une ressource critique (i.e.


compte bancaire)
pose dun verrou
toutes les methodes qui modifient letat dun
dobjet partage doivent etre declarees
synchronized.

Provoque le d
emarrage du thread, la JVM appelle alors sa m
ethode run .
void

wait()

ou wait(long timeout) ou wait(long

c l a s s CompteBancaire {
p r i v a t e d o u b l e solde ;

timeout, int nanos)

p u b l i c s y n c h r o n i z e d v o i d op
e ration ( d o u b l e som

Met le thread en attente dun notify invoqu


e
par un autre processus ou du d
epassement du
temps pass
e en param`
etre.
void

i f ( solde + somme <0)


System . err . println ( " retrait impossible " );
else
solde += somme ;

yield()

Force le scheduling, le thread c`


ede sa place aux
autres processus
eligibles.

V. Granet U.N.S.A.

Le langage Java

124

Part 14: Threads

}
}

V. Granet U.N.S.A.

Le langage Java

125

Part 14: Threads

Synchronisation des threads (3/3)

Synchronisation des threads (2/3)


synchronized (obj) enonce ;

...
s y n c h r o n i z e d (...) { // debut du bloc contr^ole

ainsi une methode qualifiee synchronised peut se


recrire :

... // actions diverses


// tests de v
erification des donn
ees

wait (); // les donnees ne sont pas pr^etes

...

// attente dun notify() transmis par ailleurs

vo id uneM
ethode`
A S y n c h r o n i s e r () {

// r
eveil et reprise du cours de lex
ecution

synchronized ( t h i s ) {

... // actions sur les donnees

... // code du corps de la methode


// le besoin de verrouiller nest plus

notify () // message de reveil des processus endormis

... // actions diverses


} // fin du bloc

...

...

V. Granet U.N.S.A.

Le langage Java

126

V. Granet U.N.S.A.

Le langage Java

127

Part 14: Threads

Part 14: Threads

Producteurs Consommateurs (1/2)

Producteurs Consommateurs (2/2)

i m p o r t java . util .*;

File dattente

public

c l a s s File <T > e x t e n d s Vector <T > {

p u b l i c s y n c h r o n i z e d v o i d enfiler ( T e ) {
addElement ( e );
notify ();

Producteurs

Consommateurs

p u b l i c s y n c h r o n i z e d T d
e filer () {

producteurs et consommateurs doivent se


synchroniser (file vide)

w h i l e ( isEmpty ())
try {
wait ();
}
c a t c h ( InterruptedException e ) {
return nul l ;
}
T e = elementAt (0);
removeElementAt (0);
r e t u r n e;
}
} // fin classe File

V. Granet U.N.S.A.

Le langage Java

128

Part 14: Threads

V. Granet U.N.S.A.

Le langage Java

129

Part 14: Threads

Tubes (1/2)

Tubes (2/2)
PipedInputStream et PipedOutputStream
les tubes dentree et de sortie doivent etre
connectes :
`
a la creation, avec le constructeur

Un tube est un canal bidirectionnel entre 2


processus
Les processus peuvent ecrire et lire dans le tube

PipedInputStream pi = new PipedInputStream ();

Thread1

Tube

PipedOutputStream po = n u l l ;

Tread2

try {
po = new PipedOutputStream ( pi );
}
c a t c h ( IOException e ) { System . err . println ( e ); }

La synchronisation Producteur/Consommateur
est geree par le support dexecution

avec la methode connect()

PipedInputStream pi = new PipedInputStream ();


PipedOutputStream po = new PipedOutputStream ();
try {
pi . connect ( po );
}
c a t c h ( IOException e ) { System . err . println ( e ); }

V. Granet U.N.S.A.

Le langage Java

130

V. Granet U.N.S.A.

Le langage Java

131

Part 15: Applet

Applet
applet = petite application graphique
necessite une autre application graphique
(navigateurs, appletviewer)
plugin (inclus dans la jre)
classe Applet
lang.Object
awt.Component

Applet

awt.Container
awt.Panel
applet.Applet

pas de methode main


pas de constructeur, mais init
contexte execution HTML

V. Granet U.N.S.A.

Le langage Java

132

Part 15: Applet

V. Granet U.N.S.A.

Le langage Java

133

Part 15: Applet

Exemple

AppletContext
Concept de contexte dexecution (document
HTML), information sur lenvironnement, et en
particulier sur les autres applets du document.

i m p o r t java . awt .*;


i m p o r t java . applet .*;
public

c l a s s HelloWorldApplet e x t e n d s Applet {

AppletContext Applet.getAppletContext()
Applet AppletContext.getApplet(String name)

Enumeration<Applet> AppletContext.getApplets()
void AppletContext.showStatus(String status)
void AppletContext.showDocument(URL url)

void AppletContext.showDocument(URL url, String o`


u)
avec o`
u = \_self, \_parent, \_blank, name

Font f ;
p u b l i c v o i d init () {
f = new Font ( " Times " , Font . BOLD , 20);
}
p u b l i c v o i d paint ( Graphics g ) {
g . setFont ( f );
g . setColor ( Color . pink );
g . drawString ( " Hello World ! " , 5 , 25);
}
} // fin classe HelloWorldApplet

<OBJECT code="HelloWorldApplet.class"
width=400 height=150>
</OBJECT>

V. Granet U.N.S.A.

Le langage Java

134

V. Granet U.N.S.A.

Le langage Java

135

Part 15: Applet

Part 15: Applet

AudioClip

La classe Applet (AWT)

Concept de clip audio (necessite un dispositif de


reproduction sonore). Plusieurs clips peuvent etre
interpretes en meme temps par mixage sur la
meme plate-forme.

void init(), initialisation


void start(), juste apr`es init(), ou
automatiquement `
a chaque reapparition `
a lecran
(changement de page Web ou de-iconification),
pour signifier `
a cette applet quelle doit demarrer
ou redemarrer sa veritable execution.
void stop(), arret de lapplet. Automatiquement
appele `
a chaque disparition de lapplet de lecran
(changement de page Web ou iconification) ou juste
avant sa destruction compl`ete.
boolean isActive(), applet est active d`es le
debut de lexecution de sa methode start() et
cesse de letre d`es que lexecution de stop() est
terminee.
void resize(Dimension d),
void resize(int l, int h)
String getAppletInfo()
void showStatus(String m), affichage du message
m dans la zone detat de lapplet.

AudioClip Applet.getAudioClip(URL url)


charger le clip audio donne `
a lURL.
void AudioClip.loop(), interpretation indefinie
de ce clip.
void AudioClip.play(), interpretation de ce clip,
une seule fois depuis le debut.
void AudioClip.stop(), arret de linterpretation
de ce clip.

V. Granet U.N.S.A.

Le langage Java

136

Part 15: Applet

V. Granet U.N.S.A.

Le langage Java

137

Part 15: Applet

enements
Ev

Chargement de fichiers
images ou sons, relatifs `a une URL (base du code
ou base du document)

reaction aux evenements clic de souris

i m p o r t java . awt . Event ;


p u b l i c b o o l e a n mouseDown ( Event event , i n t x , i n t y )
// code traitement

....
return true ;
}

URL getCodeBase(), adr reseau de lapplet (.class)


URL getDocumentBase(), adr reseau du contexte de
lapplet (.html)
AudioClip getAudioClip(URL u), le clip audio
situe `
a ladr reseau u
AudioClip getAudioClip(URL u, String x),
idem, mais le clip est recherche `
a ladresse x,
relativement `
a ladresse de base u.
Image getImage(URL u), limage situee `
a ladr
reseau u. Chargement progressif lors de la premi`ere
demande daffichage dans le contexte graphique
courant, sauf si un contr
oleur de medias
(java.awt.MediaTracker bloque lapplet jusqu`
a la
fin du chargement).
Image getImage(URL u, String x), idem , limage
est recherchee `
a ladresse x, relativement `
a ladresse
de base u.
Image image = getImage(getCodeBase(), "Fig/f.gif");

V. Granet U.N.S.A.

Le langage Java

138

V. Granet U.N.S.A.

Le langage Java

139

Part 15: Applet

Part 15: Applet

Composants Graphiques

Param`etres dune applet (1/2)

Utilisation des CG dAWT (Buttons,


Checkboxes, Labels, Canvas, etc.)
les methodes de classe Container (par heritage)
permettent leur manipulation
add, ajout dun composant
remove, suppression
setLayout, definition de lagenceur

i m p o r t java . awt . event .*;


i m p o r t java . net .*;
i m p o r t java . applet .*;
public

c l a s s BoutonURL e x t e n d s Applet
i m p l e m e n t s ActionListener {

Button b ;
String url ;
p u b l i c v o i d init () {
url = getParameter ( " URL " );

Composants graphiques Swing


classe JApplet

i f ( url == n u l l ) url = " Vide " ;


add ( b = new Button ( url ));
b . addActionListener ( t h i s );
}
p u b l i c v o i d actionPerformed ( ActionEvent e ) {
i f ( e . getSource () == b )
try {
getAppletContext (). showDocument (
new URL ( b . getLabel ()) , " _blank " );
}
c a t c h ( MalformedURLException ex ) {}
}
} // fin BoutonURL

V. Granet U.N.S.A.

Le langage Java

140

Part 15: Applet

V. Granet U.N.S.A.

Le langage Java

141

Part 15: Applet

Param`etres dune applet (2/2)


p u b l i c String [][] getParameterInfo () {
String [][] info = {

Dans la balise Applet du fichier html, on passe les


valeurs des param`etres

// Param`
etre

{" Url " ,

Type

Description

" URL " ,

" page `
a afficher " } ,

};
r e t u r n info ;

<applet code="Bouton.class" width=400 height=150>


}

<PARAM NAME=Url VALUE="http://www.unice.fr">


</applet>

noms des param`etres conventionnels


(SOURCE, xxxSOURCE, etc)
les param`etres sont des chanes de car, mais
lapplet pourra interpreter des entiers, des
booleens, etc.
description des param`etres (peut etre utilisee
par le navigateur)

V. Granet U.N.S.A.

Le langage Java

142

V. Granet U.N.S.A.

Le langage Java

143

Part 15: Applet

Part 15: Applet

Securite
System . getProperty ( " " os . name " ); // OK

Laction des applets est limitee. Chaque


navigateur poss`ede un SecurityManager qui
assure le contr
ole (SecurityException).
Une applet ne peut :
utiliser que son propre code et lAPI des
paquetages java.*. Cest tout.
lire ou ecrire des fichiers de la machine client.
Fichiers cote serveur. Exception pour les
applets locales ou identifiees (trusted,
signature).
etablir des connexions reseaux, sauf avec la
machine do`
u il est issu. Le serveur peut servir
de passerelles entre plusieurs applets sur des
clients differents.
executer des programmes de la machine client.
lire certaines proritetes syst`emes :
java.class.path, java.home, user.dir, user.home,
user.name

V. Granet U.N.S.A.

Le langage Java

144

Part 15: Applet

V. Granet U.N.S.A.

Le langage Java

145

Part 15: Applet

Thread et Applet
p u b l i c v o i d stop () {
i f ( proc != n u l l ) {

graphique actif (animation)


initialisation de lapplet (init() start())
terminaison (stop() finalize())

proc . interrupt ();


proc = n u l l ;
}
}
p u b l i c v o i d run () {
w h i l e ( isActive ()) {

i m p o r t java . awt .*;

// attendre laps de temps

i m p o r t java . applet .*;


public

// calculer les changements

c l a s s ThreadApplet

repaint ();

e x t e n d s Applet i m p l e m e n t s Runnable {
p r i v a t e Thread proc ;

}
}
p u b l i c v o i d paint ( Graphics g ) {

p u b l i c v o i d init () {

// redessiner le motif

// initialisation des attributs

} // fin classe ThreadApplet

p u b l i c v o i d start () {
i f ( proc == n u l l ) {
proc = new Thread ( t h i s );
proc . start ();
}
}

V. Granet U.N.S.A.

Le langage Java

146

V. Granet U.N.S.A.

Le langage Java

147

Part 16: Animation

Introduction
Pb reduction des clignotements lies au reaffichage
1. ne pas effacer la fenetre ;
2. redessinner le strict necessaire (detourage) ;
3. le double buffering.

Animation

V. Granet U.N.S.A.

Le langage Java

148

Part 16: Animation

V. Granet U.N.S.A.

Le langage Java

149

Part 16: Animation

1 - ne pas effacer la fenetre

2 - Detourage
Ne reafficher que ce qui est necessaire

repaint update paint

Definir une portion de la fenetre sur laquelle


sappliquera le reaffichage.

p u b l i c v o i d update ( Graphics g ) {
g. setColor ( getBackground ());
g. fillRect (0 , 0 , getsize (). width , getsize (). height );

setClip(x, y, w, h) et clipRect(x, y, w, h)

Pour les animations, la portion doit se deplacer !

g. setColor ( getForeground ());


paint ( g );

Pb : les appels `a repaint peuvent etre tr`es


rapides, et certains appels `a update et paint
peuvent etre perdus !

on reecrit update de la facon suivante :


v o i d repeindre () {
// Relance le dessin de l
ecran et attend jusqu`
a ce que la

p u b l i c v o i d update ( Graphics g ) {

// proc
edure "paint" ait effectivement
et
e ex
ecut
ee.

paint ( g );

paintOK = f a l s e ;

repaint ();
w h i l e (! paintOK ) {
t r y { .... sleep ( time ); }
c a t c h ( InterruptedException e ) {}
}

methode `a utiliser lorsque les nouveaux dessins


doivent se superposer avec les anciens

V. Granet U.N.S.A.

Le langage Java

} // fin repeindre

150

V. Granet U.N.S.A.

Le langage Java

151

Part 16: Animation

Part 16: Animation

3 - Double buffering (1/2)

3 - Double buffering (2/2)


La methode paint dessine dans le contexte gTemp
associe `
a limage tmp, et execute `a la fin :

Principe : ecrire dans une image auxiliaire. Une


fois limage terminee, on laffiche dun coup sans
avoir `a effacer limage reelle precedente

gTemp . drawRect (1 ,1 ,30 ,50);


...
// Afficher limage tampon sur le v
eritable
ecran :

Image

temp ;

g . drawImage ( temp , 0 , 0 , t h i s );

// Tampon pour image d


ecran.

Graphics gTemp ;

// Contexte graphique associ


e.

g est connecte `
a lecran reel, temp est limage `a
dessiner a` partir des coordonnees (0,0). Le dernier
param`etre supervise laffichage.

dans init :

temp

= createImage ( getSize (). width , getSize (). height );

// suppression du clignotement

p u b l i c v o i d update ( Graphics g ) {

gTemp = temp . getGraphics ();

// effacer limage temp

gTemp . setColor ( getBackground ());

gTemp . fillRect (0 , 0 , getSize (). width , getSize (). heigh


gTemp . setColor ( getForeground ());
paint ( g );
}

V. Granet U.N.S.A.

Le langage Java

152

V. Granet U.N.S.A.

Le langage Java

153

Part 17: R
eseau

Connexion `a des URL (1/3)


paquetage java.net
classe java.net.url
URL (Uniform Ressource Locator)
protocole ://[utilisateur@]h^
ote [:port ][/chemin /fichier ]

URL(adr)
URL(prot,host,file)

R
eseau

getProtocol()
getHost()
getFile()

URLConnection openConnection()
setDoInput(), setDoOutput()
connect()
openStream() (pour la lecture)
getContent()

V. Granet U.N.S.A.

Le langage Java

154

V. Granet U.N.S.A.

Le langage Java

155

Part 17: R
eseau

Part 17: R
eseau

Connexion `a des URL (2/3)

Connexion `a des URL (3/3)

i m p o r t java . net .*;

URL u =
new URL ( " ftp :// vg : secret@taloa . unice . fr / in / f" );

i m p o r t java . io .*;
public

URLConnection uc = u . openConnection ();

c l a s s AfficherUrl {

public

// indiquer lacc`
es en
ecriture

uc . setDoOutput ( t r u e );

static

v o i d main ( String [] args ) t h r o w s I

try {

// cr
eer un flot de sortie

URL url = new URL ( args [0]);

OutputStream os = uc . getOutputStream ();

// convertir lurl en InputStream

FileInputStream is = new FileInputStream ( " f " );

InputStream in = url . openStream ();

// copie le fichier f.txt

i n t c;

i n t b;

System . out . println ( url . getHost ()+ " / " + url .

w h i l e (( b = is . read ()) != -1)

w h i l e (( c = in . read ()) != -1)

os . write (( b y t e ) b );

System . out . print (( c h a r ) c );

// fin de fichier

is . close (); os . close ();

c a t c h ( MalformedURLException e ) {
System . err . println (" Bad Url : " +
}
c a t c h ( UnknownHostException e ) {
System . err . println (" Bad Url : " +
}
}
} // fin classe AfficherUrl

V. Granet U.N.S.A.

Le langage Java

156

Part 17: R
eseau

V. Granet U.N.S.A.

Le langage Java

157

Part 17: R
eseau

Socket

Modes de transmission

services (http, ftp, telnet, ...) sont associes `a


des ports
un port est une entree virtuelle de lordinateur
pour obtenir un service, il faut (host, port)
dans un programme, on etablit une ligne
virtuelle entre les ports des ordinateurs `a
connecter grace `a une socket.
Ordinateur A

Communication par commutateurs :


1) Mode non connecte :
commutation par paquets independants,
chaque paquet poss`ede les adresses de depart et
darrivee
Internet UDP, datagrams
multicast
connexion non fiable, ordre non garanti

Ordinateur B

programme

programme

2) Mode connecte :
circuit virtuel de commutation etabli au
prealable
Internet TCP
connexion fiable, ordre garanti

socket
port

port

Internet

port = entier sur 16 bits. Ports jusqu`


a 1024
reserves (http 80, telnet 23, ...), au dessus,
libres
un programme peut gerer plusieurs ports et
plusieurs sockets
V. Granet U.N.S.A.

Le langage Java

158

V. Granet U.N.S.A.

Le langage Java

159

Part 17: R
eseau

Part 17: R
eseau

Datagrammes (emission 1/2)

Datagrammes (emission 2/2)

classe DatagramPacket definit les paquets `a


transmettre
classe InetAddress definit les adresses Internet

i m p o r t java . net .*; i m p o r t java . io .*;


public

c l a s s Emetteur {

public
InetAddress adrSource = InetAddress.getLocalHost();

static

v o i d main ( String [] args )

t h r o w s IOException {
// adresse du destinataire

InetAddress adrDest = InetAddress.getByName("djinn");

InetAddress adrDest = InetAddress . getByName ( args


i n t portDest = Integer . parseInt ( args [1]);

Un paquet Datagram contient linformation `a


transmettre :

// cr
eation de la socket

DatagramSocket socket = new DatagramSocket ()


b y t e [] data ;
DatagramPacket paquet = n u l l ;
while ( true ) {

String msg = " blabla blabla " ;


b y t e [] data = msg . getBytes ();

System . out . print (" > " );

DatagramPacket paquet =

String msg = StdInput . readLine ();


i f ( msg == n u l l ) b r e a k ;

new DatagramPacket ( data , data . length , adrDest , por

// convertir le message en tableau de bytes

data = msg . getBytes ();


// cr
eer le paquet et lexp
edier

paquet = new DatagramPacket ( data , data . leng

Pour envoyer le paquet, il faut une socket :

adrDest , portDes
socket . send ( paquet );
}

DatagramSocket socket = new DatagramSocket ();

socket . close ();

socket . send ( paquet );

}
}

V. Granet U.N.S.A.

Le langage Java

160

Part 17: R
eseau

V. Granet U.N.S.A.

Le langage Java

161

Part 17: R
eseau

Datagrammes (reception 1/2)

Datagrammes (reception 2/2)

Un paquet Datagram contenant linformation `a


recevoir doit etre cree :

i m p o r t java . net .*;


i m p o r t java . io .*;
public

b y t e [] data = new b y t e [512];

c l a s s Receveur {

public

DatagramPacket paquet =

static

v o i d main ( String [] args ) t h r o w s IO

i n t port = Integer . parseInt ( args [0]);

new DatagramPacket ( data , data . length );

// cr
eation de la socket

DatagramSocket socket = new DatagramSocket ( port );


// tampon o`
u mettre le message re
cu

b y t e [] data = new b y t e [512];

Pour recevoir le paquet, il faut egalement une


socket avec le port :

// cr
eer un paquet de r
eception des messages

DatagramPacket paquet = new DatagramPacket ( data , da


while ( true ) {
// recevoir le prochain message

socket . receive ( paquet );


DatagramSocket socket = new DatagramSocket ( port );

// afficher le message re
cu

socket . receive ( paquet );

System . out . print (" from " + paquet . getAddress (). ge

String msg = new String ( paquet . getData () ,0 , paque


System . out . println ( " " + msg );
}
}
}

V. Granet U.N.S.A.

Le langage Java

162

V. Granet U.N.S.A.

Le langage Java

163

Part 17: R
eseau

Part 17: R
eseau

Datagrammes

Datagrammes - Multicast

Sur lordinateur emetteur, lyre :

Pour envoyer un message `a un groupe de


machines destinatrices
MulticastSocket
les paquets sont envoyes `a une adresse
multicast : 224.0.0.1 239.255.255.255 `a
laquelle doit se joindre tous les destinataires

lyre $ javac Emetteur.java


lyre $ java

Emetteur djinn 17000

> blabla blabla


> abracadabra
>

Sur lordinateur recepteur, djinn :

MulticastSocket mcs = new MulticastSocket ( port );

InetAddress mcsAdr = InetAddress . getByName ( " 228.5.6.7 " );


djinn $ javac

Receveur.java

djinn $ java

Receveur 17000

mcs . joinGroup ( mcsAdr );

from lyre.esinsa.unice.fr blabla blabla


from lyre.esinsa.unice.fr abracadabra

V. Granet U.N.S.A.

Le langage Java

Les datagrammes sont ensuite normalement


expedies ou recus avec les methodes send et
receive pr
ecedentes
quitter le groupe : mcs.leaveGroup(mcsAdr);
exemple dutilisation : programme chat

164

Part 17: R
eseau

V. Granet U.N.S.A.

Le langage Java

165

Part 17: R
eseau

Mode connecte TCP (emission 1/2)

Mode connecte TCP (emission 2/2)

Un emetteur se connecte sur la machine


destinatrice grace `a une socket :

i m p o r t java . net .*;


i m p o r t java . io .*;
public

c l a s s Emetteur {

Socket socket = new Socket ( " djinn " , portDest );

public

// ou bien

t h r o w s IOException {

static

v o i d main ( String [] args )

Socket socket = new Socket ();

i n t portDest = Integer . parseInt ( args [1]);

socket . bind (new InetSocketAddress ( " localhost " , 0)); // 1er

// creation du socket

socket . connect (new InetSocketAddress ( " djinn " , portDest )

Socket socket = new Socket ();


socket . bind (new InetSocketAddress ( " localhost " ,

socket . connect (new InetSocketAddress ( args [0] , p


DataOutputStream out =

new DataOutputStream ( socket . getOutputStream ()

Un flot est cree entre les deux machines.

while ( true ) {
System . out . print (" > " );
String msg = StdInput . readLine ();

DataOutputStream out = new DataOutputStream ( socket . getO

i f ( msg == n u l l ) b r e a k ;

DataInputStream in = new DataInputStream ( socket . getInpu

//
ecrire le message

out . writeChars ( msg ); out . writeChar ( \n );


}
out . close ();

Lemetteur ecrit (ou lit) dans le fichier out (ou


in).

socket . close ();


}
}

V. Granet U.N.S.A.

Le langage Java

166

V. Granet U.N.S.A.

Le langage Java

167

Part 17: R
eseau

Part 17: R
eseau

Mode connecte TCP (reception 1/2)

Mode connecte TCP (reception 1/2)

Le receveur doit creer une socket speciale,


ServerSocket en sp
ecifiant le numero de port
Il indique ensuite quil est pret `a accepter la
connexion dun emetteur

i m p o r t java . net .*;


i m p o r t java . io .*;
public

c l a s s Receveur {

public

static

v o i d main ( String [] args )

t h r o w s IOException {
i n t port = Integer . parseInt ( args [0]);

ServerSocket socketServeur = new ServerSocket ( port );

// cr
eation de la socket serveur

Socket socketEmetteur = socketServeur . accept ();

ServerSocket socketServeur = new ServerSocket ( por


// cr
eation du socket de r
eception

Socket socket = socketServeur . accept ();


// cr
eation du flot de communication

BufferedReader din =
new BufferedReader (

new InputStreamReader ( socket . getInputStream ())


while ( true ) {
System . out . print ( " from " +

socket . getInetAddress (). getHostName (


System . out . println ( " " + din . readLine ());
}
}
}

V. Granet U.N.S.A.

Le langage Java

168

Part 17: R
eseau

V. Granet U.N.S.A.

Le langage Java

169

Part 17: R
eseau

Mod`ele Client/Serveur (1/4)


Sur lordinateur emetteur, lyre :
Dans un mod`ele client/serveur, le receveur est le
serveur qui peut accepter plusieurs connexions de
differents clients. Chaque client est traite par
dans un thread.

lyre $ javac Emetteur.java


lyre $ java

Emetteur djinn 17000

> blabla blabla


> abracadabra
>

while ( true ) {
// attendre la prochaine connexion

Socket socketClient = socketServeur . accept ();

Sur lordinateur serveur, djinn :

new GestionDuClient ( socketClient ); // thread


}

djinn $ javac

Receveur.java

djinn $ java

Receveur 17000

Serveur actif sur le port 17000


from lyre.esinsa.unice.fr blabla blabla
from lyre.esinsa.unice.fr abracadabra

V. Granet U.N.S.A.

Le langage Java

170

V. Granet U.N.S.A.

Le langage Java

171

Part 17: R
eseau

Part 17: R
eseau

Mod`ele Client/Serveur (2/4)

Mod`ele Client/Serveur (3/4)

c l a s s GestionDuClient i m p l e m e n t s Runnable {

i m p o r t java . net .*;

p u b l i c Thread proc = new Thread ( t h i s );

i m p o r t java . io .*;
public

p r i v a t e Socket socket ;

c l a s s Serveur {

public

static

p r i v a t e BufferedReader din ;

v o i d main ( String [] args )

p u b l i c GestionDuClient ( Socket s ) t h r o w s IOException

t h r o w s IOException {

socket = s ;

i n t port = Integer . parseInt ( args [0]);


// creation de la socket

InputStreamReader in =new InputStreamReader ( s . getIn

ServerSocket socketServeur = new ServerSocket ( por

din = new BufferedReader ( in );


proc . start ();

System . out . println ( " Serveur actif sur le port " +


}

while ( true ) {

p u b l i c v o i d run () {

// attendre la prochaine connexion

while ( true )

Socket socketClient = socketServeur . accept ();

try {

System . out . println ( socketClient . getInetAddress ()

// cr
eer un paquet de r
eception des messages

+ " connect
e " );

System . out . print (" from " +

// g
erer le client dans un thread

socket . getInetAddress (). getHostName

new GestionDuClient ( socketClient );

System . out . println ( " " + din . readLine ());

}
}

c a t c h ( IOException e) { b r e a k ; }

System . out . println ( socket . getInetAddress (). getHostN


+ " d
e connect
e " );
t r y { socket . close ();} c a t c h ( IOException e ) {}
}
}

V. Granet U.N.S.A.

Le langage Java

172

Part 17: R
eseau

V. Granet U.N.S.A.

Le langage Java

173

Part 17: R
eseau

Mod`ele Client/Serveur (4/4)


Sur les ordinateurs clients

djinn $ javac

Serveur.java

djinn $ java

Serveur 17000

Serveur actif sur le port 17000


mondrian.esinsa.unice.fr connect
e

lyre $ javac Emetteur.java

lyre.esinsa.unice.fr connect
e

lyre $ java

from lyre.esinsa.unice.fr blabla blabla

Emetteur djinn 17000

> blabla blabla

from mondrian.esinsa.unice.fr hello ...

> abracadabra

from lyre.esinsa.unice.fr abracadabra

>

mondrian $ javac Emetteur.java


mondrian $ java

Emetteur djinn 17000

> hello ...


>

Sur lordinateur serveur, djinn :

V. Granet U.N.S.A.

Le langage Java

174

V. Granet U.N.S.A.

Le langage Java

175

Part 18: Jni

Jni (1/6)
Jni (Java Native Interface) permet dexecuter du
code C, C++, ... dans une application Java
Interet :
reutilisation de code existant (biblioth`eque)
code particulier en assembleur
...
Jni permet une communication bidirectionnelle
entre entre les deux formes de code (Java et C par
exemple).

Jni

V. Granet U.N.S.A.

Le langage Java

176

Part 18: Jni

V. Granet U.N.S.A.

Le langage Java

177

Part 18: Jni

Jni (2/6)

Jni (3/6)

Exemple : lincontournable HelloWorld

Creation du .h associe `a la classe HelloWorld


javah HelloWorld

c l a s s HelloWorld {
p u b l i c n a t i v e v o i d displayHelloWorld ();

Le fichier donne le prototype de la fonction C qui


assure linterface avec Java. Nom conventionnel

static {
// le code C est dans la biblioth`
eque hello

System . loadLibrary ( " hello " );


Java_Nom de la classe _Nom de la m
ethode

}
public

static

v o i d main ( String [] args ) {

new HelloWorld (). displayHelloWorld ();

Java_HelloWorld_displayHelloWorld

}
}

On compile
javac HelloWorld.java

V. Granet U.N.S.A.

Le langage Java

178

V. Granet U.N.S.A.

Le langage Java

179

Part 18: Jni

Part 18: Jni

Jni (4/6)

Jni (5/6)
Le fichier C :

/* DO NOT EDIT THIS FILE - it is machine generated */

#i n c l u d e < jni .h >

#i n c l u d e < jni .h >

/* Header for class HelloWorld */

#i n c l u d e " HelloWorld . h "

#i f n d e f _Included_HelloWorld

#i n c l u d e < stdio .h >

#d e f i n e _Included_HelloWorld

JNIEXPORT v o i d JNICALL

#i f d e f __cplusplus

Java_HelloWorl d_ di spl ay He ll oW or ld ( JNIEnv * env , jobject o

e x t e r n " C" {

#e n d i f

printf (" Hello world !\ n " );

/*

return ;

* Class :

HelloWorld

* Method :

displayHelloW or ld

* Signature : () V
*/

JNIEXPORT v o i d JNICALL Java_HelloWorld _d isp la yH el lo Wo rl


( JNIEnv * , jobject );
#i f d e f __cplusplus

Creation de la biblioth`eque libhello (Linux)


gcc -shared -I${JAVA_HOME}/include \

-I${JAVA_HOME}/include/linux HelloWorld.c -o libhello.so

#e n d i f
#e n d i f

Execution de lapplication Java


LD_LIBRARY_PATH=. java HelloWorld
Hello world!

V. Granet U.N.S.A.

Le langage Java

180

V. Granet U.N.S.A.

Le langage Java

181

Part 18: Jni

Jni (6/6)
Jni permet egalement lacc`es `a Java depuis le
code natif (C, C++).
Linterface JNI offre :
des definitions dequivalence de type (jboolean,
jint, jdouble, jstring, jarray, jclass, etc.)
des fonctions de manipulation de ces types par
lintermediaire de (JNIEnv *env)
lacc`es aux attributs et aux methodes dobjets
Java

V. Granet U.N.S.A.

Le langage Java

Jdk 1.5

182

V. Granet U.N.S.A.

Le langage Java

183

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Nouveautes Tiger

Autoboxing

La version 1.5 (Tiger) apporte des changements


importants au langage :

Les conversions explicites entre les types


elementaires et leurs equivalents objet nest
plus necessaire :

Autoboxing
Importation static

Enonc
e foreach

Enum
erations
Genericite

Character c = a ;
i n t i = new Integer (10);
Hashtable ht = new Hashtable ();
ht . put ( " Paul " , 3);
ht . put ( " Pierre " , 19);
Integer n = ( Integer ) ht . get (" Pierre " );
i f ( n != n u l l )
System . out . println (" Pierre = " + n );

V. Granet U.N.S.A.

Le langage Java

184

Part 19: Jdk 1.5

V. Granet U.N.S.A.

Le langage Java

185

Part 19: Jdk 1.5

Importation static

Enonc
e

Specialisation de la directive import pour lacc`es


non qualifie aux objets declares static dune
classe

foreach

(1/2)

Forme generalisee de lenonce pour lorsquil sagit


dappliquer un meme traitement `a tous les
elements dun tableau ou dune collection :
ecriture plus naturelle et plus s
ure

i1 = Math . sqrt ( -)/(2* a );

i n t [] tab ;
....

on pourra ecrire :

i n t somme = 0;
f o r ( i n t i =0; i < tab . length ; i ++)
somme += tab [i ];

i m p o r t s t a t i c java . lang . Math .*;


...
i1 = sqrt ( -)/(2* a );

i n t [] tab ;
....
i n t somme = 0;
f o r ( i n t x : tab )
somme += x ;

V. Granet U.N.S.A.

Le langage Java

186

V. Granet U.N.S.A.

Le langage Java

187

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Enonc
e

foreach

Enum
eration (1/2)

(2/2)

Enum
eration de constantes representees par des
noms (comme en C)

Vector v = new Vector ();


v . addElement (13); v . addElement (128); ....
i n t somPairs = 0;
f o r ( Iterator i = v. iterator (); i . hasNext (); ) {

enum Couleur { tr`


e fle , carreau , coeur , pique }

Integer x = ( Integer ) i . next ();

enum Valeur { deux , trois , quatre , cinq , six , sept ,

i f ( x % 2 == 0) somPairs += x ;

huit , neuf , dix , valet , dame , roi , as }

}
c l a s s Carte {
Couleur couleur ;
Valeur valeur ;
Carte ( Valeur v , Couleur c ) {
valeur = v ;
Vector v = new Vector ();

couleur = c ;

v . addElement (13); v . addElement (128); ....

i n t somPairs = 0;

f o r ( Object x : v )
i f (( Integer ) x % 2 == 0) somPairs += ( Integer ) x ;

...
new Carte ( Valeur . as , Couleur . coeur );
...

V. Granet U.N.S.A.

Le langage Java

188

Part 19: Jdk 1.5

V. Granet U.N.S.A.

Le langage Java

189

Part 19: Jdk 1.5

Enum
eration (2/2)
enum Valeur {
deux (2) , trois (3) , quatre (4) , cinq (5) ,

les enumerations sont des objets


methode predefinie values()
on peut ajouter des attributs et des methodes

six (6) , sept (7) ,

huit (8) , neuf (9) , dix (10) ,

valet (10) , dame (10) , roi (10) , as (20);


i n t valeur ;
Valeur ( i n t v) { valeur = v ; }
i n t valeur () { r e t u r n valeur ; }

// fabrication dun jeu de 52 cartes

} // fin enum

Carte [] jeu52 = new Carte [52];


i n t i = 0;

System . out . println ( Valeur . as ); // as

f o r ( Couleur c : Couleur . values ())

System . out . println ( Valeur . as . valeur ()); // 20

f o r ( Valeur v : Valeur . values ())


jeu52 [ i ++] = new Carte (v , c );

V. Granet U.N.S.A.

Le langage Java

190

V. Granet U.N.S.A.

Le langage Java

191

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Genericite (1/5)

Genericite (2/5)

Permet de parametrer le type des structures de


donnees
evite les conversions explicites de type dues `a

c l a s s Noeud <T > {


T val ;

Object

Noeud <T > suivant ;


Noeud ( T v ) { val = v; }

assure les contr


oles de type

}
c l a s s Pile <E > {

Hashtable < String , Integer > ht =

Noeud <E > sommet ;

new Hashtable < String , Integer >();

v o i d empiler ( E x ) {

ht . put ( " Paul " , 3);

// ajouter en t^
ete l
el
ement x

ht . put ( " Pierre " , 19);

Noeud <E > p = new Noeud <E >( x );

Integer n = ht . get ( " Pierre " ); // pas de conver. explicite

p . suivant = sommet ;

i f ( n != n u l l )

sommet = p ;

System . out . println (" Pierre = " + n );

}
E sommet () {

Vector < Integer > v = new Vector < Integer >();

// retourner la valeur du sommet de pile

r e t u r n sommet . val ;
v . addElement ( " toto " ); // ! erreur compilation

}
}

v . addElement (13); v . addElement (128); ...


i n t somPairs = 0;
f o r ( Integer x : v )
// pas de conversion explicite

i f (x % 2 == 0) somPairs += x ;

V. Granet U.N.S.A.

Le langage Java

192

Part 19: Jdk 1.5

V. Granet U.N.S.A.

Le langage Java

193

Part 19: Jdk 1.5

Genericite (3/5)

Genericite (4/5)

// D
efinition simplifi
ee dune Pile g
en
erique

// une pile de cha^


nes

c l a s s Pile <T > {

Pile < String > p1 = new Pile < String >();

private

final

i n t N = 100;

private

i n t sommet = 0;

// une pile de piles dentiers

Pile < Pile < Integer > > p2 =


new Pile < Pile < Integer > >();

// pas de g
en
ericit
e sur les tableaux !

p r i v a t e T []
e l
e ments = ( T []) new Object [ N ];
p u b l i c v o i d empiler ( T x ) {

e l
e ments [ sommet ++] = x ;

Mais aussi, sans genericite

Pile p = new Pile();

p u b l i c v o i d d
e piler () {

p.empiler("bonjour");

sommet - -;
}

p.empiler(6); // OK

p u b l i c T sommet () {

// la conversion suivante est obligatoire

return
e l
e ments [ sommet -1];

Integer i = (Integer) p.sommet();

}
}

mais alors, message du compilateur


Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

V. Granet U.N.S.A.

Le langage Java

194

V. Granet U.N.S.A.

Le langage Java

195

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Genericite (5/5)

Genericite et Polymorphisme (1/2)

Genericite sur plusieurs types :


Pile < Integer > p1 = new Pile < Integer >();
Pile < Object > p2 = p1 ;

c l a s s Noeud <C ,V > {


C cl
e;
V val ;
Noeud <C ,V > suivant ;
Noeud ( C c , V v ) { cl
e = c ; val = v; }

Illegal : car on pourrait empiler autre chose que


des Integer !

De meme :
et avec les interfaces :
v o i d afficherSommet ( Pile < Object > p ) {
System . out . println ( p. sommet ());
i n t e r f a c e Pile <T > { v o i d empiler ( T x );

...
Pile < Integer > p = new Pile < Integer >();

// Impl
ementation dune pile par un tableau

afficherSommet ( p ); // types incompatibles

c l a s s PileTableau <E > i m p l e m e n t s Pile <E > { ... }


// idem avec une structure cha^
n
ee

c l a s s PileCha^
n
e e <E > i m p l e m e n t s Pile <E > { ... }
...
Pile < String > p = new PileCha^
n
e e < String >();

Notez le meme nom E


V. Granet U.N.S.A.

Le langage Java

196

Part 19: Jdk 1.5

V. Granet U.N.S.A.

Le langage Java

197

Part 19: Jdk 1.5

Methodes generiques

Genericite et Polymorphisme (2/2)


Solution : la notation ?

v o i d dupliquerSommet ( Pile <? > p) {


Object o = p . sommet (); // OK
v o i d afficherSommet ( Pile <? > p ) {...}

p . empiler ( o ); // erreur de compilation

...

// car le type des


el
ements est inconnu

Pile < Integer > pi = new Pile < Integer >();

afficherSommet ( pi ); // OK
Pile < String > ps = new Pile < String >();
afficherSommet ( ps ); // OK

Solution : methodes generiques


pour limiter le polymorphisme aux sous-classes
de A

<T > v o i d dupliquerSommet ( Pile <T > p ) {


T o = p . sommet ();
p . empiler ( o );
}

v o i d afficherSommet ( Pile <? e x t e n d s A > p) {...}

? super A pour limiter le polymorphisme aux


super-classes de A

Pile < Integer > p1 = new Pile < Integer >();


Pile < String > p2 = new Pile < String >();
dupliquerSommet ( p1 );
dupliquerSommet ( p2 );

V. Granet U.N.S.A.

Le langage Java

198

V. Granet U.N.S.A.

Le langage Java

199

Part 20: Jdbc

JDBC (1/8)
Java Database Connectivity
offre la connexion dapplications Java avec
differents types de BD (SQL, tableurs, etc.)
API JDBC est independante du SGBD.
Ensemble de classes (java.sql.*)
client

client

Jdbc

midleware
serveur BD

Modele 2 couches

V. Granet U.N.S.A.

Le langage Java

200

Part 20: Jdbc

V. Granet U.N.S.A.

serveur BD

Modele 3 couches

Le langage Java

201

Part 20: Jdbc

JDBC (2/8)

JDBC (3/8)

Lacc`es `a la BD se fait par lintermediaire dun


pilote.

import java.sql.*
JDBC g`ere :
la connexion `a la BD
lenvoi de requetes SQL
lexploitation des resultats provenant de la
BD

1. un pont entre JDBC et ODBC (Microsoft).


La communication se fait via des fonctions C
appelees par les methodes du pilote ;
2. les pilotes recourant `a des fonctions non-Java
specifiques du SGBD ;
3. les pilotes permettent lemploi dun serveur
middleware. Il sagit dune interface avec le
SGBD via une API specifique ;
4. les pilotes Java proprietaires utilisant
directement le protocole reseau du SGBD.

V. Granet U.N.S.A.

Le langage Java

202

V. Granet U.N.S.A.

Le langage Java

203

Part 20: Jdbc

Part 20: Jdbc

JDBC - Connexion (4/8)

JDBC - Statement (5/8)

DriverManager :

g`ere les pilotes charges (ici pour mysql) :

try {
// cr
eer une nouvelle instance du Driver

Class . forName (" com . mysql . jdbc . Driver " ). newInstance ();
} c a t c h ( Exception ex ) { /* ge rer les erreurs */ }

cree les connexions (Connection) :

Envoi de requetes SQL (Statement


createStatement pour une requete SQL simple
(sans param`etre)
prepareStatement pour une requete SQL
(precompilee) avec param`etres
prepareCall pour lappel dune procedure
preparee.
ResultSet executeQuery(), int executeUpdate()

// cr
eer un Statement

Statement stmt = conn . createStatement ();


// ex
ecuter une requ^
ete SQL

ResultSet rs = stmt . executeQuery (

Connection conn = n u l l ;

" SELECT * FROM uneTable ; " );

try {
String urlBD = " jdbc : mysql :// djinn . polytech . unice . fr / bd " ;
conn = DriverManager . getConnection ( urlBD , " vg " ," pass " );
// code de lapplication qui acc`
ede `
a la BD

...
} c a t c h ( Exception ex ) { /* ge rer les erreurs */ }
finally {

i f ( conn != n u l l ) conn . close (); }

V. Granet U.N.S.A.

Le langage Java

204

Part 20: Jdbc

V. Granet U.N.S.A.

Le langage Java

205

Part 20: Jdbc

JDBC - ResultSet (6/8)

JDBC - prepareStatement (7/8)

ResultSet resultat dune requete SQL (i.e.


lignes de la table)
methodes get pour acceder aux colonnes de la
ligne courante
next() pour passer le curseur `a la ligne suivante
previous()
conversion de types entre SQL et Java
(getString, getInt, getDate, ...)

requete precompilee (plus efficace)


param`etres

// INSERT INTO animal VALUES


// -> (Coco,Diane,Perroquet,f,2000-06-09,NULL);

PreparedStatement pstmt =
conn . prepareStatement (
" INSERT INTO animal VALUES (? ,? ,? ,? ,? , NULL ); " );
// d
efinir les param`
etres

rs . absolute (2);
pstmt . setString (1 , " Coco " );

System . out . println ( " Resultat : " + rs . getInt (1));

pstmt . setString (2 , " Diane " );


rs . beforeFirst ();
// ex
ecuter la requ^
ete

w h i l e ( rs . next ()) {

pstmt . executeUpdate ();

String nom = rs . getString ( " nom " );


String esp`
e ce = rs . getString ( " espece " );
Date naissance = rs . getDate (" naissance " );
System . out . println ( nom + " " + esp`
e ce +
" " + naissance );
}

V. Granet U.N.S.A.

Le langage Java

206

V. Granet U.N.S.A.

Le langage Java

207

Part 20: Jdbc

JDBC - callStatement (8/8)


requete precompilee pour appeler une fonction
de la BD
param`etres

CallableStatement cstmt =
conn . prepareCall ( " call myfunc (? ,?); " );
// fixer la valeur du 1er param`
etre donn
ee ( e.g. un r
eel)

cstmt . setFloat (1 , 34.5 f );


// le 2`
eme param`
etre est un r
esultat ( e.g. une cha^
ne)

cstmt . registerOutParameter (2 , Types . VARCHAR );


// ex
ecuter la requ^
ete

cstmt . execute ();


// afficher le le r
esultat

System . out . println ( cstm . getString (2));

V. Granet U.N.S.A.

Le langage Java

208

Vous aimerez peut-être aussi