Beruflich Dokumente
Kultur Dokumente
Introduction Syntaxe de base p.17 Variables, types, porte p.19 Oprateurs p.49 Instructions de contrle p.65 Fonctions p.81 Entres-sorties standards p.97 Norbert KAJLER, Fabien MOUTARDE CCSI Mines ParisTech Programme, compilation, excution p.105 Classes p.113 Paquetages, import, javadoc, p.137 Hritage p.153 Interfaces p.177 Threads p.225 Paquetages standards p.241 java.lang p.243 Entre-sorties : paquetage java.io p.273 Collections, (+ dates, ) : java.util p.289 Graphisme : p.321 Applets p.323 java.awt p.337 Evnements p.361 javax.swing p.377 Programmation rseau : java.net p.385 Programmation distribue : java.rmi p.393 Accs bases de donnes : java.sql p.401 JavaBeans p.409
29/03/2011 16:09 2
Norbert.Kajler@mines-paristech.fr ; Fabien.Moutarde@mines-paristech.fr
Les langages de programmation Niveaux et catgories de langages : langage binaire assembleur : instructions de base du processeur (transferts entre registres, addition, ) langages impratifs Basic, Fortran, Pascal, C, ... langages fonctionnels Lisp, Caml, ... langages orients-objet SmallTalk, C++, Java,...
3 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 4
INTRODUCTION
Avertissement : Ceci n'est PAS un polycopi, mais une simple copie de transparents, prvue pour faciliter le suivi des cours et la prise de notes manuscrites complmentaires.
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09
Historique de Java Initialement, projet de la socit Sun (rachete depuis par Oracle) pour l'lectronique grand public (1991) Transform en langage pour le Web, sous le nom de Java , grce sa portabilit (1994/95) Lancement officiel en mai 1995 Aprs l'engouement pour les applets, Java est progressivement reconnu comme un langage part entire Langage de programmation sans doute le plus utilis aujourdhui :
plusieurs millions de dveloppeurs Java nombreux outils de dveloppement 6 milliards dobjets avec une machine virtuelle Java , dont 85% des tlphones portables et 91% des ordinateurs (chiffres 2008)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 5
2000 : v.1.3 (ou Kestrel ou J2SE 1.3) 2002 : v.1.4 (ou Merlin ou J2SE 1.3) 2004 : v.1.5 (ou Tiger ou J2SE 5.0 !!)
gnricit (proche des templates de C++), types numrs, autoboxing/unboxing des types primitifs dans les collections, web services, ...
Intrt de Java logiciels portables programmes fiables (rigueur du langage => peu de bogues) dveloppement rapide pages Web interactives (via les applets ) logiciels (ou briques logicielles) tlchargeables, ventuellement automatiquement gestion de la scurit (par dfaut, accs restreint aux ressources locales pour les applets)
Caractristiques de Java Un langage orient-objet : portable compil puis interprt (bytecode+JVM) robuste (typage fort, pas de pointeurs, garbage collector) modulaire (packages) intgrant le multi-threading une norme librairie de classes standards
29/03/2011 16:09
29/03/2011 16:09
Java et les autres langages Java est trs proche de C++ (syntaxe de base identique C et C++) Simplifications de Java (par rapport C++) :
pas de manipulation de pointeurs sous forme dadresse mmoire, gestion mmoire automatique (garbage collector) pas de surcharge des oprateurs pas d'hritage multiple pas de prprocesseur
Nombreux outils de dveloppement dont la plateforme Eclipse (gratuite) Les sources de Java sont disponibles gratuitement (code de toutes les classes prdfinies)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 10
29/03/2011 16:09
11
29/03/2011 16:09
12
29/03/2011 16:09
13
29/03/2011 16:09
14
29/03/2011 16:09
15
29/03/2011 16:09
16
Premiers exemples
Quelques lignes de code Java : int i, somme; affectation somme = 0; for (i=1; i<=9; i++) somme = somme+i; dclarations
boucle
SYNTAXE DE BASE
Un programme en Java :
class Prog {
public static void main(String [] args){ int i, somme=0; for (i=1; i<=9; i++) { Programme principal somme += i; } System.out.println(somme); } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 17
29/09/2011 19:09
18
Variables et types notion de variable : nom (identificateur) + type + zone mmoire VARIABLES, TYPES, PORTEE, COMMENTAIRES, en Java, deux grandes catgories de types : types primitifs (entiers, flottants, ) rfrences des types composites : tableaux numrations objets interfaces
29/03/2011 16:09
19
29/03/2011 16:09
20
Types primitifs boolean char (16-bit, Unicode) byte : entier (sign) 8-bit short : entier (sign) 16-bit int : entier (sign) 32-bit long : entier (sign) 64-bit
Boolens : boolean 2 valeurs : true ou false vritable type type retourn par les oprateurs de comparaison type attendu dans tous les tests ne peut pas tre converti en entier
float : flottant (IEEE 754) 32-bit double : flottant (IEEE 754) 64-bit
29/03/2011 16:09
21
29/03/2011 16:09
22
Caractres : char 16-bit 65536 valeurs : quasiment tous les caractres de toutes les critures ! ne sont affichables que si le systme possde les polices de caractres adquates ! littraux entre simples quotes : 'a' 'Z' caractres spciaux : '\n' '\t' '\b' '\\' ... possibilit dutiliser la valeur Unicode : '\u03c0' pour la lettre tests du type : Character.isLetter(c), Character.isDigit(c), o c est une variable de type char convertible automatiquement en int ou long (et manuellement en byte ou short) inversement, (char)val est le caractre dont le code Unicode est l'entier val
23 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 24
conversion automatique seulement vers les types entiers plus grands (int>long, etc...) et vers les types flottants
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09
Flottants notation ingnieur : 2.45e-25 littraux de type double par dfaut : float x = 2.5; // Erreur double y = 2.5; // OK valeurs f ou F pour spcifier un float : float x = 2.5f; valeurs min/max de valeur absolue (hors 0) :
float => [ 1.40239846e-45 ; 3.40282347e+38 ] double => [ 4.9406...e-324 ; 1.7976...e+308 ]
Constantes variable dont la valeur ne peut plus tre change une fois fixe se dclare avec le mot-cl final : final double PI = 3.14159; ce qui interdit dcrire ensuite PI = 3.14; // ERREUR possibilit de calculer la valeur de la constante plus tard l'excution, et ailleurs qu'au niveau de la dclaration : final int MAX_VAL; // OK : constante blanche // ... MAX_VAL = lireValeur();
valeurs spciales : Infinity, -Infinity, NaN conversion automatique : seulement float > double la conversion manuelle en entier tronque la partie dcimale : float x = -2.8f; int i = (int) x;
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI
// => i==-2
29/03/2011 16:09 25 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 26
Conventions de nommage pas obligatoires, mais trs fortement recommandes (car important pour la lisibilit du code et sa maintenance) identificateurs en minuscules, sauf :
majuscule au dbut des sous-mots intrieurs : unExempleSimple dbut des noms en majuscule pour classes et interfaces (et elles seules) : UnNomDeClasse
exemples de dclaration : int i; float x, y, z; char c = 'A', d; boolean flag = true; initialisation obligatoire avant usage : int i, j; j = i; // ERREUR : i non initialis porte des variables (= zone de validit de la dclaration) : jusqu' la fin du bloc englobant (voir plus loin)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 27
pour les constantes, majuscules et sparation des mots par _ final int VALEUR_MAX; pas d'emploi de $ (et de caractres non ASCII)
29/03/2011 16:09
28
Commentaires Sur une ligne (style C++) : //Commentaire -> fin de la ligne int x; // Ligne partielle Sur plusieurs lignes (style C) : /* Commentaire qui s'tend sur plusieurs lignes */ De documentation : /** Commentaire pour javadoc */ javadoc : outil qui analyse le code Java, et produit automatiquement une documentation HTML avec la liste des classes, leurs attributs, mthodes (avec leurs ventuels commentaires de documentation respectifs)
Rfrences
servent manipuler objets et tableaux voir comme une sorte de poigne plusieurs rfrences diffrentes peuvent rfrencer un mme objet ou tableau les rfrences sont types une affectation modifie la rfrence, et non la chose rfrence : int t1[] = {1,2,3}; int[] t1; t1 = new int [3]; int t2[] = t1; t1[0] = 1; // t2 : 2 rf. au mme tableau t1[1] = 2; t1[2] = 3; t2 = new int[5]; // t1 reste rf. {1,2,3} t1 = null; // => t1 ne pointe plus vers rien
null : valeur d'une rfrence vers rien (pour tous types de rfrences)
29/03/2011 16:09
29
29/03/2011 16:09
30
Tableaux (1)
manipuls par des rfrences vrification des bornes l'utilisation allocation dynamique par new (=> taille dfinissable l'excution) taille fixe une fois pour toute taille accessible par le champ length
cration :
- par new aprs la dclaration (ou lors de la dclaration) : int tab[]; // dclaration tab = new int[5]; // cration - ou implicite en cas dinitialisation lors de la cration (cf. ci-dessous)
initialisation :
// A la dclaration : int tab[] = {1, 2, 3}; // Lors de la cration : tab = new int[] {1, 2, 3}; // Sinon, cases du tableau initialises par dfaut // 0 ou false ou null (selon le type de base)
29/03/2011 16:09
31
29/03/2011 16:09
32
Tableaux (3)
accs la taille :
int [] tab = new int[5]; int size = tab.length;
indices : entre 0 et length-1 si tentative daccs hors des bornes, lancement de lexception :
ArrayIndexOutOfBoundsException
tab = new double[lg]; // AFFECTATION DES ELEMENTS DU TABLEAU for (int i=0 ; i<tab.length ; i++) tab[i] = 1./(i+1); // AFFICHAGE for (int i=0 ; i<tab.length ; i++) System.out.print(tab[i] + " "); System.out.println();
} }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 34
Taille du tableau
recherche, tri, etc. : voir fonctions utilitaires de la classe Arrays (cf java.util)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 33
Copie de tableau
Mthode manuelle : cration d'un nouveau tableau, puis copie case par case Copie par appel de System.arraycopy() :
// copie des 50 premiers lments de src dans dst partir de lindice 2 :
Tableaux multi-dimension
Tableaux de (rfrences vers) tableaux :
// Dclaration et cration : float matrix[][]=new float[2][3]; // Utilisation : for (int i=0 ; i<matrix.length ; i++) for (int j=0 ; j<matrix[i].length ; j++) matrix[i][j] = i*j;
Tableaux dobjets
Des tableaux contenant des (rfrences des) objets dune classe donne peuvent tre dclars et crs pour toute classe (prdfinie ou bien crite par le programmeur). Par exemple, un tableau de chanes de caractres (classe String : voir plus loin) se dclare et se dimensionne ainsi : String[] tabChaines; tabChaines = new String[2]; ATTENTION : le dimensionnement dun tableau dobjets cre uniquement des cases pour stocker des rfrences aux objets, mais pas les objets eux-mmes. Ces rfrences valent initialement null, et il faut donc les faire ensuite pointer vers les objets voulus par des affectations.
Par exemple, une suite possible des instructions prcdentes est :
Rfrences constantes
Ce sont des rfrences associes de faon dfinitive un objet ou tableau donn mot-cl final : final double[] tab = new double[10]; // La rfrence (tab) est fige : tab = new double[20]; // ici ERREUR // Le contenu du tableau reste modifiable : tab[0] = 1.732; // OK tab[0] = 3.; // OK
Chanes de caractres
Ce sont des objets des classes String ou StringBuffer chanes littrales : "une chane" concatnation par loprateur + chanes non modifiables : String
int age = 24; // Cration : String s1 = "Age : " + age; // Cration par conversion : float x = 1.618f; String s2 = String.valueOf(x); // Utilisation : int l = s1.length(); char c = s1.charAt(0); int diff = s1.compareTo(s2); boolean tst = s2.equals(s1); s2 = s1; s2 = "Bonjour"; String[] sub = s1.split(":");
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 39
Types numrs
Permet de dfinir proprement un type ayant un ensemble restreint de valeurs possibles Mot-clef enum Exemple : enum CouleurFeu { VERT, ORANGE, ROUGE } // . . . CouleurFeu col = CouleurFeu.ROUGE; Est en fait un type particulier de classe (voir plus loin) Peut servir dans un switch (voir plus loin)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 41 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 42
29/03/2011 16:09
43
29/03/2011 16:09
44
29/03/2011 16:09
45
29/03/2011 16:09
46
29/03/2011 16:09
47
29/03/2011 16:09
48
Principaux oprateurs
affectation : = + || <= > ! ^ * >= & / | | ^ -= ^=
~
arithmtiques :
OPERATEURS
oprations bit--bit (sur les entiers) : & opration et affectation simultanes : &= pr/post-incrmentation : ++ pr/post-dcrmentation : - oprateur ternaire : ?: += |=
*= <<=
cration tableau ou objet (allocation mmoire) : new test de type des rfrences : instanceof
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 49 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 50
Oprateurs arithmtiques
Oprateur Fonction addition soustraction changement de signe multiplication division modulo Usage expr1 + expr2 expr1 - expr2 - expr expr1 * expr2 expr1 / expr2 expr1 % expr2
Oprateurs de comparaison
Oprateur
Fonction galit ingalit infrieur strict infrieur ou gal suprieur strict suprieur ou gal
+ * / %
Attention aux divisions entre entiers Les fonctions mathmatiques sont dans la classe Math :
Math.pow(x,y), Math.sin(x), Math.log(x), ...
29/03/2011 16:09 51 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 52
Oprateurs boolens
Oprateur Fonction et (version optimise) ou (version optimise) ou exclusif (xor) ngation et (version non optimise) ou (version non optimise) Usage expr1 && expr2 expr1 || expr2 expr1 ^ expr2 ! expr expr1 & expr2 expr1 | expr2
Oprateurs bit--bit
Oprateur
Fonction
et ou ou exclusif (xor) ngation dcalage gauche (x2) dcalage droite dcalage droite non sign (/2)
Usage
op1&op2 op1|op2 op1^op2 ~op1 op1<<op2 op1>>op2 op1>>>op2
&& || ^ ! & |
Oprateurs servant essentiellement compacter les critures : affectation combine avec opration arithmtique ou bit--bit :
+= -= *= &= n = ++i; quivaut n = i++; quivaut n = i; i = i + 1; i = i + 1; n = i;
29/03/2011 16:09 56
i += 3;
quivaut i = i+3;
55
29/03/2011 16:09
Autres oprateurs
Ternaire conditionnel : bool ? expr1 : expr2 vaut expr1 si bool est vrai, et expr2 sinon Conversion : (type) float x = 1.5f; int i = (int) x; Allocation mmoire (cration de tableaux ou d'objets) : new Test de type des rfrences : instanceof (ref instanceof C) vaut :
true si ref rfrence un objet pouvant tre considr comme une instance de la classe C false sinon (y compris si ref==null)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 57
<
A priorit gale, valuation de gauche droite pour les oprateurs binaires, sauf pour les affectations (=, *=, ) qui s'valuent de droite gauche
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 58
29/03/2011 16:09
59
29/03/2011 16:09
60
29/03/2011 16:09
61
29/03/2011 16:09
62
29/03/2011 16:09
63
29/03/2011 16:09
64
Instructions et blocs
chaque instruction se termine par un ';' int i; i = 4*3; on peut grouper plusieurs instructions en un bloc (dlimit par des accolades), exemple : int a=1, b=2; { // dbut de bloc int x=a; a = b; b = x; } // fin de bloc x = 3; // ERREUR: x nest pas connu ici Remarque : la porte d'une variable va de sa dclaration jusqu' la fin du bloc o elle est dclare
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 65 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 66
Instructions de contrle Permettent de modifier lordre normal (squentiel) dexcution des instructions excution conditionnelle : if else cas multiples : switch boucles : for while do
Excution conditionnelle
if (boolExpr) instruction; if (boolExpr) { instruction(s); } else { instruction(s); }
// excut si VRAI
// excut si FAUX
while
29/03/2011 16:09 67
if (boolExpr) { instruction(s); // excut si VRAI } else if (boolExpr2) { instruction(s); // ... } else { instruction(s); // ... }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 68
Cas multiples
switch (expr) { case cst1: // instruction(s) break; case cst2: // instruction(s) case cst3: // instruction(s) break; default: // instruction(s) break; }
Boucles de rptitions
do {
// corps de la boucle // excut au moins // une fois : instruction(s);
expr : de type entier ou char ou bien type numr (enum) cst1, cst2, ... : littral ou constante (final)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 69 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI
29/03/2011 16:09
70
Boucles d'itration
for (initialisations ; boolExpr ; incr) { instruction(s); // corps de la boucle }
Exemples de boucles for int somme=0; for (int i=1 ; i<=n ; i++) { somme += i; }
initialisations : dclaration et/ou affectations, spares par des virgules incrments : expressions spares par des virgules quivalent : initialisations; while (boolExpr) { instruction(s); incrments; }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 71
for ( ; ; ) ;
29/03/2011 16:09
72
Interruptions des boucles break continue sortie de la boucle passage l'itration suivante
return sortie immdiate de la fonction en cours (cf. + loin), donc a fortiori sortie de la boucle en cours par la mme occasion
29/03/2011 16:09
74
29/03/2011 16:09
75
29/03/2011 16:09
76
29/03/2011 16:09
77
29/03/2011 16:09
78
29/03/2011 16:09
79
29/03/2011 16:09
80
Les fonctions lments essentiels de structuration en programmation imprative en gnral, une fonction est dfinie par : un type de retour Eventuellement vide : un nom public static int f(){//} une liste de paramtres typs en entre une squence dinstructions (corps de la fonction) en Java, chaque fonction est dfinie dans une classe (ex. : la classe Math regroupe les fonctions mathmatiques) exemple de fonction : Type de retour class MaClasse { public static int carre(int i ){ return i*i; nom } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 81 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 82
FONCTIONS
Fonction : retour type de retour : nimporte quel type, ou bien void instructions de retour : return expression; return; // possible uniquement pour fonction de type void
class MaClasse { /** Retourne lindex dune valeur dans un tableau * (ou -1 si pas trouve) */ public static int indexDe(float val, float[] tab) { int len = tab.length; for (int i=0 ; i<len ; i++) { if (tab[i] == val) return i; } return -1; } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 83
System.out.println(k); } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 84
Fonction et porte Les variables dclares dans une fonction sont locales cette fonction Idem pour les paramtres
class Portee { public static int calcul(int val){ int tmp = 3*val; tmp-de-calcul return tmp; } public static void main(String[] args){ int tmp = 1; tmp-de-main System.out.println( calcul(9) ); // Que vaut tmp ici ? // Et val ?? } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 85
Programme principal En Java, lexcution de programme consiste en la recherche et lappel dune fonction (publique) particulire :
nomme main prenant en paramtre un String[] ne retournant rien
Rcursivit Une fonction peut s'appeler elle-mme il faut penser arrter la rcursion un moment donn (sinon , rcursion infinie) exemple : fonction puissance
class ExempleRecursif { public static double puiss(double x, int n){ if ( n==1 ) return x; else return x*puiss(x, n-1); } //... }
Lexemple ci-dessus est-il totalement correct ? Que se passe-t-il pour n<0 ???
29/03/2011 16:09
90
Surcharge Possibilit de dfinir (dans la mme classe) plusieurs fonctions de mme nom, diffrencies par le nombre et/ou le type des arguments :
class NomClasse { public static int longueur(String s){ return s.length(); } public static int longueur(int i){ String si = String.valueOf(i); return si.length(); } public static void main(String [] args) { int k = 12345; int lk = longueur(k); // lk vaut 5 String s = "oui"; int ls = longueur(s); // ls vaut 3 } }
Appel de fonction : les arguments doivent tre du type prvu ou dun type convertible automatiquement vers le type prvu
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 91
Le paramtre avec ellipse est trait dans la fonction comme un tableau Possibilit darguments de types htrognes via le type Object
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 92
29/03/2011 16:09
93
29/03/2011 16:09
94
29/03/2011 16:09
95
29/03/2011 16:09
96
ENTREES-SORTIES STANDARDS
lecture :
// Lecture d'un caractre la fois int car = System.in.read(); // Lecture de 10 caractres byte buf[] = new byte[10]; int nbLus = System.in.read(buf);
NOTA-BENE : utiliser la classe Scanner pour lire autre chose que des caractres ou tableaux de caractres (voir page suivante).
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 97 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 98
Affichage format
printf(String, Object) est une mthode nombre darguments variable qui facilite laffichage format : double rac2 = Math.sqrt(2); System.out.printf("sqrt(2)=%.3f", rac2); // imprime : sqrt(2)=1,414 int i=3, j=30, k=303; System.out.printf("| %3d | %3d | %3d |", i, j, k); // imprime : | 3 | 30 | 303 | double x=2.5, y=-3.755; System.out.printf(" x:%+.2f \n y:%+.2f", x, y); // imprime quoi ? Voir la documentation en ligne pour plus de dtails.
99 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 100
Il existe une mthode nextXyz() et une mthode hasNextXyz() pour chaque type primitif xyz Lance InputMismatchException si llment suivant nest pas convertible dans le type demand Possibilit de choisir un sparateur avec useDelimiter(Pattern) ATTENTION : utilise, par dfaut, le format local des nombres (par exemple en franais : 2,5 et pas 2.5) ; possibilit de choisir une localisation avec la mthode useLocale()
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09
29/03/2011 16:09
101
29/03/2011 16:09
102
29/03/2011 16:09
103
29/03/2011 16:09
104
Exemple de programme
// Dbut du fichier : les import import java.util.Scanner;
// Toutes les autres instructions sont dans une // (ou plusieurs) classe(s) public class MonProgramme { // Un programme ordinaire contient toujours une // fonction principale (main) comme ci-dessous : public static void main(String[] args){ System.out.print("Entrez un int : "); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i=0; i<n; i++) { System.out.println(i); } // fin de la boucle for } // fin de la fonction main } // fin de la dfinition de la classe
29/03/2011 16:09
105
29/03/2011 16:09
106
Compilation et excution
En gnral, un fichier MaClasse.java doit contenir la classe MaClasse, et elle seule (en fait cest plus compliqu, voir plus loin) La compilation de MaClasse.java MaClasse.class Le fichier MaClasse.class peut tre excut si et seulement si la classe MaClasse comporte une fonction main . MonFichier.java
class MaClasse { AutreClasse o; String s; } class MaClasse2 { // }
tape 1 : compilation du/des fichier(s) sources (.java) en bytecode (.class)
Maclasse.class MaClasse2.class
JFC (rt.jar)
java MaClasse
29/03/2011 16:09 107 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 108
29/03/2011 16:09
109
29/03/2011 16:09
110
29/03/2011 16:09
111
29/03/2011 16:09
112
Classes Classe : modle d'objets ayant les mmes types de proprits et de comportements Chaque instance d'une classe possde ses propres valeurs pour chaque attribut Exemple :
CLASSES
29/03/2011 16:09
113
29/03/2011 16:09
114
Classes Une classe est un modle d'objet dfini par ses membres (attributs et mthodes) Les attributs (tat) sont les donnes propres lobjet Les mthodes (comportement) sont les oprations applicables lobjet Exemple :
class Cercle { double rayon=0; double calculerSurface() { return Math.PI*rayon*rayon; } }
//
Utilisation : // DECLARATION Polygone p; // CREATION p = new Polygone(); // APPELS DE METHODES p.dessiner(); p.deplacer(10, 5);
c1 = new Cercle();
// c1 : rfrence une instance de la classe Cercle
Utilisation depuis une mthode de la classe accs direct pour l'instance courante
class Cercle { // ... double comparerA(Cercle autre){ return rayon - autre.rayon; } }
destruction automatique par le ramasse-miettes (garbage collector) quand il n'y a plus aucune rfrence vers l'objet :
Cercle c2 = new Cercle();
// ... c2 = c1;
// destruction de l'instance cr par new ci-dessus // (aucune rfrence ne pointant plus dessus)t
29/03/2011 16:09
117
29/03/2011 16:09
118
La rfrence this
possibilit dans les mthodes de dsigner explicitement l'instance courante :
pour accder un attribut masqu par un paramtre : class Cercle { double rayon=0;
// ...
double comparerA(double rayon){ return this.rayon-rayon; } } pour appeler une fonction (ou mthode) avec l'instance courante en paramtre : class Cercle { void dessinerSur(Ecran e){
// ...
} } class Ecran {
// ...
surcharge possible : plusieurs mthodes de mme nom, mais de signatures diffrentes (i.e. avec types de paramtres diffrents)
}
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 119
Encapsulation cacher le dtail d'implantation, et ne laisser voir que l'interface fonctionnelle pour chaque attribut et mthode, visibilit possible : public private protected par dfaut, accs package encapsulation usuelle : attributs privs, et mthodes publiques (sauf celles usage interne) :
class Cercle { private double rayon; public double calculerSurface() { return Math.PI*rayon*rayon; }
// ...
Constructeur Contient les instructions excuter la cration des instances (en particulier : linitialisation des attributs) :
class Cercle { private double rayon; public double calculerSurface(){ return Math.PI*rayon*rayon; } public Cercle(double r) { rayon = r; } }
Est appel chaque cration d'instance (par new) : Cercle c = new Cercle(2.5); NOTA-BENE : jamais de type de retour (ce nest pas une mthode)
}
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 121 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 122
Constructeur (2)
Il peut y avoir plusieurs constructeurs (mais les signatures doivent tre diffrentes) On peut invoquer un constructeur depuis un autre avec this(...) : class Cercle {
// ...
Destructeur appel par le ramasse-miettes (garbage collector ou GC) avant de supprimer l'objet donc habituellement jamais appel explicitement utile essentiellement pour fermer des fichiers associs l'instance et susceptibles d'tre encore ouverts sa disparition protected void finalize() {...} appel une seule fois par instance (donc pas r-appele par le GC si appel la main avant)
public Cercle(double r) { rayon = r; } public Cercle() { this(0); // invoque Cercle(0) } } Conseils : crire un constructeur complet avec tous les paramtres possibles ; ensuite, faire en sorte que tous les autres constructeurs (en gnral un constructeur sans argument et un pour construire par recopie d'un objet de mme type) appellent le constructeur complet
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 123
29/03/2011 16:09
124
Tableau d'objets
ATTENTION : un tableau d'objets est en fait un tableau de rfrences vers objet : Cercle [] tabC = new Cercle[10]; // tabC[0]==null Il faut donc allouer les objets eux-mmes ensuite : for (int i=0 ; i<10 ; i++) { tabC[i] = new Cercle(); } Par exemple, soient les 2 instructions suivantes : String [] tabChaine; tabChaine = new String[2]; Que contient alors tabChaines ?? Et si on fait maintenant : tabChaine[0] = "oui"; tabChaine[1] = "non"; Comment cela se prsente-t-il en mmoire ?
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 125
Attribut statique variable partage par toutes les instances de la classe (nomm aussi attribut de classe ) mot-clef : static
class Cercle {
//...
static int nbCercles = 0; static public double[] defRayon; static { // initialiseur statique defRayon = new double[10]; for (int i=0 ; i<10 ; i++) { defRayon[i] = 3*i; } } public Cercle(double r){ nbCercles++;
// ...
} }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 126
Mthode statique type de mthode ne s'appliquant pas une instance particulire de la classe (appele aussi mthode de classe ) quivalent des fonctions ordinaires des langages non-objet mot-clef : static exemples : fonctions mathmatiques prdfinies telles que : Math.random(), Math.sin(double), fonction principale (main)
class Cercle {
// ...
static private int epaisseur = 1; static public void setTrait(int e){ epaisseur = e; } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 127 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 128
Appel de mthode statique appel depuis une autre mthode de la mme classe :
class Cercle { // ... public void bidule(){ setTrait(0); } }
Cas particulier de classe : type numr Classe ayant un nombre FINI dinstances, toutes prdfinies Mot-clef : enum (au lieu de class) Exemple dnumration simple :
enum Reponse { OUI, NON, PEUT_ETRE } // Reponse r1 = Reponse.OUI;
29/03/2011 16:09
129
29/03/2011 16:09
130
Type numr labor Un enum est une classe, il peut avoir des attributs et mthodes :
enum Jeune { BEBE("Bebe", 0, 3), ENFANT ("Enfant", 3, 12), ADO("Adolescent", 12, 18); private String type; private int ageMin; private int ageMax; Jeune(String type, int ageMin, int ageMax){ this.type = type; this.ageMin = ageMin; this.ageMax = ageMax; } public String getType(){ return type; } public int getAgeMin(){ return ageMin; } public int getAgeMax(){ return ageMax; } }
//
29/03/2011 16:09
133
29/03/2011 16:09
134
29/03/2011 16:09
135
29/03/2011 16:09
136
Paquetage entit de structuration regroupant plusieurs classes (et/ou interfaces) et/ou sous-paquetages le paquetage d'appartenance est indiqu au dbut du fichier source par : package nomPackage; les fichiers .class de chaque paquetage doivent tre dans un rpertoire ayant le nom exact du paquetage les paquetages (et classes) sont recherchs dans une liste de rpertoires (et/ou de fichiers zip) fixe par la variable d'environnement CLASSPATH
29/03/2011 16:09
137
29/03/2011 16:09
138
Paquetage et visibilit par dfaut, les classes et interfaces ne sont accessibles que dans leur paquetage : seules celles qui sont dclares public pourront tre importes dans d'autres paquetages les membres de classes sans accs prcis (i.e. ni public, ni protected, ni private) sont visibles dans tout le paquetage de leur classe fichier hors-paquetage => classes et interfaces dans le paquetage anonyme
Classe publique classe utilisable l'extrieur de son paquetage mot-clef : public public class Cercle { //... } par dfaut, une classe n'est utilisable que dans son paquetage (ventuellement le paquetage anonyme si pas de paquetage prcis en dbut de fichier)
29/03/2011 16:09
139
29/03/2011 16:09
140
Organisation en fichiers, compilation et excution au maximum une classe ou interface publique par fichier source (auquel cas, le nom du fichier doit imprativement tre celui de la classe ou interface publique contenue dans le fichier) il peut y avoir d'autres classes et interfaces non publiques dans le mme fichier la compilation du fichier PubClasse.java : javac PubClasse.java produit autant de fichiers suffix par .class qu'il y a de classes dans le fichier .java excution du main de la classe NomClasse : java NomClasse ou alors (si on est dans le rpertoire-pre de nomPackage) : java nomPackage.NomClasse
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 141
Paquetage : importation Nom (complet) d'une classe l'extrieur de son paquetage : nomPackage.NomClasse (sauf si la classe est importe) Importation : permet d'utiliser une classe d'un autre paquetage avec juste son nom (sans le prfixer par son package) Importation de classe (publique) par : import nomPackage.NomClasse; Importation la demande de toute classe publique du package : import nomPackage.*;
29/03/2011 16:09
142
import statique Permet dimporter tout ou partie des membres (attributs ou mthodes) statiques dune classe donne Exemple :
import java.lang.Math.PI; import java.lang.Math.sin(); import java.lang.Integer.*; // final double PI2 = PI*PI; // (PI dsigne Math.PI) double x = sin(PI/3); // sin() dsigne Math.sin() long // if ( // // val; val > MAX_VALUE ) { MAX_VALUE dsigne Integer.MAX_VALUE
29/03/2011 16:09 143
Cration de paquetage attention au choix du nom (parlant, mais vitant conflit de nom) suggestion de nommage : type hostname invers fr.societe.service.nom_paquetage bien penser la hirarchisation si plusieurs paquetages lis
29/03/2011 16:09
144
Documentation automatique outil javadoc du JDK crire commentaires spcifiques /** bla-bla ... */ juste avant la dclaration : de chaque classe (ou interface) de chaque mthode de chaque attribut la commande javadoc NomClasse.java produit automatiquement des fichiers HTML dcrivant la classe et intgrant ces commentaires par dfaut, seuls les lments publics et protgs apparaissent (car ce sont les seuls qu'ont connatre les utilisateurs de la classe)
Documentation automatique (2) On peut insrer dans les commentaires de documentation des tags qui seront formats de manire spcifique. Ils commencent en dbut de ligne par @, et vont jusqu' fin de ligne : @author nom (pour une classe ou interface) @param nom description (pour une mthode: commentaire sur un de ses paramtres) @return description (pour une mthode : commentaire sur ce qui est retourn) @exception nom description (pour une mthode : commentaire sur un type d'exception potentiellement mise) @see NomClasse (lien hypertexte vers la documentation de la classe NomClasse) @see NomClasse#nomMethode (idem, mais lien vers l'endroit o est dcrite la mthode nomMethode)
145 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 146
29/03/2011 16:09
Classes locales classes membres dfinies l'intrieur du corps d'une mthode (d'une autre classe) classes anonymes : classes locales sans nom, dfinie juste l'intrieur d'un new (pour crer une instance spcialise ou une implantation)
class MonApplet{ private ActionListener al; private String message; public void init() {
//...
29/03/2011 16:09
149
29/03/2011 16:09
150
29/03/2011 16:09
151
29/03/2011 16:09
152
Vision hirarchique :
Animal
Oiseau
Mammifre
Chat
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 153 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI
Chie n
29/03/2011 16:09 154
Hritage
Pour rutiliser une classe existante en l'adaptant, et/ou factoriser des choses communes plusieurs classes Mot-clef : extends
class Figure{ private String nom; protected Position pos; public Figure(Position p){ pos = p; } public void afficher() { pos.afficher(); } public void deplacer(int dx, int dy) { pos.ajouter(dx,dy); } } class Cercle extends Figure{
// Cas particulier de Figure, hrite de tous ses attributs/mthodes // ...
Hritage, attributs et mthodes la sous-classe hrite de tous les attributs (y compris static ) et mthodes membres de la classe mre (sauf les mthodes prives et les constructeurs) :
Cercle c = new Cercle(); // appel d'une mthode hrite c.deplacer(2, -1);
La sous-classe peut videmment avoir des attribus et mthodes supplmentaires correspondant sa spcificit :
class Cercle extends Figure{ private double rayon; public double circonference() { return 2*Math.PI*rayon; //... } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 156
Hritage et rfrences Toute rfrence vers une instance de la classe fille peut tre vue aussi comme une rfrence vers la classe mre (conversion automatique fille -> mre) :
Figure f = new Cercle(); // OK // Affectation dun Cercle dans une Figure Cercle c = new Cercle(1); if ( f.contient(c) ) { // // OK : passage dun Cercle en paramtre // une mthode attendant une Figure }
Hritage et visibilit Une classe fille ne peut accder qu'aux membres (attributs ou mthodes) publics ou protgs de sa classe mre (ainsi qu'aux attributs et mthodes package ssi elle appartient au mme paquetage que sa classe mre) :
class Cercle extends Figure { //... void essai(){ // essai d'accs un champ priv // de la classe mre String s = nom; // ERREUR ! }
29/03/2011 16:09
157
29/03/2011 16:09
158
Hritage et constructeurs
les constructeurs ne sont pas hrits, mais on peut appeler ceux de la classe mre avec super() : class Cercle extends Figure{ //... Cercle(float r, Position pos) { // appel du constructeur Figure(pos) super(pos); rayon = r; } } lappel super() doit imprativement tre la 1re instruction du constructeur si la 1re instruction n'appelle ni le constructeur de la classe mre, ni un autre constructeur de la classe fille, alors appel automatique de super() sans argument ordre des oprations : 1/ appel du constructeur de la classe mre 2/ initialiseurs et blocs d'initialisation 3/ corps du constructeur fille
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 159
Spcialisation de mthode
on peut dfinir un comportement diffrent pour les mthodes hrites (et accessibles) en redfinissant une mthode de mme nom et mme prototype (signature) : class Cercle extends Figure{ private float rayon;
//...
super.afficher(); System.out.println("rayon=" + rayon); } } ... sauf pour les mthodes dclares final dans la classe mre la visibilit de la mthode redfinie peut tre diffrente (mais seulement augmente)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 160
Polymorphisme dynamique Quand on manipule un objet via une rfrence une classe mre, ce sont toujours les mthodes (non statiques) de la classe effective de l'objet qui sont appeles :
Figure f = new Cercle(); // Appel de afficher() de Cercle // (bien que rfrence de type Figure) : f.afficher();
Mthode abstraite
mthode non implante (on ne fait que spcifier son nom, les types de ses paramtres et son type de retour) mot-clef : abstract class Figure { //... public abstract void colorier(); } destine tre (re)dfinie dans les classes filles ne peut exister que dans une classe elle-mme dclare abstraite (cf. ci-aprs) impossible pour les mthodes statiques
29/03/2011 16:09
161
29/03/2011 16:09
162
Classe abstraite classe non instanciable (sert uniquement de classe mre) mot-clef : abstract
abstract class Figure { //... }
Classe non drivable classe qui ne pourra pas servir de classe mre mot-clef : final
final class ClasseTerminee { //... }
toute classe qui dfinit une mthode abstraite (ou qui en hrite et ne la redfinit pas) doit obligatoirement tre dclare abstraite
29/03/2011 16:09
163
29/03/2011 16:09
164
Mthodes non redfinissables Mthode qui ne pourra pas tre redfinie dans les classes filles Mot-clef : final Exemple :
abstract class Figure { Position pos; final public deplacer(int dx, int dy){ pos.ajouter(dx, dy); } }
Hritage et tableau si Fille drive de Mere, alors Fille[] est considr comme un sous-type de Mere[] : Fille[] tabF = new Fille[3]; Mere[] tabM = tabF; // OK typage dynamique : mme manipul via un Mere[], un tableau de Fille ne peut contenir que des rfrences Fille : tabM[0] = new Mere(); // Erreur
29/03/2011 16:09
165
29/03/2011 16:09
166
Mthode clone() duplique l'objet auquel elle est applique (copie des attributs) tout objet (et tableau) en hrite utilisable directement pour les tableaux ordinaires : int[] tab = { 1, 2, 3, 4 }; int[] tab2 = tab.clone(); attention si tableau multi-dim ou d'objets, car copie des rfrences pour les objets que lon veut clonables : 1/ dclarer que la classe implante l'interface Cloneable, 2/ redfinir la mthode clone() comme public, et soit retournant super.clone(), soit adapte la classe
29/03/2011 16:09
168
29/03/2011 16:09
171
29/03/2011 16:09
172
29/03/2011 16:09
173
29/03/2011 16:09
174
29/03/2011 16:09
175
29/03/2011 16:09
176
Nature et intrt des interfaces dfinition abstraite d'un service, indpendamment de la faon dont il est implant ( type abstrait de donnes ) concrtement, ensemble de mthodes publiques abstraites (et de constantes de classe) INTERFACES facilite la programmation gnrique permet un hritage multiple restreint
29/03/2011 16:09
177
29/03/2011 16:09
178
une classe qui implante une interface doit redfinir toutes les mthodes de l'interface (ou bien tre abstraite) :
class Cercle implements Coloriable, Redimensionnable { int rayon;
//...
void colorier(Couleur c); } interface Pile { Object sommet(); void empiler(Object o); void depiler(); boolean estVide(); }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 179
public void grossir(int facteur) { rayon *= facteur; } public void reduire(int facteur) {...} public void colorier(Couleur c) {...} } abstract class Figure implements Coloriable {
// classe abstraite ==> pas indispensable de redfinir // la mthode colorier() // ...
}
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 180
NOTA-BENE : depuis Java 1.5, la programmation gnrique se fait plutt sous forme paramtre (proche des templates de C++ : voir plus loin)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 182
Interface et hritage Une interface peut driver d'une (ou plusieurs) autres interfaces :
interface X {...} interface Y {...} interface Z extends X,Y{...}
si une classe Mere implante une interface, alors toutes ses classes filles hritent de cette proprit :
class Mere implements Z {...} class Fille extends Mere {...} //... Z z = new Fille(); // OK X x = new Fille(); // OK // OK car Fille implante (par hritage) // l'interface Z (et donc aussi l'intreface X)
29/03/2011 16:09
183
29/03/2011 16:09
184
Interfaces marqueurs Une interface peut ne contenir aucune mthode ni constante, et servir juste de marqueur pour indiquer une proprit des classes qui l'implantent Exemples : interface Cloneable pour identifier les classes aux instances desquelles on peut appliquer la mthode de duplication clone() interface Serializable pour identifier les classes dont on peut sauvegarder des instances sur fichier (cf java.io)
29/03/2011 16:09
185
29/03/2011 16:09
186
29/03/2011 16:09
187
29/03/2011 16:09
188
29/03/2011 16:09
189
29/03/2011 16:09
190
29/03/2011 16:09
191
29/03/2011 16:09
192
Mcanisme pour traiter les anomalies se produisant l'excution Principe fondamental = sparer dtection et traitement des anomalies : - signaler tout problme ds sa dtection - mais regrouper le traitement des problmes ailleurs, en fonction de leur type
EXCEPTIONS
29/03/2011 16:09
193
29/03/2011 16:09
194
Exemple (2 / 3)
Gestion des erreurs sans utiliser dexceptions :
static void divTab(int [] tab) { if( tab == null ) System.err.println("tab==null"); else { Scanner sc = new Scanner(System.in); int index = sc.nextInt(); if( index<0 || index>=tab.length ) System.err.println("index incorrect"); else { int div = tab[index]; if( div == 0 ) { System.err.println("diviseur nul"); else { for (int j=0 ; j<tab.length ; j++) tab[j] /= div; } } } } }
195 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 196
29/03/2011 16:09
Exemple (3 / 3)
Utilisation des exceptions de Java : toute exception gnre provoque l'arrt brutal du programme ; pour viter cela, prvoir la capture et le traitement des exceptions ; mots-clefs : try, catch et finally
static void divTab2(int[] tab) { try { Scanner sc = new Scanner(System.in); int index = sc.nextInt(); int div = tab[index]; for (int j = 0 ; j < tab.length ; j++) tab[j] /= div; } catch (NullPointerException e) { System.err.println("tab==null"); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("index incorrect"); } catch (ArithmeticException e) { System.err.println("diviseur nul"); } finally { // on passe toujours ici } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 197
Traitement des exceptions Si une exception est gnre dans le bloc try{ } : 1. on passe immdiatement dans le premier gestionnaire catch compatible avec l'exception (i.e. attrapant exactement le type dexception gnr, ou bien un type anctre au sens de l'hritage) 2. on excute le catch 3. puis on continue APRS l'ensemble try{}catch(){} Si pas de catch adquat, on remonte au try englobant le plus proche, on cherche un catch correspondant, etc... (et arrt programme si fin de la pile dappels) Le finally est facultatif ; il est excut la fin du bloc try quoiqu'il arrive (fin normale, sortie par return, sortie aprs catch, ou avec exception non traite)
29/03/2011 16:09 198
Nature des exceptions Concrtement, une exception est un objet instance de classes spcifiques Divers types d'exceptions (classes) sont prdfinies, et susceptibles d'tre gnres automatiquement l'excution, par exemple : ArithmeticException ArrayIndexOutOfBoundsException NullPointerException FileNotFoundException On peut aussi dfinir de nouveaux types d'exceptions
Catgories d'exceptions classe mre : Throwable erreurs systme : classe Error (drive de Throwable) autres anomalies : classe Exception (drive de Throwable) et ses sous-classes cas particuliers : classe RuntimeException (drive de Exception) et ses sous-classes = exceptions non contrles (voir plus loin) mthodes communes :
NomException(String) : constructeur avec message explicatif sur la cause de l'exception String getMessage() : renvoie le message explicatif en question String toString() : renvoie le type de l'exception (nom de sa classe) et le message explicatif void printStackTrace() : affiche la pile d'appel jusqu'au point de lancement de l'exception
199 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 200
29/03/2011 16:09
Exceptions contrles ou non Les exceptions de type RuntimeException et ses sous-classes (par exemple ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException) sont dites non contrles contrairement aux autres exceptions (dites contrles ), on peut en lancer une, ou appeler une mthode risquant d'en lancer une, sans tre oblig : de faire cet appel dans un try{} avec le catch() correspondant soit de mettre dans la mthode englobante la clause throws adquate (cf. + loin)
29/03/2011 16:09
201
Lancement d'exception Possibilit de lancer manuellement des exceptions (en plus de celles gnres automatiquement) mot-clef : throw Exemple : if (test_anomalie) throw new Exception("blabla"); if (autre_test) throw new IllegalArgumentException("bla"); interrompt immdiatement le cours normal du programme pour rechercher un gestionnaire adquat englobant (cf. traitement des exceptions) lancer de prfrence une exception dun type spcifique l'anomalie et contenant un texte prcisant l'anomalie
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 203
Nouveaux types d'exception : il suffit de crer une sous-classe de Exception ou de RuntimeException (ou d'une de leurs sousclasses prdfinies) :
class MonException extends Exception { MonException(String s) { super(s); // } // } // ... puis plus loin : if (test_anomalie) { throw new MonException("commentaire"); }
29/03/2011 16:09
204
Clause throws toutes les exceptions (sauf celle drivant de RuntimeException) sont dites contrles une mthode doit dclarer les exceptions contrles : - qu'elle envoie elle-mme - qu'elle laisse passer (i.e. mises par mthodes appeles, et non traites)
// ... void lire() throws MonException, IOException { // lancement explicite d'une exception si pb. : if (testAnomalie() == true) { throw new MonException("bla"); } // appel d'une mthode susceptible de gnrer // une exception contrle de type IOException : int car = System.in.read(); }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 205 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 206
29/03/2011 16:09
207
29/03/2011 16:09
208
Autant de fonctions crire que de type de tableaux que lon souhaite pouvoir concatner !!
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 209 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 210
29/03/2011 16:09
Les generics de Java Java 1.5 a introduit dans le langage une syntaxe (dsigne sous le terme de generics ) permettant une programmation gnrique paramtre assez similaire (au premier abord) aux templates de C++ Permet dajouter une classe, une interface, ou une mthode, un (ou plusieurs) paramtre(s) formel(s) de type sous la forme :
<NomDeTypeFormel1, NomDeTypeFormel2, > [ en pratique, par souci de lisibilit, on utilise gnralement pour le(s) type(s) formel(s) un (des) nom(s) dune seule lettre majuscule telle que T,S,U,V ou E ]
Types de retour des mthodes indpendants du type rel des objets du couple cr ( ncessit de conversions lutilisation)
Impossible : - de dfinir des couples ayant une certaine homognit de type (la vrification nest possible qu lexcution) ; - de distinguer au niveau type des couples ayant des contenus de types diffrents.
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 213 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 214
<T> dfinit un paramtre formel de type pouvant tre remplac par nimporte quelle classe Valeur de T dtermine la compilation (classe la plus spcifique possible telle que la signature des mthodes soit compatible avec les types des arguments dappel)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 215
(dailleurs Object est anctre de GenClasse<T>, comme de nimporte quelle classe Java)
Une classe gnrique paramtre peut tre dclare comme implantant une (ou des) interface(s), gnrique(s) ou non :
class GenClasse<T> implements Cloneable class GeCla<T> implements Cloneable, Pile<T>,Comparable<GeCla<T>>
ATTENTION : il ny a aucun lien dhritage entre GenClasse<Fille> et GenClasse<Mere> (o Fille drive de Mere) On peut spcifier des contraintes ( bornes ) sur les valeurs possibles du type T :
class SpecifGenClasse<T extends Animal> // SpecifGenClasse<Chien> gc; // OK : Chien est un descendant de Animal SpecifGenClasse<String> gs; // ERREUR : String hors bornes de type
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 217
Des interfaces peuvent intervenir dans la contrainte sur le type T dune classe gnrique :
class Clonage<T extends Cloneable> {//} class PoulaillerUniforme<T extends Animal & Cloneable & Ovipare> { // } class Groupe<T extends Comparable<T>> {//}
29/03/2011 16:09
218
Wildcard born
On peut aussi avoir besoin dtre plus spcifique sur les valeurs acceptables pour le type T :
GenClasse<? extends ClasseOuInterface> OK pour tout T hritant de (ou implantant) ClasseOuInterface
Chaque valeur correcte de T pour une classe gnrique GenClasse<T> dfinit un type diffrent et incompatible. Exemple :
CoupleGenerique<String> et CoupleGenerique<Integer>
On peut cependant avoir besoin de manipuler de manire commune des instances de diffrentes variantes dune mme classe gnrique, ce qui est possible grce au wildcard (not ?) :
static public void intervertir(CoupleGenerique<?> c){ c.intervertir(); } // ... CoupleGenerique<String> cs = newCoupleGenerique<String>("un","deux") CoupleGenerique<Integer> ci = new CoupleGenerique<Integer>(3, 4); intervertir(cs); intervertir(ci);
Exemple :
static public double diff(CoupleGenerique<? extends Number> c){ double res = c.premier().doubleValue(); res -= c.deuxieme.doubleValue(); return res; } // CoupleGenerique<Integer> ci = new CoupleGenerique<Integer>(3,10); CoupleGenerique<Double> cd = new CoupleGenerique<Double>(5.5,3.3); double x = diff(ci); double y = diff(cd);
Note : on peut faire pointer un CoupleGenerique<?> vers nimporte quel CoupleGenerique<T> , par contre les mthodes ayant un paramtre de type T seront inaccessibles via cette rfrence
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 219
Note : possible, inversement, de dfinir une borne infrieure pour le type T, par exemple : Pile<? super Number>
29/03/2011 16:09
220
De nombreuses classes et interfaces prdfinies en Java sont gnriques. Cest en particulier le cas de toutes les collections de java.util (voir cette section)
29/03/2011 16:09
221
29/03/2011 16:09
222
29/03/2011 16:09
223
29/03/2011 16:09
224
Programmation multi-threads un thread est une squence d'instructions excutes squentiellement en Java, un mme programme peut lancer plusieurs threads => excution en parallle de plusieurs processus (partageant les mmes donnes) Intrts : intractivit, ractivit (essentiellement pour les interfaces homme-machine), et plus lger que multi-process Unix Inconvnients : problmes de synchronisation, de gestion des ressources partages, risque de deadlock , caractre non dterministe
THREADS
29/03/2011 16:09
225
29/03/2011 16:09
226
Thread un thread Java est un fil d'excution interne au programme, reprsent par un objet (instance de la classe Thread) qui possde : une instruction courante un tat (actif, inactif, en attente, ...) un nom (facultatif) il faut donc d'abord le crer, et ENSUITE le dmarrer
Classe Thread dmarrage par la mthode start(), qui excute la mthode run() arrt quand on sort de run() par fin normale ou exception mise en sommeil du thread courant : mthode statique Thread.sleep(long milliseconds) changement de thread courant (pour laisser la main aux autres threads) : mthode statique Thread.yield()
29/03/2011 16:09
227
29/03/2011 16:09
228
Cration de threads Deux approches pour crer un thread : soit crer une classe drive de Thread, et redfinir sa mthode run() ou bien, crer une classe implantant l'interface Runnable, donc ayant une mthode run(), puis crer un Thread avec ce Runnable en paramtre du constructeur
Suspension/arrt de thread
Pour pouvoir suspendre/arrter un thread, faire en sorte quil teste priodiquement un (ou des) drapeau(x) lui indiquant sil doit tre suspendu/redmarr/arrt. Exemple :
private Thread t; boolean suspendThread = false; boolean stopThread = false; public void run() { while ( !stopThread ) { if ( !suspendThread ) { // ...} } } public static void main(String[] args) { t = new Thread(this); t.start(); // suspendThread = true; //suspension // suspendThread = false; //redmarrage // stopThread = true; //arrt dfinitif }
229 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 230
29/03/2011 16:09
Exemple de thread
class Compteur extends Thread { private int compteur = 0; private boolean pause = false; private boolean stop = false; /** Mthode lance automatiquement au dmarrage du thread par start() */ public void run() { while (!stop) { if (!pause) compteur++; try { sleep(50); } catch (InterruptedException e) {} } } public int valeur(){ return compteur; } public void suspendre() { pause = true; } public void redemarrer() { pause = false;} public void tuer() { stop = true; } }
29/03/2011 16:09
231
29/03/2011 16:09
232
attente de fin d'un autre thread (rendez-vous) : appel de la mthode join() de ce thread
// Calcul est suppose implanter Runnable Calcul c; Thread calc = new Thread(c); calc.start(); //... try { // attente de la fin de calc calc.join(); } catch (InterruptedException e){ // ... }
dblocage de threads en attente sur l'objet courant : mthodes notify() et notifyAll()de l'objet
public synchronized arrivee(Element e){ // ajout du nouvel element dans la file // ... notifyAll(); }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 233
29/03/2011 16:09
234
Blocages la programmation avec threads ncessite de faire trs attention ce qu'aucun deadlock ne puisse se produire cas typiques de blocage : t1 attend la fin de t2 et rciproquement t1 attend la fin de t2 alors qu'il a un lock sur un objet sur lequel t2 attend de pouvoir mettre un lock t1 suspend t2 pendant qu'il a un lock sur o, puis essaie de prendre un lock sur le mme o
Priorits des threads plus sa priorit grande, plus le thread dispose d'une part importante du temps d'excution (mais aucune garantie que suprieur strict) par dfaut, Thread.NORM_PRIORITY getPriority() retourne la valeur setPriority(int p) avec p entre Thread.MIN_PRIORITY et Thread.MAX_PRIORITY sleep(long milliseconds) met en sommeil le thread courant yield() interrompt le thread courant pour permettre un autre de prendre la main
29/03/2011 16:09
235
29/03/2011 16:09
236
Groupement de threads classe ThreadGroup permet de regrouper des threads que l'on veut pouvoir traiter de la mme faon (par exemple les suspendre tous ensemble, modifier la priorit de tous en mme temps, ...)
29/03/2011 16:09
237
29/03/2011 16:09
238
29/03/2011 16:09
239
29/03/2011 16:09
240
Paquetages standards
java.lang : bases java.io : entre-sorties java.util : utilitaires, structures de donnes java.text : internationalisation java.awt : graphisme (Abstract Window Toolkit) java.applet : appliquettes javax.swing : graphisme 2me gnration java.beans : composants java.rmi : objets distribus (Remote Method Invocation) java.net : rseau java.math : prcision arbitraire, ... java.sql : bases de donnes (JDBC) java.security : cryptage, authentification, ...
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 241 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 242
PAQUETAGES STANDARDS
Paquetage java.lang des classes de base : String, StringBuffer, System, Thread, Object ... des classes permettant d'encapsuler les types lmentaires dans des objets (classes Integer, Float, ...) la librairie mathmatique (classe Math)
classe String
constructeurs : String(), String(String), ... longueur : length() accs un caractre : char charAt(int) recherche dans la chaine : int indexOf(char), int indexOf(String) comparaison de contenu (ordre lexico.) : int compareTo(String) test galit de contenu : boolean equals(Object) test galit partielle : boolean regionMatches( int start, String other, int oStart, int len) test de dbut/fin de la chane : boolean startsWith(String), boolean endsWith(String),...
29/03/2011 16:09
243
29/03/2011 16:09
244
classe StringBuffer
constructeurs :
StringBuffer(), StringBuffer(String), StringBuffer(int), ...
sous-chane :
String substring(int deb, int fin) void getChars(int deb, int fin, char[] dest, int destDeb)
concatnation :
StringBuffer append(String), StringBuffer append(int), ...
modification de caractre :
StringBuffer setCharAt(int index, char c)
dcoupage :
String[] split(String delim)
changement de classe :
String toLowerCase() ; String toUpperCase() ; ...
troncature : void setLength(int) miroir : StringBuffer reverse() conversion en String : String toString() capacit : int capacity(), ... comme String : charAt(int), substring(), getChars()
245 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 246
substitution de caractre :
String replace(char old, char new)
Classe StringBuilder Variante de la classe StringBuffer (mmes fonctionnalits), avec des implantations plus efficaces des mthodes, mais ne pas utiliser en cas de multi-threading (mthodes non synchronises )
anctre de toutes les classes comparaison : public boolean equals(Object obj) conversion en chane : public String toString() duplication : protected Object Clone() code de hachage : public int hashCode() destruction : protected void finalize() synchronisation threads : notify(), notifyAll(), wait() classe instancie : public Class getClass()
29/03/2011 16:09
247
29/03/2011 16:09
248
Classe Enum Classe abstraite anctre de tous les types numrs (i.e. dfinis avec le mot-clef enum) Implante linterface de comparaison Comparable (voir + loin), de sorte que toute valeur dun type numr est automatiquement comparable toute autre valeur dun mme type numr ; lordre naturel utilis par la mthode compareTo(Enum autre) est lordre de dclaration des constantes dans le type numr
Classe Class
reprsentation des classes et interfaces (et tableaux) obtention via une instance (o.getClass()), ou par le nom :
Class.forName("NomCompletClasse")
littraux : NomClasse.class
(ex: String.class dsigne la classe String)
29/03/2011 16:09
249
29/03/2011 16:09
250
classe Field reprsentation des attributs implante linterface Member : accs au nom : String getName() nature : int getModifiers() Class getDeclaringClass() type : Class getType() (renvoie instances spciales int.class, float.class, boolean.class,... si type primitif) accs/modification de valeur : void set(Object instance, Object valeur) void Object get(Object instance)
type des lments (pour tableaux seulement): Class getComponentType() tester l'appartenance d'un objet la classe (instanceof dynamique) : boolean isInstance(Object)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 251
29/03/2011 16:09
252
classe Method reprsentation des mthodes des classes implante Member (cf. Field) type des paramtres : Class[] getParameterType() type de retour : Class getReturnType() invocation : Object invoke(Object instance, Object[] args)
classes Integer, Float, ... pour chaque type lmentaire (boolean, char, int, float, ...), il existe une classe enveloppe correspondante (Boolean, Character, Integer, Float, ...) pour pouvoir manipuler si ncessaire des valeurs lmentaires comme des objets elles ont toutes :
un constructeur partir d'une valeur du type primitif correspondant un constructeur partir de String, et une mthode statique quivalente NomClasse.valueOf(String) une mthode String toString() un attribut TYPE avec l'objet Class correspondant
29/03/2011 16:09
253
29/03/2011 16:09
254
classe Number et classes filles classe abstraite mre des classes Byte, Integer, Float, ... dans chaque classe fille : valeurs min/max du type : constantes de classe MIN_VALUE et MAX_VALUE mthodes de conversion : byte byteValue(), int intValue(), float floatValue(), ... conversion en chane du type lmentaire : mthode statique String toString(type)
// OK : quivalent de tab[0]= new Boolean(true); // tab[1]= new Character('W'); // tab[2]= new Integer(33);
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 255 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 256
classes Integer, Byte, Short, Long presque totalement similaires valuer un entier crit sous forme de chane de caractres : int Integer.parseInt(String), byte Byte.parseByte(String), ... idem en prcisant une base : int Integer.parseInt(String s,int base) criture en base 2 36 : String Integer.toString(int val, int base) ...
classes Float et Double totalement similaires infini : float Float.POSITIVE_INFINITY, float Float.NEGATIVE_INFINITY, boolean Float.isInfinite(float) indtermin : boolean Float.isNaN(float)
29/03/2011 16:09
257
29/03/2011 16:09
258
classe Character ne contient quasiment que des fonctions (mthodes statiques) test de la nature d'un caractre : boolean Character.isLetter(char), Character.isDigit(char), Character.isWhiteSpace(char), ... Accs au type prcis d'un caractre : int Character.getType(char ch) renvoie un identifiant parmi : Character.LOWERCASE_LETTER, Character.DECIMAL_DIGIT_NUMBER ... changement de casse : char Character.toLowerCase(char), ... ...
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 259
classes Throwable, Exception, ... classe mre Throwable : Throwable(String) : constructeur avec un message explicatif sur la cause de l'exception String getMessage() : renvoie le message explicatif en question void printStackTrace() : affiche la pile d'appel jusqu'au point de lancement de l'exception rien de plus dans les classes filles Exception, RuntimeException, ... mais toutes ont un constructeur de la forme : NomException(String) : constructeur avec un message explicatif sur la cause de l'exception
29/03/2011 16:09
260
classe System
entre-sorties standards : InputStream System.in, PrintStream System.out et System.err redirection des I/O : System.setIn(InputStream), ... lancement forc du Garbage Collector : System.gc() fin d'excution : System.exit(int status) accs aux variables d'environnement : String System.getProperty(Sring name)... rglage scurit : System.setSecurityManager(SecurityManager) heure (en ms depuis 1/1/1970) : long System.currentTimeMillis() copie rapide de tableau : System.arraycopy(src,deb,dest,debD,len)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 261 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI
classe Runtime classe instancie une fois (et une seule) dans chaque programme Java s'excutant rcupration de l'instance courante : Runtime Runtime.getRuntime() lancement de programme externe (dans un process spar) : Process exec(String commande) exemple : Runtime.getRuntime().exec("ls -l *.c"); bilan mmoire : long freeMemory() et totalMemory()
29/03/2011 16:09
262
classe Process classe abstraite permettant de grer les programmes externes lancs en process spars par exec() de Runtime attente de fin et rcupration du status : int waitFor() suppression du process (kill) : destroy() connexion avec les I/O standard : InputStream getInputStream() : rcupre la sortie standard (pour lire dessus) OutputStream getOutputStream() : permet de se connecter l'entre standard du process (pour crire des choses dessus)
classe Thread
classe pour grer les sous-processus internes un programme Java constructeurs : Thread(String), Thread(Runnable) thread courant : Thread.currentThread() dmarrage : start() envoyer message : interrupt() => isInterrupted() devient true ( exploiter dans la mthode run) tat : boolean isAlive() == true depuis start() jusqu' fin d'excution attente de la fin du thread t : t.join() contrle du thread actif courant (mth. statiques) : - mise en sommeil : Thread.sleep(long millisec) - rendre la main : Thread.yield() infos: getName(),getPriority(),getThreadGroup() priorit : setPriority(int p), p entre Thread.MIN_PRIORITY et
Thread.MAX_PRIORITY
29/03/2011 16:09
263
29/03/2011 16:09
264
classe Math
Constantes : Math.PI, Math.E Fonctions mathmatiques usuelles (toutes static, avec double en entre et en sortie) : sin(), cos(), tan(), acos(), ... sqrt(), exp(), log(), pow() , ceil(), floor(), rint(), ...
classe StrictMath Identique la classe Math en termes de fonctionnalits mais avec des caractristiques diffrentes en termes de performances et de portabilit : utilise des algorithmes standards dfinis dans la bibliothque mathmatique fdlibm Freely Distributable Math Library rsultats des calculs strictement identiques quelque soit le matriel utilis performances possiblement infrieures compares celles de la classe Math (lorsque le hardware utilis fourni des routines optimises).
Autres fonctions : int round(float), long round(double): arrondis lentier le plus proche abs(a), min(a,b), max(a,b) pour a et b : int, long, float et double double random() : nombre compris dans lintervalle [ 0. 1. [ et tir par dfaut d'une srie pseudo-alatoire nouvelle chaque excution du programme
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 265
29/03/2011 16:09
266
Interfaces diverses Appendable : implante par classes prdfinies permettant lappend de caractres (StringBuffer, FileWriter, ) CharSequence Cloneable : voir description de mthode clone() dans section sur classes/objets Comparable : interface de comparaison (voir section sur java.util) Iterable<T> : interface dclarant lunique mthode Iterator<T> iterator(), et caractrisant les types permettant les itrations simplifies (voir section sur les instructions de contrle) Readable : source de caractres (implante notamment par FileReader, StringReader, ) Runnable : voir section sur les thread
29/03/2011 16:09
267
29/03/2011 16:09
268
29/03/2011 16:09
269
29/03/2011 16:09
270
29/03/2011 16:09
271
29/03/2011 16:09
272
29/03/2011 16:09
273
29/03/2011 16:09
274
29/03/2011 16:09
Autres conversions de flux flux avec tampon (pour viter des accs disque ou rseau chaque lecture/criture) : BufferedInputStream / BufferedOutputStream, BufferedReader / BufferredWriter flux pour criture formate en mode texte (comme pratiqu sur System.out) : classe PrintWriter avec comme mthodes utiles : print(), println(), printf() ... flux compresss : paquetage java.util.zip (classes ZipInputStream, ZipOutputStream,...) conversion flux octets / flux caractres : InputStreamReader/OutputStreamWriter
29/03/2011 16:09
3/ Brancher un flux d'criture d'objets sur le flux d'octets : ObjectOutputStream objOut = new ObjectOutputStream(out); 4/ Ecrire les nombres et/ou objets sur ce flux : objOut.writeInt(i); // i entier objOut.writeFloat(x); // x flottant // ... objOut.writeObject(o);
// o objet d'une classe qui implante l'interface Serializable
bloc
280
Lecture/ecriture simultanes et non-squentielles sur fichier Possible via classe RandomAccessFile constructeur : RandomAccessFile(filename,mode)
mode valant "r" (readonly) ou "rw" (read/write)
crire sur le fichier : raf.writeInt(i); // i entier raf.writeFloat(x);// x flottant raf.writeUTF(s); // s String // lire sur le fichier : int i = raf.readInt(); float x = raf.readFloat(); String s = raf.readUTF(); String l = raf.readLine(); // taille : int len = raf.length() dplacement dans le fichier : raf.seek(pos);
281 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 282
Penser convertir ce que retourne readObject() dans le bon type (celui de lobjet crit cet endroit du fichier).
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09
File : pour manipuler fichiers/rpertoires (accs la taille, listage du contenu, suppression, renommage, )
constructeurs :
File(String name), File(String path, String name), ...
mthodes :
boolean exists(), long length(), File getParent() boolean isDirectory(), String[] list() void delete(), void mkdir(), boolean renameTo(File f), ...
29/03/2011 16:09 283 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 284
29/03/2011 16:09
285
29/03/2011 16:09
286
29/03/2011 16:09
287
29/03/2011 16:09
288
Les collections Paquetage java.util : COLLECTIONS, DATES, ... une collection = un objet regroupant plusieurs lments (ex. : tableau, liste, ) Java propose, en plus des tableaux, plusieurs types de collections : ensemble : aucun lment dupliqu, pas dordre intrinsque liste : collection ordonne, avec rptition possible du mme lment table : srie de couples (clef > valeur) Depuis la version 1.5, toutes les classes et interfaces de ces collections sont generics , ce qui permet de dfinir et manipuler des collections dobjets dun type donn
Ensembles, Listes, Piles, Tables de hachage,... interface d'Itrateurs gestion des dates/heures internationalisation
29/03/2011 16:09
289
29/03/2011 16:09
290
Linterface Collection
L' interface Collection (ou plutt linterface Collection<E>, o E est le type des lments) permet de manipuler toutes les collections de faon unifie, et regroupe les mthodes communes toutes les collections :
taille : int size() test si vide : boolean isEmpty() ajout : boolean add(E element) [Note : quand Collection nest pas paramtre par <E> , le prototype est boolean add(Object element)] suppression : boolean remove(Object elt) suppression de tous les lments : void clear() recherche : boolean contains(Object elmt) parcours : Iterator<E> iterator() conversion en tableau : Object[] toArray()
Principales interfaces :
Collection List Set Queue
BlockingQueue
Map
SortedMap
SortedSet
TreeSet
PriorityQueue DelayQueue
TreeMap
HashMap Hashtable
29/03/2011 16:09
292
Linterface Iterator
Permet de parcourir nimporte quelle collection habituellement, paramtre par le type E des lments de la collection : Iterator<E> s'obtient par appel de iterator() sur la collection parcourir contient les mthodes : boolean hasNext() E next() [ ou Object next() quand Iterator nest pas paramtre par <E> ] void remove()
ATTENTION : il faut en recrer un nouveau (par appel de iterator()) ds que la collection a t modifie par appel add(), remove(), directement sur la collection
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 293
29/03/2011 16:09
294
Si MaClasse implante Comparable<MaClasse>, ceci permet notamment de trier un MaClasse[] tab avec Arrays.sort(tab) ou encore de trier une Collection<MaClasse> coll avec Collections.sort(coll)
elle permet de dfinir des comparateurs dinstances de la classe T, notamment pour Arrays.sort(T[],Comparator) et Collections.sort(List<T>,Comparator)
29/03/2011 16:09
L'interface ListIterator
permet de parcourir une List (habituellement paramtre par le type E des
lments de la liste : ListIterator<E>)
s'obtient par appel de listIterator() sur la liste parcourir tend l'interface Iterator<E> en ajoutant des mthodes :
pour parcourir en sens inverse (previous(), hasPrevious(), ) pour insrer (add(E o)) pour modifier (set(E o)) ATTENTION : comme pour les Iterator, il faut en recrer un nouveau (par appel de listIterator()) ds que la liste a t modifie par appel add()/remove()/ directement sur la liste
29/03/2011 16:09
297
29/03/2011 16:09
298
29/03/2011 16:09
299
29/03/2011 16:09
300
29/03/2011 16:09
301
29/03/2011 16:09
302
Classe Vector
Habituellement paramtre par le type E de seslments : Vector<E> Similaire la classe ArrayList en termes de fonctionnalits Principale diffrence : Vector est synchronized
Classe Stack
Habituellement paramtre par le type E de ses lments : Stack<E> Implantation par drivation de la classe Vector, en ajoutant les mthodes : empiler : push(E item) sommet : E peek() dpiler : E pop() [remplacer E par Object quand Stack nest pas paramtre par <E> ]
29/03/2011 16:09
303
29/03/2011 16:09
304
Deux implantations :
classe HashSet<E> pour Set<E> (utilisant une table de hachage HashMap<E,Object>) classe TreeSet<E> pour SortedSet<E> (utilisant un arbre bicolore TreeMap<E,Object>)
La sous-interface BlockingQueue<E> bloque jusqu ce que la file soit non-vide, en cas dessai daccs la tte.
[modifie e1 !]
29/03/2011 16:09 305 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 306
Implantations de Queue
PriorityQueue<E> : les lments sont traits selon leur ordre naturel Autres implantations, dans le sous-paquetage java.util.concurrent : LinkedBlockingQueue<E> : une FIFO ( First In First Out ) bloquante. ArrayBlockingQueue<E> : une FIFO ( First In First Out ) bloquante capacit limite (stockage dans un tableau). PriorityBlockingQueue<E> : idem PriorityQueue<E> mais en version bloquante DelayQueue<E> : les lments doivent implanter linterface Delayed, et ne sont traits quune fois leur dlai expir, en commenant par ceux ayant expir les premiers
Principales mthodes :
ajout : put(K clef, V valeur) valeur associe une clef : V get(Object clef) suppression : V remove(Object clef) taille : boolean isEmpty() et int size()
boolean containsKey(Object clef) boolean containsValue(Object val) collection des valeurs : Collection<V> values() ensemble des clefs : Set<K> keySet() ensemble des couples clef-valeur : Set<Map.Entry<K,V>> entrySet() (chaque couple est une instance de Map.Entry<K,V>)
29/03/2011 16:09
307
29/03/2011 16:09
308
NOTE : Il existe aussi une autre implantation de Map, trs voisine de HashMap : la classe Hashtable. En plus des mthodes standards de Map, elle possde les mthodes suivantes :
liste des lments : liste des clef : Enumeration elements() Enumeration keys()
29/03/2011 16:09
309
29/03/2011 16:09
310
Collections et enum
La classe EnumSet<E extends Enum<E>> est une implantation de Set spcialise (et optimise) pour le stockage de valeurs dun mme type numr (enum) pas de constructeur : la cration se fait par une des mthodes static de la classe ; exemple :
Set<MonEnum> s; s = EnumSet.allOf(MonEnum.class);
Enumeration
Enumeration<E> contient deux mthodes :
lment suivant : E nextElement() test de fin : boolean hasMoreElements()
Manipulation avec les mthodes standard dun Set EnumMap<K extends Enum<K>,V> est une classe offrant une implantation de Map spcialise et optimise pour des tables dont les clefs sont des valeurs dun mme type numr.
29/03/2011 16:09
311
29/03/2011 16:09
312
Lecture d'un fichier ligne par ligne et affichage de son contenu lcran :
try { Scanner sc = new Scanner( new FileReaderfichier.txt") ); String ligne; while (sc.hasNextLine()) { ligne = sc.nextLine(); System.out.println(ligne); } } catch (FileNotFoundException e) { System.err.println(e); }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 314
29/03/2011 16:09
317
29/03/2011 16:09
318
29/03/2011 16:09
319
29/03/2011 16:09
320
IHM graphiques Java inclut diverses classes facilitant la cration d'Interfaces HommeMachine (IHM) graphiques PORTABLES cette IHM peut tre : soit une applet intgre dans une page Web, soit une application indpendante principaux paquetages :
java.awt : bases communes et composants de 1re gnration java.awt.event : gestion des vnements java.applet : applets non Swing javax.swing : complment et alternative aux composants AWT
29/03/2011 16:09
321
29/03/2011 16:09
322
Applet v.s. application Pour les applets tlcharges, il y a de nombreuses restrictions concernant la scurit : accs aux fichiers locaux restreints pas de connexion rseau avec des sites autres que le site d'origine pas le droit de lancer d'autres programmes interdiction de contenir des mthodes natives , ou de charger des librairies Ces restrictions ne s'appliquent pas : aux applets locales excutes avec appletviewer aux applets tlcharges mais dfinies comme de confiance par l'utilisateur, et authentifies par une signature chiffre
tag HTML <APPLET> Pour insrer une applet dans une page Web, celle-ci doit contenir : <APPLET code="NomApplet.class" width=w height=h> ... </APPLET> o w et h = dimension rserve l'applet (en pixels) On peut insrer (entre le tag ouvrant et le tag fermant) des tags de la forme : <PARAM name=Nom value=Val> pour passer des paramtres rcuprables dans l'applet
29/03/2011 16:09
323
29/03/2011 16:09
324
Applets, versions de Java et navigateurs Les navigateurs usuels (Firefox, IE) utilisent pour excuter les applets leur propre JVM qui peut correspondre une version plus ou moins rcente du langage Solution #1 : ne pas utiliser dans les applets les nouveauts les plus rcentes de Java Solution #2 : exiger la prsence dun plug-in Java dans le navigateur : ct utilisateur, il faut donc installer un Java Plug-in dans le navigateur ; ct dveloppeur, faire en sorte que la rfrence l'applet dans le fichier HTML utilise la balise <OBJECT> au lieu de la balise <APPLET>
paint(Graphics) : dessine l'applet (est normalement appele automatiquement par update() quand ncessaire) update(Graphics) : appele automatiquement quand il faut re-dessiner l'applet (par dfaut : efface, puis appelle paint()) print(Graphics) : pour imprimer, si diffrent de affichage stop() : excute quand l'applet devient temporairement invisible (=> suspendre les threads, ...) destroy() : excute au dchargement de l'applet (=> librer les ressources)
29/03/2011 16:09
325
29/03/2011 16:09
326
affichage d'une image : g.drawImage(img, x,y,this); [ dans la mthode paint(Graphics g) ] utilisation d'un son Audioclip ac : ac.play(), ac.loop(), ac.stop()
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 327 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 328
// Jouer le son : public void start(){ son.loop(); } // Afficher image : public void paint(Graphics g){ g.drawImage (img,xIm,yIm,this); }
// Arrter son, modifier la public void init() { // position : URL base = getDocumentBase(); public void stop() { img=getImage(base, "im.gif"); son.stop(); son=getAudioClip(base, "s.au"); xIm+=20; yIm+=20; xIm=10; yIm=20; } } }
29/03/2011 16:09 329
29/03/2011 16:09
333
29/03/2011 16:09
334
29/03/2011 16:09
335
29/03/2011 16:09
336
Paquetage java.awt (et sous-paquetages) composants graphiques lmentaires (boutons, menus, ...) de premire gnration conteneurs (fentres, ...) de premire gnration primitives graphiques pour dessiner gestion des images et des sons gestion des vnements
29/03/2011 16:09
337
29/03/2011 16:09
338
Types de Conteneurs
Classe abstraite Container (sous-classe de Component), dont hritent les sous-classes :
Panel : conteneur de base, pour grouper des composants ScrollPane : conteneur avec barres de dfilement, mais pour un seul composant Window : fentre (sans bordure, ni titre), pour cration fentres perso par drivation Frame : fentre usuelle avec bandeau en haut Dialog : fentre secondaire, associe une fentre matresse (notamment pour pop-up de dialogue) FileDialog : fentre de slection de fichier
29/03/2011 16:09
339
29/03/2011 16:09
340
Les Menus
crer une MenuBar mb l'insrer dans un Frame f : f.setMenuBar(mb); crer les menus m et les ajouter la MenuBar : mb.add(m); crer les CheckboxMenuItem et/ou MenuItem et les ajouter aux menus
NOTE : Menu drive de MenuItem => on fait des sous-menus en ajoutant un menu comme item dans un autre
Dessiner
Pour dessiner sur un composant, il faut un contexte graphique (objet Graphics) associ on obtient une copie du Graphics courant pour un composant par appel de [possible a priori uniquement pour les sa mthode getGraphics()
conteneurs et les composants de type Canvas]
Couleurs
les dessins sur un Graphics se font avec la couleur courante , consultable et modifiable par ses mthodes respectives :
Color getColor() void setColor(Color)
les couleurs d'avant-plan et d'arrire-plan d'un composant sont aussi modifiables via les mthodes de Component :
Color getForeground() void setForeground(Color) Color getBackground() void setBackground(Color)
classe Color :
constructeur : Color(int rouge, int vert, int bleu) couleurs usuelles : constantes de classe Color.black, Color.red, Color.blue, ...
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 344
Polices de caractres
Chaque Graphics et Component a une font courante consultable / modifiable par ses mthodes :
Font getFont() setFont(Font)
Images
classe Image chargement par la mthode getImage(url_base,name) de Applet, ou bien, hors des applets, par la mthode getImage(name) de la classe Toolkit (on obtient un Toolkit par getToolkit(), ou bien par Toolkit.getDefaultToolkit())
Classe Font :
constructeur Font(String nom, int style, int taille)o nom est du type Helvetica , style est une des constantes Font.BOLD, Font.ITALIC, Font.PLAIN (ou une combinaison par |), et taille est la dimension en points
29/03/2011 16:09
345
Cration d'images
Dans certains cas (double buffering pour animation, ...) on veut dessiner dans un objet Image non visible avant de l'afficher. Pour faire cela : crer une image par : Image img = createImage(l,h); // mthode de Component rcuprer un Graphics associ : Graphics g = img.getGraphics(); dessiner sur g quand on le souhaite, afficher l'image dans le composant voulu par appel de drawImage() sur un Graphics associ au composant (et non l'image)
29/03/2011 16:09
347
29/03/2011 16:09
348
29/03/2011 16:09
349
29/03/2011 16:09
350
Curseur
chaque composant a un curseur associ :
Cursor getCursor() setCursor(Cursor cur)
classe Cursor :
constructeur Cursor(int type) o type parmi :
Cursor.DEFAULT_CURSOR Cursor.CROSSHAIR_CURSOR Cursor.HAND_CURSOR Cursor.TEXT_CURSOR Cursor.WAIT_CURSOR Cursor.MOVE_CURSOR Cursor.XX_RESIZE_CURSOR o XX est N, S, E, W, NE, NW, SE, ou SW
mthodes statiques :
Cursor.getDefaultCursor() Cursor.getPredefinedCursor(int)
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 351 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 352
29/03/2011 16:09
355
29/03/2011 16:09
356
29/03/2011 16:09
357
29/03/2011 16:09
358
29/03/2011 16:09
359
29/03/2011 16:09
360
Gestion des vnements c'est le mcanisme qui permet l'intraction avec l'utilisateur via l'interface graphique Modle metteur/rcepteur, avec sparation claire entre les lments d'interface qui mettent les vnements, et des objets rcepteurs qui coutent les vnements et agissent en consquence classes dans le paquetage java.awt.event
Modle d'vnement
chaque composant peut gnrer des vnements (classe abstraite AWTEvent et ses sous-classes MouseEvent, ActionEvent, ...) tout objet o qui doit ragir quand un type d'vnement se produit dans un certain composant c doit : implanter l'interface adquate (MouseListener, ActionListener, ...) tre enregistr dans la liste des objets intresss par ce type d'vnements issus de ce composant (c.addMouseListener(o), c.addActionListener(o), ...) quand un vnement se produit sur le composant c, il est transmis tous les rcepteurs enregistrs chez lui pour ce type d'vnement, ceci par appel de sa mthode correspondante (e.g., pour appui sur bouton souris, o.mousePressed(evt) pour tous les o concerns, et o evt est l'vnement)
29/03/2011 16:09
361
29/03/2011 16:09
362
ComponentEvent : redimensionnement, dplacement, ... FocusEvent : dbut/fin de slection comme destinataire des inputs (clavier et souris) KeyEvent : clavier (touche appuye, ...) MouseEvent : souris (boutons, dplacement, ...) ActionEvent : appui sur Button, double-clic sur item de List, appui sur Return dans un TextField, choix d'un MenuItem, ... ItemEvent : (d-)slection d'une Checkbox, d'un item de List ou de Choice, passage sur un MenuItem, ... TextEvent : modification de texte ContainerEvent : ajout/suppression de composant AdjustementEvent : dfilement de Scrollbar
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 363
Window
ActionEvent ItemEvent
ItemEvent
Interfaces rcepteurs
A chaque classe XxxEvent est associe une interface XxxListener, qui regroupe une ou plusieurs mthodes (lesquelles passent toutes l'vnement en paramtre) :
KeyEvent KeyListener keyPressed() keyReleased() keyTyped() mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased() mouseMoved()
ActionEvent ItemEvent TextEvent
AdjustmentEvent ContainerEvent
WindowEvent
WindowListener
MouseListener MouseEvent
MouseMotionListener mouseDragged()
ComponentEvent
ComponentListener
componentAdded() componentRemoved()
FocusEvent
FocusListener
29/03/2011 16:09
366
Classes Adaptateurs pour chaque interface XxxListener est prdfinie aussi une classe XxxAdapter qui implante l'interface avec des mthodes toutes vides ainsi, un objet intress par un seul sous-type d'vnement (e.g. clic souris), peut tre dfini comme hritant de la classe adaptateur, et du coup n'avoir redfinir que la mthode souhaite (e.g. hriter de la classe MouseAdapter en redfinissant uniquement mouseClicked())
O crire une mthode de gestion d'vnement ? Plusieurs solutions possibles : la plus simple et lisible : faire implanter l'interface rcepteur adquate par l'applet, la fentre principale, ou la principale classe de l'interface graphique la plus lourde et la moins commode : dfinir une classe ddie qui implante l'interface rcepteur adquate crer la vole (juste au moment de l'enregistrer comme couteur) une classe qui implante l'interface rcepteur adquate
29/03/2011 16:09
367
29/03/2011 16:09
368
Note : on peut faire la mme chose avec une Frame au lieu d'une Applet
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 370
29/03/2011 16:09
371
29/03/2011 16:09
372
29/03/2011 16:09
373
29/03/2011 16:09
374
29/03/2011 16:09
375
29/03/2011 16:09
376
Paquetage javax.swing Complment et alternative aux composants de AWT permettant de ne pas tre limit au plus grand dnominateur commun des composants Windows/Mac/X11-Motif : fonctionnalits plus riches et plus grande fiabilit, mais maniement un peu plus complexe, et vitesse d'affichage un peu plus lente (car les composants Swing sont dessins au lieu de faire intervenir les composants de la plate-forme d'excution) Contient : des composants graphiques (boutons, menus, ...) de 2-me gnration des applets et fentres de 2-me gnration
Les applets Swing Indispensables si on souhaite utiliser des composants Swing dans une applet classe JApplet sous-classe de Applet de AWT fonctionne donc de la mme faon, sauf (principalement) existence d'une contentPane (comme dans tous les conteneurs "top-level" de Swing) ce qui implique : tout composant (ou sous-Panel) c doit tre ajout la contentPane par getContentPane().add(c); le LayoutManager est celui de la contentPane (par dfaut, c'est un BorderLayout) et se modifie donc par getContentPane().setLayout(); on peut mettre une barre de menu par setJMenuBar();
377 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 378
29/03/2011 16:09
Equivalents Swing des autres principaux composants AWT La plupart des composants graphiques usuels de AWT ont leur quivalent Swing, qui a le mme nom avec un J devant :
JComponent : anctre de tous les composants Swing (sauf JApplet, JDialog, JFrame) JButton : bouton usuel JCheckBox : case cochable ( indpendante ) JLabel : texte affich par le programme JList : liste scrollable de choix JTextField, JTextArea : pour entrer du texte JPanel : conteneur de base pour grouper des composants JDialog : fentre secondaire ( esclave ) JMenu, JMenuBar, JMenuItem, JPopupMenu : pour les menus JScrollBar : barre de dfilement JScrollPane : pour donner une vue scrollable d'un seul composant JWindow : fentre sans barre de titre ni bordure
Ces quivalents Swing ont gnralement plus de fonctionnalits que leurs homologues AWT
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 380
29/03/2011 16:09
379
29/03/2011 16:09
381
29/03/2011 16:09
382
manipulation des URL accs aux protocoles standards de l'Internet (http, ftp, mail, ...) communication inter-process
constructeurs : URL(String nom), URL(URL base, String nom), ou URL(protocole,host,port,file) ouverture de flux en lecture : InputStream openStream() manipulation plus fine, infos sur le contenu : URLConnection openConnection(), puis mthodes de URLConnection : connect(), getContentType(), getContentLength(), ... getInputStream(), getOutputStream()
29/03/2011 16:09
385
29/03/2011 16:09
386
Exemple de Client
import java.net.*; import java.io.*; class ClientMiroir { public static void main(String[] arg){ try { Scanner sc = new Scanner(System.in); // ouverture socket (port=9999, host=arg[0]) : Socket client = new Socket(arg[0], 9999); // ouverture de deux flux sur socket : OutputStream out = client.getOutputStream(); // flux en criture InputStream in = client.getInputStream(); // flux en lecture while (true) { String s = sc.nextLine(); // lecture ligne au clavier out.write(s.getBytes()); // recopie sur socket out.write('\n'); out.flush(); // lecture sur socket : byte [] buf = new byte[1000]; in.read(buf); s = new String(buf); System.out.println(s); } } catch (IOException e) { System.out.println(e); } } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 389
Exemple de serveur
import java.util.*; import java.net.*; import java.io.*; class ServeurMiroir { public static void main(String[] arg){ try { // mise en route du serveur sur port 9999 : ServerSocket serveur = new ServerSocket(9999); Socket client = serveur.accept(); // attente connexion client InputStream is = client.getInputStream(); // ouvre flux lecture OutputStream out = client.getOutputStream(); // idem en criture // fonctionnement du serveur : StringBuffer buf = new StringBuffer(); do { int c = is.read(); // lecture caractre par caractre if (c == -1) { break; } // fin de flux if (c != '\n') { buf.append( (char) c ); } // cararactre std. else { // traitement des fins de ligne sur flux lecture : buf.reverse(); out.write(buf.toString().getBytes()); out.flush(); buf = new StringBuffer(); } } while (true); } catch (IOException e) { System.err.println(e); } } }
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 390
29/03/2011 16:09
391
29/03/2011 16:09
392
Principe une interface, connue du serveur et des clients, qui dfinit les mthodes appelables distance, et doit driver de l'interface Remote une classe pour l'objet distant qui implante Remote et drive de la classe UnicastRemoteObject un programme principal qui cre des objets distants et les enregistre auprs du service de nommage par : Naming.rebind(nom,obj) les programmes clients obtiennent une rfrence aux objets distants par : Naming.lookup(nom_url) o nom_url est de type rmi://host/nom
RMI = Remote Method Invocation (appel de mthode distance) sorte de mini CORBA, mais spcifique Java facilite la programmation client-serveur en permettant la manipulation d'objets distants travers rseau
29/03/2011 16:09
393
29/03/2011 16:09
394
Utilisation compiler les sources Java de l'interface, de la classe de l'objet distant, des programmes serveur et client appliquer rmic la classe des objets distants (pour crer les classes associes ) : rmic MaClasseDistante lancer le serveur de nom : rmiregistry &
Exemple
Interface
import java.rmi.*; public interface Compte extends Remote { void deposer(int x) throws RemoteException; void retirer(int x) throws RemoteException; int lireSolde() throws RemoteException; }
29/03/2011 16:09
395
Exemple (suite)
Client RMI
import java.rmi.*; public class AccesCompte { public static void main(String[] arg) { try { String url = "rmi://vander/"+arg[0]; // URL du compte distant // pour gestion scurit :
System.setSecurityManager(new RMISecurityManager());
// rcupration de l'objet distant : Compte c = (Compte)Naming.lookup(url); // appels de mthode : if (arg[1].equals("solde")) { System.out.print("solde " + arg[0] + " = "); System.out.println( c.lireSolde() ); } else if (arg[1].equals("depot")) { c.deposer(Integer.parseInt(arg[2])); System.out.print("dept de " + arg[2]); System.out.println(" effectu"); } else if (arg[1].equals("retrait")){ c.retirer(Integer.parseInt(arg[2])); System.out.println(" effectu"); } } catch (Exception e) { System.out.println(e); } }}
Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 397 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 398
29/03/2011 16:09
399
29/03/2011 16:09
400
Principe de programmation
1/ on charge le driver de BD par Class.forName(nomClasseDriver)
ACCES BASES DE DONNEES : java.sql
2/ on se connecte :
Connection c = DriverManager.getConnection(String url) o url est de la forme jdbc:nom_driver:nom_base
SQL (Standard Query Langage) = langage standard d'accs aux Bases de Donnes paquetage java.sql contient des classes permettant de se connecter une base de donnes, puis de lui envoyer des instructions SQL (et de rcuprer le rsultat des requtes) paquetage aussi connu sous le nom de JDBC (Java DataBase Connectivity)
29/03/2011 16:09
401
29/03/2011 16:09
402
29/03/2011 16:09
403
29/03/2011 16:09
404
29/03/2011 16:09
405
29/03/2011 16:09
406
29/03/2011 16:09
407
29/03/2011 16:09
408
JavaBeans (suite)
l'outil de dveloppement doit pouvoir reconnatre automatiquement les proprits paramtrables du bean possible grce l'introspection Java (cf. classe Class, ...) et au respect de rgles de conception ( design patterns ) : pour chaque proprit, mthode <TypeProp> get<NomProp>() et void set<NomProp>(<TypeProp> val)
Beans : composants logiciels rutilisables conus pour tre assembls aisment (et le plus souvent visuellement) l'aide d'outils de dveloppement intractifs un bean se dfinit par : ses proprits (attributs persistants) les vnements qu'il reconnait ses mthodes de traitement des vnements
29/03/2011 16:09
409
29/03/2011 16:09
410
29/03/2011 16:09
411
29/03/2011 16:09
412
29/03/2011 16:09
413
29/03/2011 16:09
414
29/03/2011 16:09
415
29/03/2011 16:09
416
INDEX (1)
abstract 162-163 animation 330-331, 347 applet 323-331, 378 affectation 30, 33, 55 ActionEvent et ActionListener 363, 364-366, 369-370 arraycopy() 35 Arrays 33, 294-295 attribut 114-116, 118, 126-127, 143, 156, 252 auto-boxing/unboxing (des types primitifs) 255 AWT (Abstract Window Toolkit) 322, 337-353 bit--bit (oprateurs) voir oprateurs BitSet 316 boolean 22, 53, 254-255 bloc 27, 66 boucles 67, 70-74 break 69, 74 Button 338, 363-364, 370, 380 byte voir entiers
29/03/2011 16:09 417
INDEX (2)
catch 197-198, 201 char ou Character voir caractres chane de caractres 39-40, 245-247, 313-314 classe (et Class) 113-131, 138, 140-141, 147-148, 154, 163-164, 167, 170, 180, 214-217, 250-251 clone() et Cloneable 35, 168, 185, 248 collections 221, 290-312 Color voir couleurs commentaires 29, 145-146 Comparable et Comparator 295 comparaison (oprateurs) voir oprateurs compilation 107, 141 composants graphiques 338-339, 342, 349-350, 380-383 constantes 26, 28, 38, 69, 127 constructeur 122-123, 159, 170, 250 conteneurs graphiques 339-341, 352-353, 378, 379, 383 continue 74 conventions de nommage voir nommage couleurs 344 Cursor 351 date et Date voir Calendar dclaration (de variable) 27, 28, 32, 115, 219-220 dessiner 327-331, 343, 348, 352-353 dimensions (des composants graphiques) 349
29/03/2011 16:09 418
INDEX (3)
do 70, 74 documentation automatique voir javadoc double voir float Eclipse 10 ellipse (arguments de fonction) 92 else voir if encapsulation 121, 139-140, 156, 158 ensemble voir Set entiers 21, 23, 51, 254-257 entres-sorties 97-101, 273-283 enum et types numrs 41, 69, 73, 130-131, 249, 311 vnements (programmation graphique) 361-372 exceptions 33, 193-205, 260 extends 155, 184, 217-218, 220 fichiers 273-277, 278-283 file dattente voir Queue final 26, 38, 69, 127, 160, 164-165 float et flottants (nombres) 21, 25, 254-256 fonction 81-92 Font 345 for 71-74 Frame 339
29/03/2011 16:09 419
INDEX (4)
Garbage Collector (GC) 8-9, 33, 124, 261 generics (types gnriques paramtrs) 214-221, 290, 300-302 gnrique (programmation) 169, 182, 209-221 Graphics 326, 343-348 HashMap 291, 310 HashSet 291, 305 hritage 9, 153-167, 184, 217 heure 261, 316 if 68 images 327, 329, 346-347 import 142-143 instanceof 57 int voir entiers interface 9, 177-185, 218, 229, 267, 276, 291 introspection 9, 170, 250-253 io (paquetage java.io) 273-283 Iterable 73, 267
javadoc 10, 29, 145-146 Java SE (Java Standard Ed.), JDK (Java Development Kit), JRE (Java Runtime Environment) 10 LayaoutManager 340-341 length [taille tableau] 31, 33, 34 length() [longueur chane de caractres] 39-40, 244 List (listes) 291, 296-302 long voir entiers
29/03/2011 16:09 420
INDEX (5)
main() 18, 86, 106-107 Map 291, 308-311 Math 51, 265 membre (de classe) 116, 118-119 mthode 114-116, 119, 128-129, 156, 160-162, 165, 170, 178-180, 215, 253 MouseEvent et MouseListener 362, 363-366, 367-369, 372
INDEX (6)
package et paquetage 8-9, 121, 158, 138-144, 241-410 paint() 326 Panel 339 paramtre (de fonction) 82, 84-85, 87-89, 92 Pattern 99, 313, 315-316 porte (des variables) 27, 66, 85 position (des composants graphiques) 350 primitifs (types) 20, 21-25 print() et println() 98, 277 printf() 100 private 121, 139, 156, 158 programme principal voir main() protected 121, 139, 158 public 121, 139, 140, 158
new 30-31, 32, 34, 36, 37, 40, 50, 57, 117, 122, 125, 220 nommage (conventions) 28 null 30, 37, 125, 196 objet 114-115, 117, 125 Object 167-169, 212-213, 248 OBJECT (balise HTML) 325 oprateurs 49-58
affectation 18, 30, 33, 55 arithmtiques 51 bit--bit 54 boolens 53 comparaison 52 dcrmentation 56 incrmentation 56 priorit 58 ternaire 57
Queue 291, 306-307 racine (classe) voir Object rcursivit 90 rfrence 20, 30, 38, 115, 120, 181 rseau (programmation) 385-390 return 74, 83
Scanner 99, 279, 313, 314-315 Serializable 185, 276, 280 Set 291, 305, 31
29/03/2011 16:09 421 Programmation avec le langage Java N. Kajler, F. Moutarde CCSI 29/03/2011 16:09 422
INDEX (7)
short voir entiers static 82, 86, 126-129, 143, 156, 162 String 37, 39, 244-245, 275, 313-314 StringBuffer 40, 246-247, 267 StringTokenizer 316 super 160, 220 super() 159 surcharge 91 Swing (interfaces graphiques) 322, 377-383 switch 41, 69 System 98, 101, 261 table voir Map tableaux 9, 30-38, 73, 125, 166 ternaire (oprateur) voir oprateurs tests 52, 57, 68, 69-72 this 120, 131 this() 123 threads 8-9, 225-237, 264, 331 throw 203 throws 205 try 196-197, 231, 233-234, 278-281 types 20-26, 30, 31-33, 41, 116, 130-131, 181, 219-220
INDEX (8)
util (paquetage java.util) 289-31 variable 20, 27, 66, 85 while 70, 74 wildcard (type paramtr) 219-220, 302
29/03/2011 16:09
423
29/03/2011 16:09
424
REFERENCES
Pour approfondir un point, ou revenir sur quelque chose que vous n'avez pas bien compris, vous pouvez vous reporter : 1/ aux ressources suggres dans la page : www.ensmp.fr/CC/Docs/Java et en particulier :
le Java Tutorial d'Oracle ; les autres sites rassemblant exemples, tutoriaux, comme l'excellent www.java2s.com (en anglais) ou www.developpez.com (en franais)
29/03/2011 16:09
425