Professional Documents
Culture Documents
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
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)
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
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
nbc ++;
// fin de fichier de lentre standard e
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
compilateur Java source Java (.java) Java Java bytecode fichier Java bytecode (.class)
Hello World!
interprte Java
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 ...
V. Granet U.N.S.A.
Le langage Java
12
V. Granet U.N.S.A.
Le langage Java
13
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
V. Granet U.N.S.A.
Le langage Java
14
V. Granet U.N.S.A.
Le langage Java
15
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)
V. Granet U.N.S.A.
Le langage Java
16
V. Granet U.N.S.A.
Le langage Java
17
Les noncs e e
V. Granet U.N.S.A.
Le langage Java
18
V. Granet U.N.S.A.
Le langage Java
19
static
d o u b l e a = StdInput . readDouble () ,
= ( 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 =
i1 = i2 = 0;
// (x-r1)(x-r2)=0
w h i l e (i < n ) {
// fact * (i+1) = i!*(i+1) et i<n
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
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
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
ou
Rectangle q = r ;
largeur
0.0 0.0
r rfrence longueur
V. Granet U.N.S.A.
Le langage Java
24
V. Granet U.N.S.A.
Le langage Java
25
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 )
V. Granet U.N.S.A.
Le langage Java
26
V. Granet U.N.S.A.
Le langage Java
27
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
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
V. Granet U.N.S.A.
Le langage Java
28
V. Granet U.N.S.A.
Le langage Java
29
Paquetages(1/2)
Paquetage = ensemble de classes dune mme e thmatique (java.awt, java.lang, java.math, ...) e
java javax org
static static
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
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
Paquetages(2/2)
Notation qualie : e les classes
Portes e
dfaut e
java . util . Random r = new java . util . Random ();
le paquetage partout
public
private protected
Exemples
V. Granet U.N.S.A.
Le langage Java
32
V. Granet U.N.S.A.
Le langage Java
33
est quivalent ` e a
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
System . out . println ( pr nom + " " + nom ); e System . out . println ( pr nom . length ); e
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
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
t1 = new i n t [] { 1 , 2 , 3 }; // 3 entiers
V. Granet U.N.S.A.
Le langage Java
40
V. Granet U.N.S.A.
Le langage Java
41
public
c l a s s Table { i n t [] tab ;
private
{ 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
V. Granet U.N.S.A.
Le langage Java
42
V. Granet U.N.S.A.
Le langage Java
43
Param`tres de lapplication e
tableau de cha nes de caract`res e param`tre de la fonction main 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
V. Granet U.N.S.A.
Le langage Java
44
V. Granet U.N.S.A.
Le langage Java
45
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
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]; ...
V. Granet U.N.S.A.
Le langage Java
46
V. Granet U.N.S.A.
Le langage Java
47
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
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
public
c l a s s 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^le: retourne la surface du carr o 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
Hritage ou client e
relation est-un relation a-un mais ...
public
ou
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
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()
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
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
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
Cercle
Carr
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
public abstract
c l a s s Forme {
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
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 ();
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 }
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
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
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
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
try { try {
// code normal
... }
public
static
i n t lirelnInt () {
try {
clause nally
}
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
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
V. Granet U.N.S.A.
Le langage Java
74
V. Granet U.N.S.A.
Le langage Java
75
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
Fichiers doctets
Dclaration : e
FileInputStream is = new FileInputStream ( " entr e " ); e FileOutputStream os = new FileOutputStream ( " sortie " );
criture e
OutputStream Writer
V. Granet U.N.S.A.
Le langage Java
78
V. Granet U.N.S.A.
Le langage Java
79
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 }
V. Granet U.N.S.A.
Le langage Java
80
V. Granet U.N.S.A.
Le langage Java
81
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
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
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 );
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
LAPI
V. Granet U.N.S.A.
Le langage Java
86
V. Granet U.N.S.A.
Le langage Java
87
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
Collections
Collection
La classe
Vector
List
// 0
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. Granet U.N.S.A.
Le langage Java
90
V. Granet U.N.S.A.
Le langage Java
91
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
SortedMap
ht . put ( " Paul " , 3);
ht . put ( " Pierre " ,19); Integer n = ht . get ( " Pierre " );
TreeMap
HashMap
Hashtable
Valeur + Cl e
V. Granet U.N.S.A.
Le langage Java
92
V. Granet U.N.S.A.
Le langage Java
93
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
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
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
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
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
chier manifest
Name: FirstBean.class Java-Bean: True
protected
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
V. Granet U.N.S.A.
Le langage Java
102
V. Granet U.N.S.A.
Le langage Java
103
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
V. Granet U.N.S.A.
Le langage Java
104
V. Granet U.N.S.A.
Le langage Java
105
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
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
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)
= 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
V. Granet U.N.S.A.
Le langage Java
108
V. Granet U.N.S.A.
Le langage Java
109
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
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
Introduction
processus = programme en cours dexcution e excution (quasi) parall`le des processus e e processus lger (thread) e la classe Thread (java.lang)
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
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
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
WAITING
break ; }
new Thread()
}
System . out . print ( rand . nextInt () + " " ); System . out . flush (); }
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
public
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
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 }
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
Interrompt le thread.
join()
ou
join(long millis)
ou
join(long
Attend que le thread meurt, au plus le temps indiqu en millisecondes et nanosecondes si e ces param`tres sont fournis. e void
notify()
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
V. Granet U.N.S.A.
Le langage Java
122
V. Granet U.N.S.A.
Le langage Java
123
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()
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 ; } }
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()
V. Granet U.N.S.A.
Le langage Java
124
V. Granet U.N.S.A.
Le langage Java
125
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
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
V. Granet U.N.S.A.
Le langage Java
128
V. Granet U.N.S.A.
Le langage Java
129
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
Thread1
Tube
Tread2
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
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
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
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
V. Granet U.N.S.A.
Le langage Java
134
V. Granet U.N.S.A.
Le langage Java
135
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.
V. Granet U.N.S.A.
Le langage Java
136
V. Granet U.N.S.A.
Le langage Java
137
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");
V. Granet U.N.S.A.
Le langage Java
138
V. Granet U.N.S.A.
Le langage Java
139
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
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
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> }
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
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
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 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
V. Granet U.N.S.A.
Le langage Java
146
V. Granet U.N.S.A.
Le langage Java
147
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
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
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
Image
temp ;
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
// suppression du clignotement
p u b l i c v o i d update ( Graphics g ) {
// effacer limage temp
V. Granet U.N.S.A.
Le langage Java
152
V. Granet U.N.S.A.
Le langage Java
153
URL(adr)
Rseau e
V. Granet U.N.S.A.
Le langage Java
154
V. Granet U.N.S.A.
Le langage Java
155
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
uc . setDoOutput ( t r u e );
// crer un flot de sortie e
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
V. Granet U.N.S.A.
Le langage Java
156
V. Granet U.N.S.A.
Le langage Java
157
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
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
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
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
b y t e [] data = new b y t e [512]; DatagramPacket paquet = new DatagramPacket ( data , data . length );
public
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 ); } } }
V. Granet U.N.S.A.
Le langage Java
162
V. Granet U.N.S.A.
Le langage Java
163
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
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
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
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 =
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 (); } }
V. Granet U.N.S.A.
Le langage Java
166
V. Granet U.N.S.A.
Le langage Java
167
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
BufferedReader din = new BufferedReader ( while ( true ) { System . out . print ( " from " + System . out . println ( " " + din . readLine ()); } } }
V. Granet U.N.S.A.
Le langage Java
168
V. Granet U.N.S.A.
Le langage Java
169
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
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
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
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 ) {} } }
V. Granet U.N.S.A.
Le langage Java
172
V. Granet U.N.S.A.
Le langage Java
173
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
mondrian $ javac Emetteur.java mondrian $ java > hello ... > Emetteur djinn 17000
V. Granet U.N.S.A.
Le langage Java
174
V. Granet U.N.S.A.
Le langage Java
175
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
Jni (2/6)
Exemple : lincontournable HelloWorld
Jni (3/6)
Cration du .h associ ` la classe HelloWorld e ea
javah HelloWorld
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
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 > #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 ;
* Signature : () V */
V. Granet U.N.S.A.
Le langage Java
180
V. Granet U.N.S.A.
Le langage Java
181
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
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
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
i n t [] tab ; ....
on pourra crire : e
V. Granet U.N.S.A.
Le langage Java
186
V. Granet U.N.S.A.
Le langage Java
187
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 ;
V. Granet U.N.S.A.
Le langage Java
188
V. Granet U.N.S.A.
Le langage Java
189
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 ; }
} // 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
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 > {
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 > 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
Gnricit (3/5) e e e
Gnricit (4/5) e e e
Pile < Pile < Integer > > p2 = new Pile < Pile < Integer > >();
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 } }
V. Granet U.N.S.A.
Le langage Java
194
V. Granet U.N.S.A.
Le langage Java
195
Gnricit (5/5) e e e
Gnricit sur plusieurs types : 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
} ... Pile < Integer > p = new Pile < Integer >(); afficherSommet ( p ); // types incompatibles
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
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
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
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
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
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
// crer un Statement 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
... } 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
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 " );
V. Granet U.N.S.A.
Le langage Java
206
V. Granet U.N.S.A.
Le langage Java
207
V. Granet U.N.S.A.
Le langage Java
208