Vous êtes sur la page 1sur 53

Le langage Java Cours Elec5 EPU

Granet Vincent 6 dcembre 2010 e

Bibliography

0-0
V. Granet U.N.S.A. Le langage Java 1

Part 1: Bibliography

Rfrences ee
[1] Vincent Granet and Jean-Pierre Regourd. Aide-Mmoire de Java. Dunod, 2 edition, e 2008. [2] Bertrand Meyer. Conception et Programmation orientes objet. Eyrolles, 2000. e [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. [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.

Introduction

V. Granet U.N.S.A.

Le langage Java

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Part 2: Introduction

Langage ` objets vs langage procdural a e


crit`res de justesse et abilit e e structuration autour des actions programmation descendante par ranements successifs structuration autour des objets prinit des objets par rapport aux actions e e

Historique
1991, J. Gosling et Sun. Langage pour programmer des processeurs embarqus dans e des appareils lectromnagers e e 1994, Java utilis pour crire un navigateur e e Web (futur HotJava) Netscape inclut un interpr`te Java dans son e navigateur 2006, Java 2 (version 1.6) Java langage de programmation ` usage gnral a e e + application pour le Web (applet = little application) Java embarqu : PDA, tlphones mobiles e ee Origine du nom : Oak puis Java (kawa)

objet = attributs + mthodes e


programme = collection dobjets dynamiques qui sont en interaction envoie de messages extensibilit, compatibilit, rutilisabilit e e e e

V. Granet U.N.S.A.

Le langage Java

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Part 2: Introduction

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

Inconvnients e
produit industriel temps dexcution - Interprtation (mais JIT) e e API tr`s (trop ?) vaste, dicile ` maitriser e a constructions archa ques issues de C temps rel e

V. Granet U.N.S.A.

Le langage Java

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Part 2: Introduction

Premi`res applications e

Compter les caract`res e

/* ma premi` re application Java */ e

/* * La classe Wc crit le nombre de caract` res e e * */ lus sur l entr e standard e

c l a s s HelloWorld { public } } // fin classe HelloWorld static v o i d main ( String [] args ) { System . out . println (" Hello World ! " );

i m p o r t java . io .*; public c l a s s Wc { static v o i d main ( String [] args ) t h r o w s IOException { i n t nbc = 0; // compteur de caract`res e w h i l e ( System . in . read () != -1) public

/* ma premi` re applet Java */ e

nbc ++;
// fin de fichier de lentre standard e

i m p o r t java . awt . Graphics ; i m p o r t java . applet . Applet ; } public c l a s s HelloWorldApplet e x t e n d s Applet {

System . out . println ( nbc ); } // 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

V. Granet U.N.S.A.

Le langage Java

Part 2: Introduction

Part 2: Introduction

Principe de compilation
interprtation e

Comment compiler et excuter ? e


$ javac HelloWorld.java $ java HelloWorld

compilateur Java source Java (.java) Java Java bytecode fichier Java bytecode (.class)

Hello World!

$ javac HelloWorldApplet.java $ appletviewer HelloWorldApplet.html

interprte Java

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

la variable CLASSPATH Production code ` la vole (JIT) a e

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 /** */ reconna des macros : t @author @version @param @return @see ...

Les types lmentaires ee

$ javadoc Wc.java $ firefox index.html

V. Granet U.N.S.A.

Le langage Java

12

V. Granet U.N.S.A.

Le langage Java

13

Part 3: Les types lmentaires ee

Part 3: Les types lmentaires ee

Les nombres
Arithmtique classique e byte (8 bits) short (16 bits) int (32 bits) long (64 bits)

Les boolens e
boolean false et true oprateurs : e ! | ^ & || && la ngation e la disjonction la disjonction exclusive la conjection la disjonction conditionnelle la conjection conditionnelle

123 0 98 067 0xAeF1 Byte.MIN VALUE Byte.MAX VALUE Short.MIN VALUE Short.MAX VALUE Integer.MIN VALUE Integer.MAX VALUE Long.MIN VALUE Long.MAX VALUE

float (32 bits) double (64 bits)


123.12 0. .12 98. 3.5e-7 1.5e2

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

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 lmentaires ee

Part 3: Les types lmentaires ee

Les caract`res e
char jeu de caract`res Unicode sur 16 bits e www.unicode.org constantes dnotes en apostrophes (e.g. a, e e 4, , etc.) caract`res spciaux : e e \b \f \n \r \t \\ \ valeur hexadcimale : \uxxxx (e.g. \u0041) e int nbEl`ves; e double ;

Les conteneurs
Les valeurs des types lmentaires ne sont pas ee des objets (au sens de la programmation objet) Byte Short Integer Long Float Double Boolean 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 noncs e e

Les noncs conditionnels e e


mme smantique que C e e if switch

Les noncs e e

V. Granet U.N.S.A.

Le langage Java

18

V. Granet U.N.S.A.

Le langage Java

19

Part 4: Les noncs e e

Part 4: Les noncs e e

Les noncs itratifs e e e


public { final d o u b l e = 0.0001; // prcision du calcul e b = StdInput . readDouble () , c = StdInput . readlnDouble () , r1 , r2 , i1 , i2 , ;
// a=0, b et c coefficients rels de e // lquation du second degr, ax2 + bx + c e e

static

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

d o u b l e a = StdInput . readDouble () ,

mme smantique que C e e while do-while for

= ( b * b ) -4* a * c; i f ( >=0) { // calcul des racines relles e 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

public

static

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

// Antcdent: n e e

// Consquent: factorielle=n! e

{ l o n g i = 0 , fact = 1;
// Invariant : fact=i!

r2 =

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

i1 = i2 = 0;
// (x-r1)(x-r2)=0

w h i l e (i < n ) {
// fact * (i+1) = i!*(i+1) et i<n

} e l s e { // calcul des racines complexes r1 = r2 = -b /(2* a ); i1 = Math . sqrt ( -)/(2* a ); i2 = - i1 ; }


// (x-(r1+ii1)) (x-(r2+ii2)) = 0 // crire les racines solutions sur la sortie standard e

i ++;
// fact*i = i!

fact *= i ;
// fact = i!

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

return }

fact ;

System . out . println (" r1 = ( " + r1 + " ," + i1 + " ) " ); 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 utiliss e par des clients programmation par contrat. B. Meyer. classe = moule ` objets a une classe nest pas un objet (en Java) un objet est une instance dune classe attributs et mthodes e
c l a s s Rectangle { d o u b l e largeur , longueur ; }

Les objets

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

Cration des objets e

Rfrences ee
La variable r est une rfrence a lobjet, et non pas ee ` lobjet lui-mme. e Pb de laectation, de la comparaison et du passage de param`tre. e

Rectangle r; r = new Rectangle ();

ou

Rectangle r = new Rectangle ();

Rectangle q = r ;

largeur

0.0 q 0.0 rfrence

largeur r rfrence longueur

0.0 0.0

r rfrence longueur

objet de type Rectangle

V. Granet U.N.S.A.

Le langage Java

24

V. Granet U.N.S.A.

Le langage Java

25

Part 5: Les objets

Part 5: Les objets

Les constructeurs
pour initialiser lobjet construit du nom de la classe constructeur par dfaut (e.g. Rectangle()) e valeur initiale 0 (0.0, \u0000, false , null )

Destruction des objets


automatique en Java ` la charge du support dexcution a e va dans le sens de la scurit e e

// 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 dfaut est perdu ! Il faut le e rednir. e

// construit un Rectangle de largeur et de longueur egales 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 mthodes e
procdures et fonctions e objet = automate ` tats ae une procdure modie ltat e e une fonction renvoie une description de ltat e mod`le pas toujours possible e

Acc`s aux attributs et aux mthodes e e


notation pointe e
r.largeur; r.prim`tre(); e e

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


// modifie la largeur du Rectangle courant

attributs publics attributs privs e


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

v o i d changerLargeur ( d o u b l e l ) { largeur = l ; }
// renvoie le prim`tre du Rectangle courant e e

p u b l i c v o i d changerLargeur ( d o u b l e l ) { largeur = l ; }
// renvoie le prim`tre du Rectangle courant e e

d o u b l e p rim` tre () { e e r e t u r n 2 * ( largeur + longueur ); } } }

p u b l i c d o u b l e p rim` tre () { e e r e t u r n 2 * ( largeur + longueur ); }

V. Granet U.N.S.A.

Le langage Java

28

V. Granet U.N.S.A.

Le langage Java

29

Part 5: Les objets

Part 5: Les objets

Mthodes et attributs statiques e

Paquetages(1/2)
Paquetage = ensemble de classes dune mme e thmatique (java.awt, java.lang, java.math, ...) e
java javax org

static static

i n t partag ; e v o i d uneM thode () { ... } e

Existent indpendamment de la cration des e e objets Accessibles avec le nom de la classe System.out Math.PI Math.exp(13.4) Math.sin(3.14) StdInput.readInt() main des mthodes e des attributs

applet

awt

io lang

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

Les mthodes statiques remettent en cause le e mod`le objet ! e

le paquetage est un rpertoire du syst`me de e e chiers par dfaut une classe appartient au rpertoire e e courant CLASSPATH

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

Paquetages(2/2)
Notation qualie : e les classes

Portes e

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

le paquetage partout

public

les attributs et les mthodes e mais dfaut e


public
i m p o r t java . util . Random ; Random r = new Random ();

le paquetage partout la classe classe sous-classes paquetage

private protected

Exemples

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 cha nes de caract`res e

Les cha nes de caract`res(1/3) e


Les cha nes de caract`res sont des objets e String et StringBuilder

String s = " Hello " ;

est quivalent ` e a

Les cha nes de caract`res e

String s = new String ( " Hello " );

la position du 1er caract`re est ` 0 e a oprateur de concatnation + e e attribut length longueur du cha ne

V. Granet U.N.S.A.

Le langage Java

34

V. Granet U.N.S.A.

Le langage Java

35

Part 6: Les cha nes de caract`res e

Part 6: Les cha nes de caract`res e

Les cha nes de caract`res (2/3) e


String pr nom = " Pierre " , e nom = " Martin " ;

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

La concatnation peut provoquer une e conversion implicite

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

pour un objet : appel implicite ` la mthode a e 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 cha nes de caract`res e

Les cha nes de caract`res (3/3) e


char int int int int String String String int boolean charAt(int index) indexOf(int ch) indexOf(int ch, int index) indexOf(String str) indexOf(String str, int index) substring(int beginIndex) toLowerCase() toUpperCase() compareTo(String s) equals(String s)

Les tableaux

i n t pos = 0; // position du mod`le dans le texte e w h i l e (( pos = texte . indexOf ( mod` le , pos )) != -1) e 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 ` une dimension (1/4) a


d o u b l e [] t3 = { 3.4 , 2.0 , -34 }; // 3 rels doubles e

les tableaux sont des objets (mais pas dhritage) e dclaration : e

t1 = new i n t [] { 1 , 2 , 3 }; // 3 entiers

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

La dclaration dun tableau NE cre PAS ses come e posants

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

composants de t[0] ` t[max-1] a initialisation ` 0, false , \u0000ou null a

V. Granet U.N.S.A.

Le langage Java

40

V. Granet U.N.S.A.

Le langage Java

41

Part 7: Les tableaux

Part 7: Les tableaux

Tableaux a 1 dimension (2/4) `


la taille du tableau est xe ` sa cration e a e lattribut length retourne le nb de composants length ne peut pas tre modi e e Les variables de type tableau sont des rfrences. ee Les oprateurs = et == nop`rent pas sur les compoe e sants ! t1 = t2 aectation de rfrences ee t1 == t2 comparaison de rfrences ee idem pour le passage de param`tres tableaux e

Tableaux ` 1 dimension (3/4) a

public

c l a s s Table { i n t [] tab ;

private

// le gnrateur de nombres alaroires e e e

p r i v a t e Random rand = new Random (); p u b l i c Table ( i n t n )


// R^le: initialise le tableau tab de faon alatoire o c e

{ 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 lments tab[0]..tab[i-1] sont e e // initialiss de faon alatoire e c e

t = ( i n t []) t1 . clone (); System . out . println ( Arrays . equals (t , t1 )); }

tab [ i ] = rand . nextInt (); } // 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

Tableaux a 1 dimension (4/4) `

Param`tres de lapplication e
tableau de cha nes de caract`res e param`tre de la fonction main e

/* Trie une table par s lection ordinaire */ e

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


// le tableau tab[0..i-1] est tri, et ces elments e e // sont infrieurs ` ceux de tab[i..tab.length-1] e a /* * * Cette application crit sur la sortie standard e * ses param` tres pass s lors de son ex cution e e e */

i n t min = i;
// chercher la place du min dans tab[i..tab.length-1]

f o r ( i n t j = i +1; j < tab . length ; j ++) i f ( tab [ j] < tab [ min ]) min = j ;
// changer le i`me et llment min e e e e

c l a s s Echo { public static v o i d main ( String [] args ) { f o r ( i n t i = 0; i < ( args . length -1); i ++) System . out . print ( args [ i ] + " " );
// ecrire le dernier param`tre et le passage ` la ligne e a

changer ( min , i ); e } } p r i v a t e v o i d changer ( i n t i , i n t j ) { e


// change les valeurs de tab[i] et tab[j] e

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

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

V. Granet U.N.S.A.

Le langage Java

44

V. Granet U.N.S.A.

Le langage Java

45

Part 7: Les tableaux

Part 7: Les tableaux

Tableaux ` plusieurs dimensions (1/3) a


comme en C tableaux de tableaux mmes remarques qu` une dimension e a

Tableaux ` plusieurs dimensions (2/3) a

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 ]; Complexe [][][] matriceC = new Complexe [ m ][ n ][ t ]; publicfinal i n t nblgs , nbcols ;
// le gnrateur de nombres alaroires e e e

p r i v a t e Random rand = new Random (); public Matrice ( i n t l , i n t c )

le nombre de composants des dimensions peut tre dirent e e

// R^le: crer une matrice (l,c) o e

// vrifier que l et c sont > 0 e

... 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]; matriceD [1] = new d o u b l e [10]; ...

... } // fin classe Matrice

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 ` plusieurs dimensions (3/3) a

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


// Antcdent : this(n,k) et m(k,p) sont e e // des matrices initialises e

// Consquent : renvoie une matrice (n,p) e // 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, // c x, y = k = 1pthis xkm ky

Hritage e

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

V. Granet U.N.S.A.

Le langage Java

49

Part 8: Hritage e

Part 8: Hritage e

Introduction
proprit fondamentale des langages ` objets ee a outil de la rutilisabilit e e biblioth`ques de classes extensibles e

Classe hriti`res (1/2) e e

public

c l a s s Carr { e

// Invariant de classe : cot > 0 e

p r i v a t e d o u b l e cot ; e p u b l i c Carr ( d o u b l e c ) e { cot = c ; e } p u b l i c d o u b l e p rim` tre () e e


// R^le: retourne le prim`tre du carr o e e e

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

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

V. Granet U.N.S.A.

Le langage Java

50

V. Granet U.N.S.A.

Le langage Java

51

Part 8: Hritage e

Part 8: Hritage e

Classe hriti`res (2/2) e e


un carr est un rectangle particulier e rutilisation de la classe Rectangle e

Hritage ou client e
relation est-un relation a-un mais ...

public

c l a s s Carr e x t e n d s Rectangle { e public ... } c l a s s Rectangle { Point origine ;

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

p u b l i c Carr ( d o u b l e c) { e s u p e r (c ,c ); } p u b l i c v o i d changerCot ( d o u b l e cot ) { e e


// R^le: met ` jour le cot o a e

changerLargeur ( cot ); e changerLongueur ( cot ); e } } public .... } c l a s s Rectangle e x t e n d s Point {

ou

protected super et super()

la classe Object le graphe dhritage e hritage = spcialisation et extension e e

V. Granet U.N.S.A.

Le langage Java

52

V. Granet U.N.S.A.

Le langage Java

53

Part 8: Hritage e

Part 8: Hritage e

Rednition des mthodes (1/2) e e


les classes hriti`res peuvent rednir des e e e mthodes e elles doivent possder la mme signature (sinon e e surcharge) les classes Rectangle et Carr dnissent les e e mthodes suivantes : e

Rednition des mthodes (2/2) e e

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

// Dans la classe Rectangle

p u b l i c String toString () { r e t u r n " rectangle de largeur " + largeur + " et de longueur " + longueur ; }
// Dans la classe Carr e

rectangle de largeur 2 et de longueur 4 carr de cot gal ` 6 e e e a

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

V. Granet U.N.S.A.

Le langage Java

54

V. Granet U.N.S.A.

Le langage Java

55

Part 8: Hritage e

Part 8: Hritage e

Recherche dun attribut ou dune mthode e


chaque fois que lon dsire accder ` un attribut e e a ou une mthode dune occurrence dobjet dune e classe C, il devra tre dni soit dans la classe e e C, soit dans lun de ses anctres. e si lattribut ou la mthode nest pas trouv, e e cest une erreur sil y a eu des rednitions, sa premi`re e e apparition en remontant le graphe dhritage e sera choisie.

Polymorphisme (1/2)
langages polymorphiques et non polymorphiques (langage typ et non typ) e e polymorphisme dans les langages de classes est contrl par lhritage oe e

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

Cast : c = (Carr) r ; si on est sr que r est un e u Carr e Exemple une classe Forme pour reprsenter les e formes gomtriques quelconques e e

V. Granet U.N.S.A.

Le langage Java

56

V. Granet U.N.S.A.

Le langage Java

57

Part 8: Hritage e

Part 8: Hritage e

Polymorphisme (2/2)

Liaison dynamique

Forme

tf [0] = new Rectangle (3 ,10); tf [1] = new Cercle (7); ... tf [0] = tf [1]; // tf[0] dsigne un cercle ? e ...

Ellipse

Rectangle

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

Cercle

Carr

Forme [] tf = new Formes [10];

lorsque quil y a des rednitions de mthodes, e e cest a lexcution que lon conna la mthode ` e t e a appliquer. ` elle est dtermine ` partir de la forme e e a dynamique de lobjet sur lequel elle sapplique. Intrt : ee localisation vite le pb du switch e

V. Granet U.N.S.A.

Le langage Java

58

V. Granet U.N.S.A.

Le langage Java

59

Part 8: Hritage e

Part 8: Hritage e

Classes et mthodes abstraites e


Une mthode abstraite nest dnie que par sa e e signature Introduite par le mot-cl abstract e Une classe peut tre dclare abstraite, e e e elle dcrit des caractristiques mais pas un e e fonctionnement

Hritage simple vs multiple e


en Java lhritage est simple e vite les pb complexes de recherche des noms e de lhritage multiple e
Cercle Carr

public abstract

c l a s s Forme {

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

CercledansCarr

les interfaces permettent un hritage multiple e simpli e Une classe abstraite ne peut tre instancie ! e e

V. Granet U.N.S.A.

Le langage Java

60

V. Granet U.N.S.A.

Le langage Java

61

Part 8: Hritage e

Part 8: Hritage e

Interfaces (1/2)
pour une forme simplie de lhritage multiple e e pour la gnricit e e e ce sont des classes dont toutes les mthodes e sont implicitement abstraites elles ne poss`dent pas dattribut, ` lexception e a de constantes ne peuvent pas tre instancies e e

Interfaces (2/2)
une classe peut se comporter comme une ou plusieurs interfaces Elle doit implanter (implements) le ou les interfaces elle et ses descendants sengagent ` dnir le a e corps des mthodes de linterface e

c l a s s MaClasse i m p l e m e n t s MonInterface { public i n t e r f a c e MonInterface { final i n t uneConstate = 10; } } p u b l i c v o i d uneM thode ( i n t x ) { e ....

static }

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

Serializable Cloneable Runnable ActionListener ...

V. Granet U.N.S.A.

Le langage Java

62

V. Granet U.N.S.A.

Le langage Java

63

Part 8: Hritage e

Part 8: Hritage e

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

les interfaces permettent un polymorphisme indpendant de la hirarchie dhritage e e e une variable de type interface I peut dsigner e nimporte quel objet de toute classe qui implante cette interface.

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

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

V. Granet U.N.S.A.

Le langage Java

65

Part 8: Hritage e

Part 8: Hritage e

Interfaces et gnricit(1/2) e e e
appliquer un traitement des objets quel que soit leur type jusqu` la version 1.4.2 de Java, la gnricit est a e e e limite et ` mettre en uvre avec des interfaces e a version 1.5 : notion du langage ` part enti`re a e On veut crire une mthode de tri qui puisse trier e e un tableau dobjets quelconques on doit pouvoir les comparer

Interfaces et gnricit(2/2) e e e

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

public }

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

i n t e r f a c e ltComparable { E E p u b l i c b o o l e a n infOu gal ( EltComparable o ); } Carr Comparable [] t1 = e { new Carr Comparable (3) , ... , e new Carr Comparable (12) , ... }; e 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`me e
Un vnement qui indique une situation anormale e e pouvant provoquer un dysfonctionnement du programme : pb matriel (E/S, mmoire, ...) e e pb logiciel (division par zro, non respect des e 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 mlangs e e code de retour (souvent un entier) pauvre en information un mcanisme labor : les exceptions e e e

V. Granet U.N.S.A.

Le langage Java

68

V. Granet U.N.S.A.

Le langage Java

69

Part 9: Les exceptions

Part 9: Les exceptions

Traitement
Une exception survient au cours de lexcution e dune action : rexcution de laction en changeant les e e conditions initiales dexcution ; e transmission de lexception ` lenvironnement a

Exceptions en Java
Les exceptions sont des objets situation anormale mission dune exception e java.lang.Exception java.lang.Throwable
Object

Throwable

E1
Error Exception

E2

RuntimeException

IOException

........

E3

ArithmeticException

........

E4

exception

toutes les exceptions (sauf RuntimeException ) doivent tre explicitement captures ou e e dlgues ee e

V. Granet U.N.S.A.

Le langage Java

70

V. Granet U.N.S.A.

Le langage Java

71

Part 9: Les exceptions

Part 9: Les exceptions

Capture dune exception (1/2)


clauses try-catch

Capture dune exception (2/2)

try { try {
// code normal

i n t x = StdInput . readlnInt (); .... } c a t c h ( IOException e ) {


// la mthode m peut provoquer une exception e

... o. m (); ... } c a t c h ( UneException e ) {


// code de traitement de lexception dsigne par e e e

System . err . println ( e ); System . exit (1); }

... }

public

static

i n t lirelnInt () {

try {

clause nally
}

r e t u r n StdInput . readlnInt (); c a t c h ( IOException e ) {

finally {
// code excut quoiquil arrive e e

System . err . println (e ); System . out . println (" r essayer : " ); e r e t u r n lirelnInt (); } }

V. Granet U.N.S.A.

Le langage Java

72

V. Granet U.N.S.A.

Le langage Java

73

Part 9: Les exceptions

Part 9: Les exceptions

Dlgation dune exception ee


une mthode nest pas tenue de capturer une e exception elle peut dlguer la capture ` son ee a environnement elle le signale avec la clause throws dans son en-tte e sauf pour les exceptions de type
RuntimeException

Crer ses propres exceptions e

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 ); } p u b l i c MonException ( String msg , i n t c ) { s u p e r ( msg ); code = c ;
// c = 0

p u b l i c v o i d maM thode () t h r o w s IOException { e i n t x = StdInput . readlnInt (); .... } }

} p u b l i c String toString () { 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 thode () { e i f (...) { throw new ArithmeticException (); } ... }

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

la clause throws est obligatoire dans len-tte e de la mthode qui l`ve une exception (sauf e e RuntimeException )
V. Granet U.N.S.A. Le langage Java 76 V. Granet U.N.S.A. Le langage Java 77

Part 10: Les entres/sorties e

Part 10: Les entres/sorties e

Flots doctets et de caract`res e


ots squentiels unidirectionnels e ots ` acc`s direct a e octets et caract`res Unicode e quatre classes de base : lecture ots doctets ots de caract`res e paquetage java.io
InputStream Reader

Fichiers doctets
Dclaration : e

FileInputStream is = new FileInputStream ( " entr e " ); e FileOutputStream os = new FileOutputStream ( " sortie " );

criture e
OutputStream Writer

mthodes de base : e int read() void write(int) void close()

V. Granet U.N.S.A.

Le langage Java

78

V. Granet U.N.S.A.

Le langage Java

79

Part 10: Les entres/sorties e

Part 10: Les entres/sorties e

Exemple : recopie dun chier

Fichier dobjets lmentaires ee


DataInputStream et DataOutputstream readChar, writeChar, readInt, writeInt, readDouble, writeDouble, ... n de chier exception EOFException

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 ); FileOutputStream os = new FileOutputStream ( out ) i n t c; w h i l e (( c = is . read ()) != -1) os . write ( c );
// EOF de is

p u b l i c d o u b l e moyenne ( String in ) t h r o w s IOException { DataInputStream is = i n t nb lem = 0; E d o u b l e moy = 0; try { while ( true ) { moy += is . readDouble (); nb lem ++; E } } c a t c h ( EOFException e ) { is . close (); } r e t u r n nb lem == 0 ? 0 : moy / nb lem ; E E }

new DataInputStream (new FileInputStream ( in ))

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

V. Granet U.N.S.A.

Le langage Java

80

V. Granet U.N.S.A.

Le langage Java

81

Part 10: Les entres/sorties e

Part 10: Les entres/sorties e

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

Fichier de texte
- caract`res Unicode e - FileReader et FileWriter

Rectangle r = new Rectangle (3 ,4); ObjectOutputStream os = new ObjectOutputStream ( new FileOutputStream ( " Frect " )
// criture dun objet de type Rectangle sur le fichier os e

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 ncessaire e 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 entres/sorties e

Part 10: Les entres/sorties e

E/S buerises e
FileReader is = new FileReader (" entr e " ); e b o o l e a n tatDansMot = f a l s e ; e i n t c , nbCar = 0 , nbMots = 0 , nbLignes = 0; w h i l e (( c = is . read ()) != -1) {
// incrmenter le compteur de caract`res e e

Pour amliorer les performances, les lectures et e les critures utilisent une zone tampon. e BufferedInputStream, BufferedOutputStream
BufferedReader, BufferedWriter

nbCar ++; i f (c == || c == \ t || c == \ n ) {
// c est un sparateur de mot e

i f ( tatDansMot ) tatDansMot = f a l s e ; e e i f ( c == \ n )
// fin dune ligne incrmenter le compteur de lignes e

FileInputStream is = new FileInputStream ( " entr e " ); e FileOutputStream os = new FileOutputStream ( " sortie " ); BufferedInputStream bis = new BufferedInputStream ( is );

nbLignes ++; } e l s e // on est dans un mot i f (! tatDansMot ) { e


// 1er car du mot incrmenter le compteur de mots e

BufferedOutputStream bos = new BufferedOutputStream ( os )

nbMots ++; tatDansMot = t r u e ; e } }


// fin de fichier afficher les rsultats e

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 entres/sorties e

Entre et sortie standard e


System.in de type InputStream System.out de type PrintStream System.err de type PrintStream La classe PrintStream propose des mthodes print e et println pour crire tout type dobjet apr`s e e conversion en cha de caract`res avec ne e
toString() System.in ne permet de lire que des octets. Pas de

conversion de type implicite classe locale StdInput

LAPI

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 prtes ` lemploi e a couvre de nombreux aspects de linformatique facilite la construction des applications ore des algorithmes ecaces collections arithmtique prcision innie e e gestion dimages 2D et3D gestion du son interfaces graphiques et applet processus lgers - synchronisation e rseau (URL, mod`le client-serveur RMI, objets e e distribus IDL Corba) e beans base de donnes (jdbc) e rexivit e e SDK (mcanismes de scurit) e e e

Collections et Tables
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

88

V. Granet U.N.S.A.

Le langage Java

89

Part 11: LAPI

Part 11: LAPI

Collections
Collection

La classe

Vector

tableau dynamique dont la taille est ajustable en fonction des besoins


Set

List

Vector v = new Vector (3);


ArrayList Vector LinkedList SortedSet HashSet

System . out . println ( v . size ()); f o r ( i n t i = 0; i < 10; i ++)


TreeSet

// 0

v. addElement (new Integer ( i * i )); System . out . println ( v . size ());


// 10

Liste et Ensembles gnriques e e Enonc foreach e

System . out . println ( v . elementAt (3)); // 9 v . setSize (20); v . setElementAt (new Integer (3) ,18); System . out . println ( v . size ()); v . removeElementAt (0); System . out . println ( v . size ());
// 19 // 20

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

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


// 0

V. Granet U.N.S.A.

Le langage Java

90

V. Granet U.N.S.A.

Le langage Java

91

Part 11: LAPI

Part 11: LAPI

Tables

La classe

Hashtable

Map

Table dont les lments sont reprs par des cls ee ee e et dont lacc`s se fait par adressage dispers. e e

Hashtable < String , Integer > ht =

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

new Hashtable < String , Integer >();

ht . put ( " Pierre " ,19); Integer n = ht . get ( " Pierre " );

TreeMap

HashMap

Hashtable

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

Valeur + Cl e

V. Granet U.N.S.A.

Le langage Java

92

V. Granet U.N.S.A.

Le langage Java

93

Part 11: LAPI

Part 11: LAPI

Les Properties
sous-classe de Hashtable correspondance cls et des valeurs String e une instance de Properties peut tre relie ` e e a une autre instance de Properties lues et sauvegardes dans un chier (texte ou e XML)

Threads
processus lgers vs processus e excution (quasi) parall`le des processus e e partage de ressources communes interface runnable synchronisation (mthodes synchronized) e

c l a s s MonThread e x t e n d s Thread { Properties p1 = new Properties (); Properties p2 = new Properties ( p1 ); p1 . setProperty ( " Auteur " , " Moli` re " ); e p2 . setProperty ( " Compositeur " , " Bach " ); System . out . print ( p1 . getProperty ( " Auteur " )); System . out . print ( p2 . getProperty ( " Compositeur " )); System . out . println ( p2 . getProperty ( " Acteur " ," inconnu " ));
// proprits de lenvironnement dexcution e e e

p u b l i c MonThread () { ... } p u b l i c v o i d run () { ... } } public c l a s s TestThread { static v o i d main ( String [] arg ) { MonThread threadA = new MonThread () , threadB = new MonThread (); threadA . start () // et non pas run() threadB . start (); } } public

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
ncessit des interfaces graphiques e e Abstract Window Toolkit (AWT) Java Foundation Classes (JFC) Swing applet (little application) programmation par vnements e e composants graphiques (boutons, menus, canvas, ascenseurs, bo de dialogue, etc.) tes

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
possibilit de consulter et dutiliser e dynamiquement la structure de classe des objets. ncessaire pour les butineurs de classes, e dbogueurs, ... e 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)
grain (de caf) e composant logiciel rutilisable destin ` tre e eae manipul par un outil de dveloppement e e interactif et graphique (beanbox, beanbuilder, ...) bean = classe Java implmente linterface Srializable e e constructeur public sans param`tre e pour tre exploitable, un bean doit tre archiv e e e (format jar) Un bean :

Beans (2/13)

est capable dintrospection (reect, inspector) poss`de des proprits (accessibles par des e ee mthodes setXX(), getXX(), isXX()), e ralise la persitence (une fois crs, les beans e ee doivent pouvoir tre conservs) e e communication entre beans par des vnements e e

V. Granet U.N.S.A.

Le langage Java

100

V. Granet U.N.S.A.

Le langage Java

101

Part 13: Beans

Part 13: Beans

Beans (3/13)

Beans (4/13)
Compilation et archivage

i m p o r t java . awt .*; i m p o r t java . io .*; public 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 final public public static static i n t RECTANGLE = 0; i n t CERCLE = 1;

javac

FirstBean.java

jar cvfm FirstBean.jar manifest.tmp FirstBean.class

chier manifest
Name: FirstBean.class Java-Bean: True

protected

i n t forme = CERCLE ; // proprit e e

p u b l i c FirstBean () { 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); }
// mthodes dacc`s ` la prorit forme e e a e e

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)
Un bean source peut mettre un vnement qui e e e produit lexcution dune action sur un bean cible. e 1. dnition de lvnement (ObjectEvent) e e e

Beans (6/13)
3. gestion de lmission de lvnement (source) e e e

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. dnition de lauditeur (EventListener) e

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

V. Granet U.N.S.A.

Le langage Java

105

Part 13: Beans

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 (); 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 ); } p u b l i c s y n c h r o n i z e d v o i d removeMyEventListener ( M myEventListeners . removeElement ( l ); } p r o t e c t e d v o i d notifyMyEvent () { Vector l ; MyEvent e = new MyEvent ( t h i s ); synchronized ( t h i s ) {
// pour viter toute modification e

4. gestion de la rception (cible) e

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 Cible () { src . addMyEventListener ( t h i s ); } p u b l i c v o i d myEventPerformed ( MyEvent e ) {
// callback ...

} }

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 ` notifyMyEvent pour mettre l v neme a e e e ... }

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)
Les proprits peuvent tre lies (lien ee e e unidirectionnel). Lorsquil y modication dune proprit lie, il ee e faut notier le changement. Elle envoie un PropertyChangeEvent chaque fois quelle change. Lvnement est reu par les e e c auditeurs qui implmentent e PropertyChangeListener. PropertyChangeEvent poss`de les mthodes : e e getSource() getOldValue() getNewValue() getPropertyName()
}

Beans (9/13)

i m p o r t java . beans .*; public .... p r i v a t e PropertyChangeSupport changes c l a s s FirstBean e x t e n d s Canvas i m p l e m e n t s

= new PropertyChangeSupport ( t h i s ) { changes . addPropertyChangeLi ste ner ( l ); } p u b l i c v o i d removePropertyListener ( PropertyChangeListener l ) { changes . removePropertyCha ng eLi st ene r (l ); p u b l i c v o i d setForme ( i n t newForme ) { i n t oldForme = newForme ; forme = newForme ; } ... }

p u b l i c v o i d addPropertyListener ( PropertyChangeListene

changes . firePropertyChange ( " forme " , oldForme , newForm

V. Granet U.N.S.A.

Le langage Java

108

V. Granet U.N.S.A.

Le langage Java

109

Part 13: Beans

Part 13: Beans

Beans (10/13)
Le bean auditeur doit implmenter linterface e PropertyChangeListener.

Beans (11/13)
Une proprit peut tre aussi contrainte : ee e elle envoie un PropertyChangeEvent juste avant quelle ne change. Mais dautres composants peuvent soppser ` ce changement a VetoableChangeListener. Les mthodes setXX doivent grer lexception e e PropertyVetoException.

i m p o r t java . beans .*; public { ...... p u b l i c v o i d propertyChange ( PropertyChangeEvent e ) .... } ... } c l a s s BeanAudit Serializable i m p l e m e n t s PropertyChangeListener ,

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 met le vto e e

i m p o r t java . beans .*; public 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 { p r i v a t e VetoableChangeSupport v to e = new VetoableChangeSupport ( t h i s ) p u b l i c v o i d addVetoableChangeLis ten er ( VetoableChangeListener l ) { 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 to . fireVetoableChange (" forme " , oldForme , newForme ); e forme = newForme ; changes . firePropertyChange ( " forme " , oldForme , newForm } ... } } } .... { ...... p u b l i c v o i d vetoableChange ( PropertyChangeEvent e ) t h r o w s PropertyVetoException { public c l a s s BeanAudit Serializable i m p l e m e n t s VetoableChangeListener ,

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 dexcution e excution (quasi) parall`le des processus e e processus lger (thread) e 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 { static v o i d main ( String [] arg ) { MonThread threadA = new MonThread () , threadB = new MonThread (); threadA . start () // et non pas run() threadB . start (); } } public

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)


pas dhritage multiple interface Runnable e Thread t1 = new Thread(t2)

Linterface Runnable (2/2)


cration des processus lgers e e dmarrage des processus lgers e e un thread pour main application termine lorsque tous les threads e sont nis priorit (getPriority() et setPriority(p)) e

public

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

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 atoire ( l o n g germe , l o n g time ) { e rand = new Random ( germe ); intervalle = time * 1000; } p u b l i c v o i d run () { while ( true ) { t r y { Thread . sleep ( intervalle ); } c a t c h ( InterruptedException e ) {} System . out . print ( rand . nextInt () + " " ); System . out . flush (); } } } // fin classe Alatoire e

public

c l a s s TestProd { static v o i d main ( String [] args ) { new Al atoire (10 , 1). proc . start (); e new Al atoire (15 , 3). proc . start (); e new Al atoire (13 , 3). proc . start (); e

public

} }

V. Granet U.N.S.A.

Le langage Java

116

V. Granet U.N.S.A.

Le langage Java

117

Part 14: Threads

Part 14: Threads

Etats dun threads


BLOCKED

Interruption dun processus (1/2)


mthode interrupt() e le processus peut vrier sil est interrompu ou e non (il g`re linterruption) e

thread en attente de la libration dune e donne. e thread qui na pas encore commenc ` ea sexcuter. e thread excutable, prt ` disposer de la e e a puissance de calcul. thread dont lexcution est termine. e e thread en attente avec une dure maxie mum spcie. e e thread en attente.

NEW

RUNNABLE

p u b l i c v o i d run () { w h i l e (! Thread . interrupted ()) { try { Thread . sleep ( intervalle ); } c a t c h ( InterruptedException e ) {


// interruption lors du sleep

TERMINATED TIMED WAITING

WAITING

break ; }

new Thread()
}

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

NEW yield() start() RUNNABLE sleep(dure) fin dure IO? IO ok

TERMINATED fin de run()

wait()

notify()

TIMED_WAITING

BLOCKED

WAITING

V. Granet U.N.S.A.

Le langage Java

118

V. Granet U.N.S.A.

Le langage Java

119

Part 14: Threads

Part 14: Threads

Interruption dun processus (2/2)

Attente de la n dun thread


mthodes join() ou join(long ms) (pour les e timeout)

public

c l a s s TestProd { static v o i d main ( String [] args ) {

public

new Al atoire (10 , 1). proc . start (); e new Al atoire (15 , 3). proc . start (); e Al atoire p = new Al atoire (13 , 1); e e p . proc . start (); ...
// arr^t du 3`me thread e e

public

static

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

Al atoire p1 = new Al atoire (10 , 1); e e Al atoire p2 = new Al atoire (15 , 2); e e Al atoire p3 = new Al atoire (13 , 1); e e p1 . proc . start (); 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 }

p . proc . interrupt (); } }

interruption dans le sleep exception hors du sleep drapeau Thread.interrupted() getPriority() et setPriority(int)

c a t c h ( InterruptedException e ) {} ... }

V. Granet U.N.S.A.

Le langage Java

120

V. Granet U.N.S.A.

Le langage Java

121

Part 14: Threads

Part 14: Threads

Gestion des threads (1/2)


static Thread
currentThread()

Gestion des threads (2/3)


void void
interrupt()

Retourne une rfrence sur le thread ee actif. static void


dumpStack()

Interrompt le thread.
join()

ou

join(long millis)

ou

join(long

millis, int nanos)

Ache une trace de la pile dexcution e du thread courant. String int


getName()

Attend que le thread meurt, au plus le temps indiqu en millisecondes et nanosecondes si e ces param`tres sont fournis. e void
notify()

Retourne le nom du thread.


getPriority()

Retourne la priorit du thread. e


Thread.State getState()

Rveille le thread prcdemment mis en ate e e tente. void


run()

Retourne ltat courant du thread. e static boolean


interrupted()

Retourne true si le thread est interrompu. boolean void void


isAlive()

Cette mthode par dfaut ne fait rien. Si le e e thread est issu dun objet de type Runnable, cest la mthode run de cet objet qui est e excute ou sinon sa rednition ventuelle. e e e e

Teste si le thread est actif.


setName(String name)

Change le nom du thread.


setPriority(int newPriority)

Change la priorit du thread. e

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
sleep(long millis) ou sleep(long millis, int nanos)

Synchronisation des threads (1/3)


pb de lacc`s ` une ressource critique (i.e. e a compte bancaire) pose dun verrou toutes les mthodes qui modient ltat dun e e dobjet partag doivent tre dclares e e e e synchronized.

Provoque lendormissement du thread pour une dure gale au nombre de millisee e condes auquel sajoutent les ventuelles nanoe secondes. void
start()

Provoque le dmarrage du thread, la JVM ape pelle alors sa mthode run . e 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 ; p u b l i c s y n c h r o n i z e d v o i d op ration ( d o u b l e som e i f ( solde + somme <0) System . err . println ( " retrait impossible " ); else solde += somme ; } }

timeout, int nanos)

Met le thread en attente dun notify invoqu e par un autre processus ou du dpassement du e temps pass en param`tre. e e void
yield()

Force le scheduling, le thread c`de sa place aux e autres processus ligibles. e

V. Granet U.N.S.A.

Le langage Java

124

V. Granet U.N.S.A.

Le langage Java

125

Part 14: Threads

Part 14: Threads

Synchronisation des threads (2/3)


synchronized (obj) nonc ; e e ainsi une mthode qualie synchronised peut se e e rcrire : e
... v o i d u n e M t h o d e ` S y n c h r o n i s e r () { e A synchronized ( t h i s ) { ... // code du corps de la mthode e } } ...

Synchronisation des threads (3/3)


... s y n c h r o n i z e d (...) { // dbut du bloc contr^l e o e ... // actions diverses
// tests de vrification des donnes e e

wait (); // les donnes ne sont pas pr^tes e e


// attente dun notify() transmis par ailleurs

// rveil et reprise du cours de lexcution e e

... // actions sur les donnes e


// le besoin de verrouiller nest plus

notify () // message de rveil des processus endormis e ... // 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)

File dattente

i m p o r t java . util .*; 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 (); } p u b l i c s y n c h r o n i z e d T d filer () { e 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

Producteurs

Consommateurs

producteurs et consommateurs doivent se synchroniser (le vide)

V. Granet U.N.S.A.

Le langage Java

128

V. Granet U.N.S.A.

Le langage Java

129

Part 14: Threads

Part 14: Threads

Tubes (1/2)
Un tube est un canal bidirectionnel entre 2 processus Les processus peuvent crire et lire dans le tube e

Tubes (2/2)
PipedInputStream et PipedOutputStream les tubes dentre et de sortie doivent tre e e connects : e ` la cration, avec le constructeur a e

PipedInputStream pi = new PipedInputStream ();

Thread1

Tube

Tread2

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

La synchronisation Producteur/Consommateur est gre par le support dexcution ee e

avec la mthode connect() e

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 ncessite une autre application graphique e (navigateurs, appletviewer) plugin (inclus dans la jre) classe Applet
lang.Object awt.Component

Applet

awt.Container awt.Panel applet.Applet

pas de mthode main e pas de constructeur, mais init contexte excution HTML e

V. Granet U.N.S.A.

Le langage Java

132

V. Granet U.N.S.A.

Le langage Java

133

Part 15: Applet

Part 15: Applet

Exemple

AppletContext
Concept de contexte dexcution (document e 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 { 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

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` = \_self, \_parent, \_blank, name u

<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
Concept de clip audio (ncessite un dispositif de e reproduction sonore). Plusieurs clips peuvent tre e interprts en mme temps par mixage sur la ee e mme plate-forme. e
AudioClip Applet.getAudioClip(URL url) charger le clip audio donn ` lURL. ea void AudioClip.loop(), interprtation indnie e e de ce clip. void AudioClip.play(), interprtation de ce clip, e une seule fois depuis le dbut. e void AudioClip.stop(), arrt de linterprtation e e de ce clip.

La classe Applet (AWT)


void init(), initialisation void start(), juste apr`s init(), ou e automatiquement ` chaque rapparition ` lcran a e a e (changement de page Web ou d-iconication), e pour signier ` cette applet quelle doit dmarrer a e ou redmarrer sa vritable excution. e e e void stop(), arrt de lapplet. Automatiquement e appel ` chaque disparition de lapplet de lcran ea e (changement de page Web ou iconication) ou juste avant sa destruction compl`te. e boolean isActive(), applet est active d`s le e dbut de lexcution de sa mthode start() et e e e cesse de ltre d`s que lexcution de stop() est e e e termine. e void resize(Dimension d), void resize(int l, int h) String getAppletInfo() void showStatus(String m), achage du message m dans la zone dtat de lapplet. e

V. Granet U.N.S.A.

Le langage Java

136

V. Granet U.N.S.A.

Le langage Java

137

Part 15: Applet

Part 15: Applet

e Evnements
raction aux vnements clic de souris e e e

Chargement de chiers
images ou sons, relatifs ` une URL (base du code a ou base du document)
URL getCodeBase(), adr rseau de lapplet (.class) e URL getDocumentBase(), adr rseau du contexte de e lapplet (.html) AudioClip getAudioClip(URL u), le clip audio situ ` ladr rseau u ea e AudioClip getAudioClip(URL u, String x), idem, mais le clip est recherch ` ladresse x, ea relativement ` ladresse de base u. a Image getImage(URL u), limage situe ` ladr e a rseau u. Chargement progressif lors de la premi`re e e demande dachage dans le contexte graphique courant, sauf si un contrleur de mdias o e (java.awt.MediaTracker bloque lapplet jusqu` la a n du chargement). Image getImage(URL u, String x), idem , limage est recherche ` ladresse x, relativement ` ladresse e a a de base u.
Image image = getImage(getCodeBase(), "Fig/f.gif");

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 ; }

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
Utilisation des CG dAWT (Buttons, Checkboxes, Labels, Canvas, etc.) les mthodes de classe Container (par hritage) e e permettent leur manipulation add, ajout dun composant remove, suppression setLayout, dnition de lagenceur e Composants graphiques Swing classe JApplet

Param`tres dune applet (1/2) e

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 " ); 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

V. Granet U.N.S.A.

Le langage Java

141

Part 15: Applet

Part 15: Applet

Param`tres dune applet (2/2) e


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

Dans la balise Applet du chier html, on passe les valeurs des param`tres e
<applet code="Bouton.class" width=400 height=150> <PARAM NAME=Url VALUE="http://www.unice.fr"> </applet> }

String [][] info = {


// Param`tre e Type Description

{" Url " , }; r e t u r n info ;

" URL " ,

" page ` afficher " } , a

noms des param`tres conventionnels e (SOURCE, xxxSOURCE, etc) les param`tres sont des cha e nes de car, mais lapplet pourra interprter des entiers, des e boolens, etc. e description des param`tres (peut tre utilise e e e 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

Scurit e e
System . getProperty ( " " os . name " ); // OK

Laction des applets est limite. Chaque e navigateur poss`de un SecurityManager qui e assure le contrle (SecurityException). o Une applet ne peut : utiliser que son propre code et lAPI des paquetages java.*. Cest tout. lire ou crire des chiers de la machine client. e Fichiers cot serveur. Exception pour les e applets locales ou identies (trusted, e signature). tablir des connexions rseaux, sauf avec la e e machine do` il est issu. Le serveur peut servir u de passerelles entre plusieurs applets sur des clients dirents. e excuter des programmes de la machine client. e lire certaines proritts syst`mes : ee e java.class.path, java.home, user.dir, user.home, user.name

V. Granet U.N.S.A.

Le langage Java

144

V. Granet U.N.S.A.

Le langage Java

145

Part 15: Applet

Part 15: Applet

Thread et Applet
p u b l i c v o i d stop () {

graphique actif (animation) initialisation de lapplet (init() start()) terminaison (stop() finalize())
}

i f ( proc != n u l l ) { proc . interrupt (); proc = n u l l ; } p u b l i c v o i d run () {

i m p o r t java . awt .*; i m p o r t java . applet .*; public c l a s s ThreadApplet 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 init () {
// initialisation des attributs

w h i l e ( isActive ()) {
// attendre laps de temps // calculer les changements

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


// redessiner le motif

} 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 (); } }

} } // fin classe ThreadApplet

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 rduction des clignotements lis au rachage e e e 1. ne pas eacer la fentre ; e 2. redessinner le strict ncessaire (dtourage) ; e e 3. le double buering.

Animation

V. Granet U.N.S.A.

Le langage Java

148

V. Granet U.N.S.A.

Le langage Java

149

Part 16: Animation

Part 16: Animation

1 - ne pas eacer la fentre e


repaint update paint

2 - Dtourage e
Ne racher que ce qui est ncessaire e e Dnir une portion de la fentre sur laquelle e e sappliquera le rachage. e
setClip(x, y, w, h) et clipRect(x, y, w, h)

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

Pour les animations, la portion doit se dplacer ! e Pb : les appels ` repaint peuvent tre tr`s a e e rapides, et certains appels ` update et paint a peuvent tre perdus ! e

on rcrit update de la faon suivante : ee c


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

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

// procdure "paint" ait effectivement t excute. e e e e e

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 ) {}

mthode ` utiliser lorsque les nouveaux dessins e a doivent se superposer avec les anciens

} } // fin repeindre

V. Granet U.N.S.A.

Le langage Java

150

V. Granet U.N.S.A.

Le langage Java

151

Part 16: Animation

Part 16: Animation

3 - Double buering (1/2)


Principe : crire dans une image auxiliaire. Une e fois limage termine, on lache dun coup sans e avoir ` eacer limage relle prcdente a e e e

3 - Double buering (2/2)


La mthode paint dessine dans le contexte gTemp e associ ` limage tmp, et excute ` la n : ea e a

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


// Afficher limage tampon sur le vritable cran : e e

Image

temp ;

// Tampon pour image dcran. e // Contexte graphique associ. e

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

Graphics gTemp ;

dans init :

g est connect ` lcran rel, temp est limage ` ea e e a dessiner a partir des coordonnes (0,0). Le dernier ` e param`tre supervise lachage. e

temp

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

// suppression du clignotement

gTemp = temp . getGraphics ();

p u b l i c v o i d update ( Graphics g ) {
// effacer limage temp

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

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

V. Granet U.N.S.A.

Le langage Java

152

V. Granet U.N.S.A.

Le langage Java

153

Part 17: Rseau e

Connexion ` des URL (1/3) a


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

URL(adr)

Rseau e

URL(prot,host,file) 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: Rseau e

Part 17: Rseau e

Connexion ` des URL (2/3) a

Connexion ` des URL (3/3) a

URL u = new URL ( " ftp :// vg : secret@taloa . unice . fr / in / f" ); URLConnection uc = u . openConnection ();
// indiquer lacc`s en criture e e

i m p o r t java . net .*; i m p o r t java . io .*; public c l a s s AfficherUrl { static try { URL url = new URL ( args [0]);
// convertir lurl en InputStream

public

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

uc . setDoOutput ( t r u e );
// crer un flot de sortie e

OutputStream os = uc . getOutputStream (); FileInputStream is = new FileInputStream ( " f " );


// copie le fichier f.txt

InputStream in = url . openStream (); i n t c; w h i l e (( c = in . read ()) != -1) System . out . print (( c h a r ) c ); } 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

i n t b; w h i l e (( b = is . read ()) != -1) os . write (( b y t e ) b );


// fin de fichier

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

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

V. Granet U.N.S.A.

Le langage Java

156

V. Granet U.N.S.A.

Le langage Java

157

Part 17: Rseau e

Part 17: Rseau e

Socket
services (http, ftp, telnet, ...) sont associs ` e a des ports un port est une entre virtuelle de lordinateur e pour obtenir un service, il faut (host, port) dans un programme, on tablit une ligne e virtuelle entre les ports des ordinateurs ` a connecter grce ` une socket. a a
Ordinateur A programme Ordinateur B programme

Modes de transmission
Communication par commutateurs : 1) Mode non connect : e commutation par paquets indpendants, e chaque paquet poss`de les adresses de dpart et e e darrive e Internet UDP, datagrams multicast connexion non able, ordre non garanti 2) Mode connect : e

socket port

port

circuit virtuel de commutation tabli au e pralable e Internet TCP connexion able, ordre garanti

Internet

port = entier sur 16 bits. Ports jusqu` 1024 a rservs (http 80, telnet 23, ...), au dessus, e e libres un programme peut grer plusieurs ports et e plusieurs sockets
V. Granet U.N.S.A. Le langage Java 158 V. Granet U.N.S.A. Le langage Java 159

Part 17: Rseau e

Part 17: Rseau e

Datagrammes (mission 1/2) e


classe DatagramPacket dnit les paquets ` e a transmettre classe InetAddress dnit les adresses Internet e
InetAddress adrSource = InetAddress.getLocalHost(); InetAddress adrDest = InetAddress.getByName("djinn");

Datagrammes (mission 2/2) e

i m p o r t java . net .*; i m p o r t java . io .*; public c l a s s Emetteur { static v o i d main ( String [] args ) public

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

InetAddress adrDest = InetAddress . getByName ( args

Un paquet Datagram contient linformation ` a transmettre :

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


// cration de la socket e

DatagramSocket socket = new DatagramSocket () b y t e [] data ; DatagramPacket paquet = n u l l ;

String msg = " blabla blabla " ; b y t e [] data = msg . getBytes (); DatagramPacket paquet = new DatagramPacket ( data , data . length , adrDest , por

while ( true ) { System . out . print (" > " ); String msg = StdInput . readLine (); i f ( msg == n u l l ) b r e a k ;
// convertir le message en tableau de bytes

data = msg . getBytes ();


// crer le paquet et lexpdier e e

Pour envoyer le paquet, il faut une socket :


} DatagramSocket socket = new DatagramSocket (); socket . send ( paquet ); } }

paquet = new DatagramPacket ( data , data . leng socket . send ( paquet ); socket . close ();

adrDest , portDes

V. Granet U.N.S.A.

Le langage Java

160

V. Granet U.N.S.A.

Le langage Java

161

Part 17: Rseau e

Part 17: Rseau e

Datagrammes (rception 1/2) e


Un paquet Datagram contenant linformation ` a recevoir doit tre cr : e ee

Datagrammes (rception 2/2) e

i m p o r t java . net .*; i m p o r t java . io .*; public c l a s s Receveur { static

b y t e [] data = new b y t e [512]; DatagramPacket paquet = new DatagramPacket ( data , data . length );

public

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

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


// cration de la socket e

DatagramSocket socket = new DatagramSocket ( port );


// tampon o` mettre le message reu u c

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

Pour recevoir le paquet, il faut galement une e socket avec le port :

// crer un paquet de rception des messages e e

DatagramPacket paquet = new DatagramPacket ( data , da while ( true ) {


// recevoir le prochain message

socket . receive ( paquet ); DatagramSocket socket = new DatagramSocket ( port ); socket . receive ( paquet );
// afficher le message reu c

System . out . print (" from " + paquet . getAddress (). ge System . out . println ( " " + msg ); } } }

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

V. Granet U.N.S.A.

Le langage Java

162

V. Granet U.N.S.A.

Le langage Java

163

Part 17: Rseau e

Part 17: Rseau e

Datagrammes
Sur lordinateur metteur, lyre : e
lyre $ javac Emetteur.java lyre $ java Emetteur djinn 17000

Datagrammes - Multicast
Pour envoyer un message ` un groupe de a machines destinatrices MulticastSocket les paquets sont envoys ` une adresse e a multicast : 224.0.0.1 239.255.255.255 ` a laquelle doit se joindre tous les destinataires

> blabla blabla > abracadabra >

Sur lordinateur rcepteur, djinn : e


djinn $ javac djinn $ java Receveur.java Receveur 17000

MulticastSocket mcs = new MulticastSocket ( port ); mcs . joinGroup ( mcsAdr );

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

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

Les datagrammes sont ensuite normalement expdis ou reus avec les mthodes send et e e c e receive prcdentes e e quitter le groupe : mcs.leaveGroup(mcsAdr); exemple dutilisation : programme chat

V. Granet U.N.S.A.

Le langage Java

164

V. Granet U.N.S.A.

Le langage Java

165

Part 17: Rseau e

Part 17: Rseau e

Mode connect TCP (mission 1/2) e e


Un metteur se connecte sur la machine e destinatrice grce ` une socket : a a

Mode connect TCP (mission 2/2) e e

i m p o r t java . net .*; i m p o r t java . io .*; public c l a s s Emetteur { static v o i d main ( String [] args )

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


// ou bien

public

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


// creation du socket

Socket socket = new Socket (); socket . bind (new InetSocketAddress ( " localhost " , 0)); // 1er socket . connect (new InetSocketAddress ( " djinn " , portDest )

Socket socket = new Socket (); socket . bind (new InetSocketAddress ( " localhost " , DataOutputStream out =

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

Un ot est cr entre les deux machines. ee

new DataOutputStream ( socket . getOutputStream () while ( true ) { System . out . print (" > " ); String msg = StdInput . readLine (); i f ( msg == n u l l ) b r e a k ;
// crire le message e

DataOutputStream out = new DataOutputStream ( socket . getO DataInputStream in = new DataInputStream ( socket . getInpu

out . writeChars ( msg ); out . writeChar ( \n ); } out . close (); socket . close (); } }

Lmetteur crit (ou lit) dans le chier out (ou e e in).

V. Granet U.N.S.A.

Le langage Java

166

V. Granet U.N.S.A.

Le langage Java

167

Part 17: Rseau e

Part 17: Rseau e

Mode connect TCP (rception 1/2) e e


Le receveur doit crer une socket spciale, e e ServerSocket en spciant le numro de port e e Il indique ensuite quil est prt ` accepter la e a connexion dun metteur e

Mode connect TCP (rception 1/2) e e

i m p o r t java . net .*; i m p o r t java . io .*; public c l a s s Receveur { static v o i d main ( String [] args ) public

t h r o w s IOException { ServerSocket socketServeur = new ServerSocket ( port ); Socket socketEmetteur = socketServeur . accept (); i n t port = Integer . parseInt ( args [0]);
// cration de la socket serveur e

ServerSocket socketServeur = new ServerSocket ( por


// cration du socket de rception e e

Socket socket = socketServeur . accept ();


// cration du flot de communication e

BufferedReader din = new BufferedReader ( while ( true ) { System . out . print ( " from " + System . out . println ( " " + din . readLine ()); } } }

new InputStreamReader ( socket . getInputStream ())

socket . getInetAddress (). getHostName (

V. Granet U.N.S.A.

Le langage Java

168

V. Granet U.N.S.A.

Le langage Java

169

Part 17: Rseau e

Part 17: Rseau e

Mod`le Client/Serveur (1/4) e


Sur lordinateur metteur, lyre : e
lyre $ javac Emetteur.java lyre $ java Emetteur djinn 17000

> blabla blabla > abracadabra >

Dans un mod`le client/serveur, le receveur est le e serveur qui peut accepter plusieurs connexions de dirents clients. Chaque client est trait par e e dans un thread.

while ( true ) {
// attendre la prochaine connexion

Sur lordinateur serveur, djinn :


} djinn $ javac djinn $ java Receveur.java Receveur 17000

Socket socketClient = socketServeur . accept (); new GestionDuClient ( socketClient ); // thread

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: Rseau e

Part 17: Rseau e

Mod`le Client/Serveur (2/4) e

Mod`le Client/Serveur (3/4) e

i m p o r t java . net .*; i m p o r t java . io .*; public c l a s s Serveur { static v o i d main ( String [] args ) public

c l a s s GestionDuClient 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 Socket socket ; p r i v a t e BufferedReader din ; socket = s ; din = new BufferedReader ( in ); proc . start (); } p u b l i c v o i d run () { while ( true ) try {
// crer un paquet de rception des messages e e

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


// creation de la socket

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

InputStreamReader in =new InputStreamReader ( s . getIn

ServerSocket socketServeur = new ServerSocket ( por System . out . println ( " Serveur actif sur le port " + while ( true ) {
// attendre la prochaine connexion

Socket socketClient = socketServeur . accept (); System . out . println ( socketClient . getInetAddress () + " connect " ); e
// grer le client dans un thread e

System . out . print (" from " + System . out . println ( " " + din . readLine ()); } c a t c h ( IOException e) { b r e a k ; } + " d connect " ); e e t r y { socket . close ();} c a t c h ( IOException e ) {} } }

new GestionDuClient ( socketClient ); } } }

socket . getInetAddress (). getHostName

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

V. Granet U.N.S.A.

Le langage Java

172

V. Granet U.N.S.A.

Le langage Java

173

Part 17: Rseau e

Part 17: Rseau e

Mod`le Client/Serveur (4/4) e


Sur les ordinateurs clients
lyre $ javac Emetteur.java lyre $ java Emetteur djinn 17000

djinn $ javac djinn $ java

Serveur.java Serveur 17000

Serveur actif sur le port 17000 mondrian.esinsa.unice.fr connect e lyre.esinsa.unice.fr connect e from lyre.esinsa.unice.fr blabla blabla from mondrian.esinsa.unice.fr hello ... from lyre.esinsa.unice.fr abracadabra

> blabla blabla > abracadabra >

mondrian $ javac Emetteur.java mondrian $ java > hello ... > Emetteur djinn 17000

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 dexcuter du e code C, C++, ... dans une application Java Intrt : ee rutilisation de code existant (biblioth`que) e e 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

V. Granet U.N.S.A.

Le langage Java

177

Part 18: Jni

Part 18: Jni

Jni (2/6)
Exemple : lincontournable HelloWorld

Jni (3/6)
Cration du .h associ ` la classe HelloWorld e ea
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 (); static {


// le code C est dans la biblioth`que hello e

Le chier donne le prototype de la fonction C qui assure linterface avec Java. Nom conventionnel
Java_Nom de la classe _Nom de la mthode e

System . loadLibrary ( " hello " ); } public } } static v o i d main ( String [] args ) { Java_HelloWorld_displayHelloWorld new 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)
Le chier C :
/* DO NOT EDIT THIS FILE - it is machine generated */

Jni (5/6)

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


/* Header for class HelloWorld */

#i n c l u d e < jni .h > #i n c l u d e " HelloWorld . h " #i n c l u d e < stdio .h > JNIEXPORT v o i d JNICALL { printf (" Hello world !\ n " ); return ;

#i f n d e f _Included_HelloWorld #d e f i n e _Included_HelloWorld #i f d e f __cplusplus e x t e r n " C" { #e n d i f


/* * Class : * Method : HelloWorld displayHelloW or ld

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

* 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 } #e n d i f #e n d i f

Cration de la biblioth`que libhello (Linux) e e


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

Excution de lapplication Java e


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 galement lacc`s ` Java depuis le e e a code natif (C, C++). Linterface JNI ore : des dnitions dquivalence de type (jboolean, e e jint, jdouble, jstring, jarray, jclass, etc.) des fonctions de manipulation de ces types par lintermdiaire de (JNIEnv *env) e lacc`s aux attributs et aux mthodes dobjets e e Java

Jdk 1.5

V. Granet U.N.S.A.

Le langage Java

182

V. Granet U.N.S.A.

Le langage Java

183

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Nouveauts Tiger e
La version 1.5 (Tiger) apporte des changements importants au langage : Autoboxing Importation static Enonc foreach e Enumrations e Gnricit e e e

Autoboxing
Les conversions explicites entre les types lmentaires et leurs quivalents objet nest ee e plus ncessaire : e

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

V. Granet U.N.S.A.

Le langage Java

185

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Importation static
Spcialisation de la directive import pour lacc`s e e non quali aux objets dclars static dune e e e classe

Enonc e

foreach

(1/2)

Forme gnralise de lnonc pour lorsquil sagit e e e e e dappliquer un mme traitement ` tous les e a lments dun tableau ou dune collection : ee criture plus naturelle et plus sre e u

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

i n t [] tab ; ....

on pourra crire : e

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

(2/2)

Enumration (1/2) e
Enumration de constantes reprsentes par des e e e 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 (); ) { Integer x = ( Integer ) i . next (); i f ( x % 2 == 0) somPairs += x ; }

enum Couleur { tr` fle , carreau , coeur , pique } e enum Valeur { deux , trois , quatre , cinq , six , sept , 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 (); 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 ; ... } }

couleur = c ;

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

V. Granet U.N.S.A.

Le langage Java

188

V. Granet U.N.S.A.

Le langage Java

189

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Enumration (2/2) e
enum Valeur {

les numrations sont des objets e e mthode prdnie values() e e e on peut ajouter des attributs et des mthodes e

deux (2) , trois (3) , quatre (4) , cinq (5) , 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 System . out . println ( Valeur . as ); // as System . out . println ( Valeur . as . valeur ()); // 20

Carte [] jeu52 = new Carte [52]; i n t i = 0; f o r ( Couleur c : Couleur . values ()) 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

Gnricit (1/5) e e e
Permet de paramtrer le type des structures de e donnes e vite les conversions explicites de type dues ` e a
Object

Gnricit (2/5) e e e

c l a s s Noeud <T > { T val ; Noeud <T > suivant ; Noeud ( T v ) { val = v; } } c l a s s Pile <E > {

assure les contrles de type o

Hashtable < String , Integer > ht = new Hashtable < String , Integer >(); ht . put ( " Paul " , 3); ht . put ( " Pierre " , 19); Integer n = ht . get ( " Pierre " ); // pas de conver. explicite i f ( n != n u l l ) System . out . println (" Pierre = " + n ); Vector < Integer > v = new Vector < Integer >(); 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

Noeud <E > sommet ; v o i d empiler ( E x ) {


// ajouter en t^te llment x e e e

Noeud <E > p = new Noeud <E >( x ); p . suivant = sommet ; sommet = p ; } E sommet () {
// retourner la valeur du sommet de pile

r e t u r n sommet . val ; }

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

V. Granet U.N.S.A.

Le langage Java

192

V. Granet U.N.S.A.

Le langage Java

193

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Gnricit (3/5) e e e

Gnricit (4/5) e e e

// Dfinition simplifie dune Pile gnrique e e e e

// une pile de cha^nes

c l a s s Pile <T > { private private final i n t N = 100; i n t sommet = 0;

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


// une pile de piles dentiers

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

// pas de gnricit sur les tableaux ! e e e

p r i v a t e T [] l ments = ( T []) new Object [ N ]; e e p u b l i c v o i d empiler ( T x ) { l ments [ sommet ++] = x ; e e } p u b l i c v o i d d piler () { e sommet - -; } p u b l i c T sommet () { r e t u r n l ments [ sommet -1]; e e } }

Mais aussi, sans gnricit e e e


Pile p = new Pile(); p.empiler("bonjour"); p.empiler(6); // OK // la conversion suivante est obligatoire 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

Gnricit (5/5) e e e
Gnricit sur plusieurs types : e e e

Gnricit et Polymorphisme (1/2) e e e

Pile < Integer > p1 = new Pile < Integer >(); c l a s s Noeud <C ,V > { C cl ; e V val ; Noeud <C ,V > suivant ; Noeud ( C c , V v ) { cl = c ; val = v; } e } Pile < Object > p2 = p1 ;

Illgal : car on pourrait empiler autre chose que e des Integer ! De mme : e

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 ); }
// Implmentation dune pile par un tableau e

} ... Pile < Integer > p = new Pile < Integer >(); 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^ne e

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

Notez le mme nom E e


V. Granet U.N.S.A. Le langage Java 196 V. Granet U.N.S.A. Le langage Java 197

Part 19: Jdk 1.5

Part 19: Jdk 1.5

Gnricit et Polymorphisme (2/2) e e e


Solution : la notation ?

Mthodes gnriques e e e

v o i d dupliquerSommet ( Pile <? > p) { Object o = p . sommet (); // OK v o i d afficherSommet ( Pile <? > p ) {...} ... Pile < Integer > pi = new Pile < Integer >(); afficherSommet ( pi ); // OK Pile < String > ps = new Pile < String >(); afficherSommet ( ps ); // OK } p . empiler ( o ); // erreur de compilation
// car le type des lments est inconnu e e

Solution : mthodes gnriques e e e 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 ore la connexion dapplications Java avec dirents types de BD (SQL, tableurs, etc.) e API JDBC est indpendante du SGBD. e Ensemble de classes (java.sql.*)
client client

Jdbc
serveur BD

midleware

serveur BD

Modele 2 couches

Modele 3 couches

V. Granet U.N.S.A.

Le langage Java

200

V. Granet U.N.S.A.

Le langage Java

201

Part 20: Jdbc

Part 20: Jdbc

JDBC (2/8)
Lacc`s ` la BD se fait par lintermdiaire dun e a e pilote. 1. un pont entre JDBC et ODBC (Microsoft). La communication se fait via des fonctions C appeles par les mthodes du pilote ; e e 2. les pilotes recourant ` des fonctions non-Java a spciques du SGBD ; e 3. les pilotes permettent lemploi dun serveur middleware. Il sagit dune interface avec le SGBD via une API spcique ; e 4. les pilotes Java propritaires utilisant e directement le protocole rseau du SGBD. e

JDBC (3/8)
import java.sql.* JDBC g`re : e la connexion ` la BD a lenvoi de requtes SQL e lexploitation des rsultats provenant de la e BD

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)


DriverManager :

JDBC - Statement (5/8)


Envoi de requtes SQL (Statement e createStatement pour une requte SQL simple e (sans param`tre) e prepareStatement pour une requte SQL e (prcompile) avec param`tres e e e prepareCall pour lappel dune procdure e prpare. e e ResultSet executeQuery(), int executeUpdate()

g`re les pilotes chargs (ici pour mysql) : e e

try {
// crer une nouvelle instance du Driver e

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

cre les connexions (Connection) : e

// crer un Statement e

Statement stmt = conn . createStatement ();


// excuter une requ^te SQL e e

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

ResultSet rs = stmt . executeQuery ( " SELECT * FROM uneTable ; " );

... } c a t c h ( Exception ex ) { /* g rer les erreurs */ } e finally { i f ( conn != n u l l ) conn . close (); }

V. Granet U.N.S.A.

Le langage Java

204

V. Granet U.N.S.A.

Le langage Java

205

Part 20: Jdbc

Part 20: Jdbc

JDBC - ResultSet (6/8)


ResultSet rsultat dune requte SQL (i.e. e e lignes de la table) mthodes get pour accder aux colonnes de la e e ligne courante next() pour passer le curseur ` la ligne suivante a previous() conversion de types entre SQL et Java (getString, getInt, getDate, ...)

JDBC - prepareStatement (7/8)


requte prcompile (plus ecace) e e e param`tres e

// INSERT INTO animal VALUES // -> (Coco,Diane,Perroquet,f,2000-06-09,NULL);

PreparedStatement pstmt = conn . prepareStatement ( " INSERT INTO animal VALUES (? ,? ,? ,? ,? , NULL ); " );
// dfinir les param`tres e e

rs . absolute (2); System . out . println ( " Resultat : " + rs . getInt (1)); rs . beforeFirst (); w h i l e ( rs . next ()) { String nom = rs . getString ( " nom " ); String esp` ce = rs . getString ( " espece " ); e Date naissance = rs . getDate (" naissance " ); System . out . println ( nom + " " + esp` ce + e " " + naissance ); }
// excuter la requ^te e e

pstmt . setString (1 , " Coco " ); pstmt . setString (2 , " Diane " );

pstmt . executeUpdate ();

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)


requte prcompile pour appeler une fonction e e e de la BD param`tres e

CallableStatement cstmt = conn . prepareCall ( " call myfunc (? ,?); " );


// fixer la valeur du 1er param`tre donne ( e.g. un rel) e e e

cstmt . setFloat (1 , 34.5 f );


// le 2`me param`tre est un rsultat ( e.g. une cha^ne) e e e

cstmt . registerOutParameter (2 , Types . VARCHAR );


// excuter la requ^te e e

cstmt . execute ();


// afficher le le rsultat e

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

V. Granet U.N.S.A.

Le langage Java

208