Vous êtes sur la page 1sur 343

Programmation oriente objet -Langage JAVADUT-GI (2me anne) Anne universitaire: 2009-2010

Pr. Mohamed NAIMI


Universit Hassan 1er Ecole Suprieure de Technologie Berrechid (ESTB)

Plan du cours

Introduction. Syntaxe. Mthodes, classes et objets. Composition et hritage. Interfaces, paquetages et encapsulation. Collections. Exceptions. Fichiers et flux. Interfaces graphiques.
Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction

Introduction (1)

La Programmation Oriente Objet (POO) consiste modliser informatiquement un ensemble d'lments d'une partie du monde rel (que l'on appelle domaine) en un ensemble d'entits informatiques. Ces entits informatiques sont appeles objets. Il s'agit de donnes informatiques regroupant les principales caractristiques des lments du monde rel (taille, couleur, ...).

Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction (2)

Java a t dvelopp partir de dcembre 1990 par une quipe de Sun Microsystems dirige par James Gosling. Les fondateurs de Java ont ralis un langage indpendant de toute architecture de telle sorte que Java devienne idal pour programmer pour des rseaux htrognes, notamment Internet.

Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction (3)

Caractristiques du langage Java:

Portabilit; Indpendance par rapport aux plateformes. Scurit et robustesse; Le compilateur interdit toute manipulation en mmoire. Gratuit; Les outils de dveloppement Java sont fournis gratuitement. Richesse; Disponibilit dune vaste collection de bibliothques de classes.

Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction (4)
Do vient la portabilit de Java?
Avant excution Excution

Autres byte codes

Fichier de code Java

Compilation

Byte code

Machine virtuelle Java (JVM)

Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction: Concepts de base (1)


Une classe est la structure d'un objet, c'est--dire la dclaration de l'ensemble des entits qui composeront un objet. Un objet est donc "issu" d'une classe, c'est le produit qui sort d'un moule. En ralit on dit qu'un objet est une instanciation d'une classe, c'est la raison pour laquelle on pourra parler indiffremment d'objet ou d'instance (ventuellement d'occurrence). Une classe est compose de deux parties:

Les attributs ou champs (parfois appels donnes membres): il s'agit des donnes reprsentant l'tat de l'objet. Les mthodes (parfois appeles fonctions membres): il s'agit des oprations applicables aux objets.

Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction: Concepts de base (2)


Illustration:
Classe Livre -titre, auteur Classe Employ -nom, prnom, statut Classe Lecteur -nom, prnom

Classe Journal -titre

Germinal E. Zola Le Monde Alice Dupont Directrice Anne Durand Lectrice Arsne Deschamps Lecteur

Le seigneur des anneaux J.R.R.Tolkien

Michel Martin Bibliothcaire

Pr. Mohamed NAIMI | Cours_Java | ESTB

Introduction: Structure dun programme Java


Un programme Java utilise un ensemble de classes. Les classes sont regroupes par paquetage (en anglais, package). Une classe regroupe un ensemble dattributs et de mthodes.

Paquetage Classe Attributs Mthodes

Pr. Mohamed NAIMI | Cours_Java | ESTB

10

Syntaxe du langage Java

Dclaration dune classe


Le nom de la classe est spcifi derrire le mot cl class . Le corps de la classe est dlimit par des accolades. On dfinit dans le corps les attributs et les mthodes qui constituent la classe.
class Test { < corps de la classe > }

Pr. Mohamed NAIMI | Cours_Java | ESTB

12

Dfinition dune mthode (1)


Une mthode est constitue:


Dun nom. Dun type de retour. De paramtres ou arguments (ventuellement aucun). Dun bloc dinstructions. Dun type. Dun nom.

Un paramtre est constitu:


void est le mot-cl signifiant que la mthode ne renvoie pas de valeur.

Pr. Mohamed NAIMI | Cours_Java | ESTB

13

Dfinition dune mthode (2)


Exemple:
class Test { int calculer (int taux, float delta) { < corps de la mthode > } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

14

Les commentaires

/* Commentaires sur une ou plusieurs lignes */

Identiques ceux existant dans le langage C. Identiques ceux existant en C++. Les commentaires d'explication se placent gnralement juste avant une dclaration (d'attribut ou de mthode).

// Commentaires de fin de ligne

/** Commentaires d'explication */

Pr. Mohamed NAIMI | Cours_Java | ESTB

15

Instructions, blocs et blancs (1)


Les instructions Java se terminent par un ; . Les blocs sont dlimits par deux accolades:
{ pour le dbut de bloc } pour la fin du bloc Un bloc permet de dfinir un regroupement dinstructions. La dfinition dune classe ou dune mthode se fait dans un bloc.

Les espaces, tabulations, sauts de ligne sont autoriss. Cela permet de prsenter un code plus lisible.

Pr. Mohamed NAIMI | Cours_Java | ESTB

16

Instructions, blocs et blancs (2)


Instructions possibles:

Dclaration dune variable. Appel de mthode. Affectation. Instruction de boucle (while, for). Instruction de test (if, switch).

Pr. Mohamed NAIMI | Cours_Java | ESTB

17

Dclaration dune variable


Une variable possde un type et un nom. Le type peut tre un type de base ou une classe. Linitialisation dune variable peut se faire au moment de la dclaration.
{ int compteur; // Dclaration int indice = 0; // Dclaration + Initialisation Voiture golf; Voiture twingo = new Voiture(); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

18

Porte dune variable


La porte dune variable stend jusqu la fin du bloc dans lequel elle est dfinie.
{ { int compteur; // compteur est accessible } // compteur nest plus accessible }

Pr. Mohamed NAIMI | Cours_Java | ESTB

19

Laffectation

Loprateur = permet daffecter la valeur de lexpression qui se trouve droite la variable qui se trouve gauche.
class Test { int calculer () { int i = 0; int j = 6; i = (j + 5) * 3; // Instruction daffectation return i + j; } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

20

Les oprateurs arithmtiques lmentaires


Rgles de priorit sur les oprateurs arithmtiques:

Pr. Mohamed NAIMI | Cours_Java | ESTB

21

Les oprateurs de comparaison

Pr. Mohamed NAIMI | Cours_Java | ESTB

22

Les oprateurs logiques

Pr. Mohamed NAIMI | Cours_Java | ESTB

23

Les oprateurs daffectation


Loprateur de base est = . Il existe des oprateurs daffectation qui ralisent la fois une opration arithmtique, logique, ou bit bit et laffectation proprement dite:

Pr. Mohamed NAIMI | Cours_Java | ESTB

24

Point dentre dun programme Java


Pour pouvoir faire un programme excutable il faut toujours une classe qui contienne une mthode particulire: la mthode main .

Cest le point dentre dans le programme: le microprocesseur sait quil va commencer excuter les instructions partir de cet endroit.
public static void main(String arg[ ]) { / }

Pr. Mohamed NAIMI | Cours_Java | ESTB

25

Exemple (1)
Fichier Bonjour.java La classe est lunit de base de nos programmes. Le mot cl en Java pour dfinir une classe est class.

public class Bonjour { //Accolade dbutant la classe Bonjour public static void main(String args[ ]) { //Accolade dbutant la mthode main /* Pour linstant juste une instruction */ System.out.println(bonjour); } //Accolade fermant la mthode main } //Accolade fermant la classe Bonjour

Pr. Mohamed NAIMI | Cours_Java | ESTB

26

Exemple (2)
Fichier Bonjour.java Accolades dlimitant le dbut et la fin de la dfinition de la class Bonjour.

public class Bonjour { public static void main(String args[ ]) { System.out.println(bonjour); } }

Accolades dlimitant le dbut et la fin de la mthode main.

Les instructions se terminent par des ;

Pr. Mohamed NAIMI | Cours_Java | ESTB

27

Exemple (3)
Fichier Bonjour.java Une mthode peut recevoir des paramtres. Ici la mthode main reoit le paramtre args qui est un tableau de chane de caractres.

public class Bonjour { public static void main(String args[ ]) { System.out.println(bonjour); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

28

Compilation et excution (1)


Fichier Bonjour.java Compilation dun programme java dans une console DOS: javac Bonjour.java Gnre un fichier Bonjour.class Excution du programme (toujours depuis la console DOS) sur la JVM : java Bonjour Affichage de bonjour dans la console. Le nom du fichier est ncessairement celui de la classe suivi de lextension .java . Java est sensible la casse des lettres (exemple: Bonjour bonjour).

public class Bonjour { public static void main(String[ ] args) { System.out.println(bonjour); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

29

Compilation et excution (2)


Pour rsumer, dans une console DOS, si jai un fichier Bonjour.java pour la classe Bonjour:

javac Bonjour.java javac est la commande qui lance le compilateur Java. Compilation en bytecode java. Indication des erreurs (ventuelles) de syntaxe. Gnration dun fichier Bonjour.class sil ny a pas derreurs. java Bonjour java est la commande qui lance la machine virtuelle (JVM). Excution du bytecode. Ncessit de la mthode main, qui est le point dentre dans le programme.
Pr. Mohamed NAIMI | Cours_Java | ESTB 30

Remarque:

Compilation et excution (3)


On peut utiliser ce quon appelle un environnement de dveloppement intgr (IDE) pour compiler et excuter des applications Java. Un IDE Java est un diteur spcifique du code Java ayant une interface intuitive qui permet de faciliter ldition, la compilation, la correction derreurs et lexcution des applications Java. Exemples dIDE Java:

JCreator. netBeans (Open Source). BlueJ. JBuilder.


Pr. Mohamed NAIMI | Cours_Java | ESTB 31

Identificateurs

Un identificateur permet de dsigner une classe, une mthode, une variable Rgles respecter pour les identificateurs:

Interdiction dutiliser les mots-cls (mots rservs de Java). Les identificateurs Commencent par: Une lettre. Un $ . Un _ (underscore). Ne commencent pas par: Un chiffre. Un signe de ponctuation autre que $ ou _ .
Pr. Mohamed NAIMI | Cours_Java | ESTB 32

Les mots rservs de Java


abstract boolean break byte case catch char class continue const default do double else extends false final finally float for goto if implements import instanceof int interface long native new

null package private protected public return short static super switch

synchronized this throw throws transient true try void volatile while

Pr. Mohamed NAIMI | Cours_Java | ESTB

33

Les types de base (1)


En Java, tout est objet sauf les types de base. Il y a huit types de base:

Un type boolen pour reprsenter les variables ne pouvant prendre que 2 valeurs (vrai et faux, 0 ou 1, etc.): Boolean avec les valeurs associes true et false. Un type pour reprsenter les caractres: char. Quatre types pour reprsenter les entiers de divers taille: byte, short, int et long. Deux types pour reprsenter les relles: float et double.

La taille ncessaire au stockage de ces types est indpendante de la machine.


Avantage: portabilit. Inconvnient: conversions coteuses.


Pr. Mohamed NAIMI | Cours_Java | ESTB 34

Les types de base (2): Les entiers


Les entiers (avec signe):


byte: cod sur 8 bits, peuvent reprsenter des entiers allant de -27 27 1 (-128 +127). short: cod sur 16 bits, peuvent reprsenter des entiers allant de -215 215 1. int: cod sur 32 bits, peuvent reprsenter des entiers allant de -231 231 1. long: cod sur 64 bits, peuvent reprsenter des entiers allant de -263 263 1.

Pr. Mohamed NAIMI | Cours_Java | ESTB

35

Les types de base (3): Les entiers


Oprations sur les entiers:


+ : addition. - : soustraction. * : multiplication. / : division entire. % : reste de la division entire. Exemples:


15 / 4 donne 3. 15 % 2 donne 1.

Pr. Mohamed NAIMI | Cours_Java | ESTB

36

Les types de base (4): Les entiers


Oprations sur les entiers (suite):

Les oprateurs dincrmentation et de dcrmentation ++ et -- : + + : ajoute 1 la valeur dune variable entire. - - : retranche 1 de la valeur dune variable entire. n++; quivalent n = n+1; n--; quivalent n = n-1; Exemple:

int n = 12; n ++; // Maintenant n vaut 13.

Pr. Mohamed NAIMI | Cours_Java | ESTB

37

Les types de base (5): Les entiers


Oprations sur les entiers (suite):


8++; est une instruction illgale. Lincrmentation (resp. la dcrmentation) peut tre utilise de manire suffixe: ++n. La diffrence avec la version prfixe se voit quand on les utilisent dans les expressions. En version suffixe lincrmentation (resp. la dcrmentation) seffectue en premier, alors quelle seffectue en dernier en version prfixe. Exemple illustratif:
int m=7; int n=7; int a=2 * ++m; // a vaut 16, m vaut 8 int b=2 * n++; // b vaut 14, n vaut 8

Pr. Mohamed NAIMI | Cours_Java | ESTB

38

Les types de base (6): Les rels


Les rels:

float: cod sur 32 bits, peuvent reprsenter des nombres allant de -1035 + 1035. double: cod sur 64 bits, peuvent reprsenter des nombres allant de -10400 +10400. 4.55 ou 4.55D: rel en double prcision. 4.55f: rel en simple prcision.

Notation:

Pr. Mohamed NAIMI | Cours_Java | ESTB

39

Les types de base (7): Les rels


Les oprateurs sur les rels:


Oprateurs classiques: +, -, *, / Attention pour la division:


15 / 4 donne 3. 15.0 / 4 donne 3.75 (si lun des termes de la division est un rel, la division retournera un rel).

Puissance:

Utilisation de la mthode pow de la classe Math: double y = Math.pow(x, a) quivalent x^a (i.e. xa en notation mathmatique), avec x et a tant de type double.

Pr. Mohamed NAIMI | Cours_Java | ESTB

40

Les types de base (8): Les boolens


Les boolens:

boolean: contient soit vrai (true) soit faux (false). Egalit: oprateur == Diffrence: oprateur != Suprieur et infrieur strictement : oprateurs > et < Suprieur et infrieur ou gal: oprateurs >= et <=

Les oprateurs logiques de comparaison:


Pr. Mohamed NAIMI | Cours_Java | ESTB

41

Les types de base (9): Les boolens


Illustration:

boolean x; x= true; x= false; x= (5==5); // lexpression (5==5) est value et la valeur est affecte x qui vaut alors vrai x= (5!=4); // x vaut vrai, ici on obtient vrai car 5 est diffrent de 4 x= (5>5); // x vaut faux, 5 n'est pas suprieur strictement 5 x= (5<=5); // x vaut vrai, 5 est bien infrieur ou gal 5

Pr. Mohamed NAIMI | Cours_Java | ESTB

42

Les types de base (10): Les boolens


Autres oprateurs logiques:


Et logique: && Ou logique: || Non logique: ! boolean a,b, c; a= true; b= false; c= (a && b); // c vaut false c= (a || b); // c vaut true c= !(a && b); // c vaut true c=!a; // c vaut false
Pr. Mohamed NAIMI | Cours_Java | ESTB 43

Exemples:

Les types de base (11): Les caractres


Les caractres:

char contient un seul caractre (lettre, symbole, ponctuation). Le type char dsigne des caractres en reprsentation Unicode. Codage sur 2 octets contrairement ASCII/ANSI cod sur 1 octet. Notation hexadcimale des caractres Unicode de \u0000 \uFFFF . Remarque: Le codage ASCII/ANSI est un sous-ensemble de la reprsentation Unicode. Pour plus dinformation sur Unicode: www.unicode.org

Pr. Mohamed NAIMI | Cours_Java | ESTB

44

Les types de base (12): Les caractres


Illustration:
char a,b,c; // a,b et c sont des variables de type char a='a'; // a contient la lettre a b= '\u0022' // b contient le caractre guillemet " c=97; // c contient le caractre de rang 97: 'a'

Pr. Mohamed NAIMI | Cours_Java | ESTB

45

Les types de base (13): Exemple et remarque


Exemple:

int x = 0, y = 0; float z = 3.1415F; double w = 3.1415; long t = 99L; boolean test = true; char c = 'a';

Remarque importante:

Java exige que toutes les variables soient dfinies et initialises. Le compilateur sait dterminer si une variable est susceptible d'tre utilise avant initialisation et produit une erreur de compilation.

Pr. Mohamed NAIMI | Cours_Java | ESTB

46

Les structures de contrle (1)


Les structures de contrle en Java :


if, else switch, case, default, break for while do, while

Pr. Mohamed NAIMI | Cours_Java | ESTB

47

Les structures de contrle (2): if, else


Instructions conditionnelles:

On veut effectuer une ou plusieurs instructions seulement si une certaine condition est vraie: if (condition) instruction; et plus gnralement: if (condition) {bloc dinstructions} Condition doit tre un boolen ou doit renvoyer une valeur boolenne. On veut effectuer une ou plusieurs instructions si une certaine condition est vrifie sinon effectuer dautres instructions: if (condition) instruction1; else instruction2; et plus gnralement: if (condition) {1er bloc dinstructions} else {2me bloc dinstructions}

Pr. Mohamed NAIMI | Cours_Java | ESTB

48

Les structures de contrle (3): if, else


Max.java import java.io.*; public class Max { public static void main (String[ ] args) throws IOException { BufferedReader in; in = new BufferedReader (new InputStreamReader(System.in)); System.out.println ("Entrer le premier entier:"); String input1 = in.readLine(); int nb1 = Integer.parseInt(input1); System.out.println("Entrer le second entier:"); String input2 = in.readLine(); int nb2 = Integer.parseInt(input2); if (nb1 > nb2) System.out.println("Lentier le plus grand est: " + nb1); else System.out.println("Lentier le plus grand est: " + nb2); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

49

Les structures de contrle (4): while


Boucles indtermines (while):

On veut rpter une ou plusieurs instructions un nombre indtermin de fois: On rpte linstruction ou le bloc dinstruction tant quune certaine condition reste vraie. Voici la syntaxe de la boucle while (tant que): while (condition) {bloc dinstructions} Les instructions dans le bloc sont rptes tant que la condition reste vraie. On ne rentre jamais dans la boucle si la condition est fausse ds le dpart.

Pr. Mohamed NAIMI | Cours_Java | ESTB

50

Les structures de contrle (5): while


Facto1.java import java.io.*; public class Facto1 { public static void main (String[ ] args) throws IOException { int n, result, i; BufferedReader in; in = new BufferedReader (new InputStreamReader(System.in)); System.out.println ("Entrer une valeur pour n:"); String input = in.readLine(); n = Integer.parseInt(input); result = 1; i = n; while (i > 1) { result = result * i; i--; } System.out.println ("La factorielle de " + n + " vaut " + result); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

51

Les structures de contrle (6): do, while


Boucles indtermines (do, while):

Voici la syntaxe de la boucle do, while: do {bloc dinstructions} while (condition) Les instructions dans le bloc sont rptes tant que la condition reste vraie. On rentre toujours au moins une fois dans la boucle: La condition est teste en fin de boucle.

Pr. Mohamed NAIMI | Cours_Java | ESTB

52

Les structures de contrle (7): for


Boucles dtermines (for):

On veut rpter une ou plusieurs instructions un nombre dtermin de fois: On rpte linstruction ou le bloc dinstructions pour un certain nombre ditrations. Syntaxe gnrale de la boucle for:

for (int i = debut; i < fin; i++) Instructions; for (int i = 0; i < 10; i++) System.out.println(i); // affichage des nombres de 0 9 La syntaxe de la boucle for peut avoir dautres variantes: for (int i = fin; i > debut; i--) Instructions;

Exemple:

Remarque:

Pr. Mohamed NAIMI | Cours_Java | ESTB

53

Les structures de contrle (8): for


Facto2.java import java.io.*; public class Facto2 { public static void main (String[ ] args) throws IOException { int n, result, i; BufferedReader in; in = new BufferedReader (new InputStreamReader(System.in)); System.out.println ("Entrer une valeur pour n:"); String input = in.readLine(); n = Integer.parseInt(input); result = 1; for(i =n; i > 1; i--) { result = result * i; } System.out.println ("La factorielle de " + n + " vaut " + result); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

54

Les structures de contrle (9): switch


Slection multiple (switch):

Lutilisation de if, else peut savrer lourde quand on doit traiter plusieurs slections ou effectuer un choix parmi plusieurs alternatives. Pour cela, il existe en Java linstruction switch, case qui est identique celle de C/C++. La valeur sur laquelle on teste doit tre un char ou un entier ( lexclusion dun long). Lexcution des instructions correspondant une alternative commence au niveau du case correspondant et se termine la rencontre dune instruction break ou arrive la fin du switch.

Pr. Mohamed NAIMI | Cours_Java | ESTB

55

Les structures de contrle (10): switch


Syntaxe gnral de linstruction switch:


Switch (variable) { Case valeur 1: Instructions; break; Case valeur 2: Instructions; break; Case valeur N: Instructions; break; Default: Instructions; }
Pr. Mohamed NAIMI | Cours_Java | ESTB

56

Les structures de contrle (11): switch


Alternative.java import java.io.*; public class Alternative { public static void main(String[] args) throws IOException { BufferedReader in; in = new BufferedReader (new InputStreamReader(System.in)); System.out.println ("Entrer un entier:"); String input = in.readLine(); int nb = Integer.parseInt(input); switch(nb) { case 1: System.out.println("1"); break; case 2: System.out.println("2"); break; default: System.out.println ("Autre nombre"); break; } } } Premire alternative : on affiche 1 et on sort du bloc du switch au break; Deuxime alternative : on affiche 2 et on sort du bloc du switch au break;

Alternative par dfaut: on ralise une action par dfaut.

Pr. Mohamed NAIMI | Cours_Java | ESTB

57

Les tableaux (1)


Les tableaux permettent de stocker plusieurs valeurs de mme type dans une variable.

Les valeurs contenues dans la variable sont repres par un indice. En langage java, les tableaux sont des objets. Type Nom_Tableau[ ]; // Ou Type[ ] Nom_Tableau; int tab[ ]; // Ou int[ ] tab; String chaines[ ]; // Ou String[ ] chaines; Nom_Tableau = new Type[Taille_Tableau]; tab = new int [20]; // tableau de 20 entiers chaines = new String [100]; // tableau de 100 chanes

Dclaration:

Cration d'un tableau:

Pr. Mohamed NAIMI | Cours_Java | ESTB

58

Les tableaux (2)


Le nombre d'lments du tableau est mmoris. Java peut ainsi dtecter, lors de l'excution, le dpassement d'indice et gnrer une exception. Mot cl pour rcuprer la taille dun tableau: length

Syntaxe: Nom_Tableau.length; Exemple: int taille = tab.length; // taille vaut 20

Comme en C/C++, les indices dun tableau commencent 0 . Donc un tableau de taille 100 aura ses indices qui iront de 0 99.

Pr. Mohamed NAIMI | Cours_Java | ESTB

59

Les tableaux (3)


Initialisation:
tab[0] = 5; tab[1] = 3; // etc. chaines[0] = new String("Pierre"); chaines[1] = new String("Paul"); // etc.

Cration et initialisation simultanes:


int tab [ ] = {5, 3}; String chaines [ ] = {"Pierre", "Paul"};

Pr. Mohamed NAIMI | Cours_Java | ESTB

60

Les tableaux (4)


Tab1.java public class Tab1 { public static void main (String args[ ]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } }

Pour dclarer une variable tableau on indique le type des lments du tableau et le nom de la variable tableau suivi de [ ]. On utilise new <type> [taille]; pour initialiser le tableau. On peut ensuite affecter des valeurs au diffrentes cases du tableau: <Nom_Tableau>[indice] = Valeur 61

Les indices vont toujours de 0 (taille-1)

Pr. Mohamed NAIMI | Cours_Java | ESTB

Les tableaux (5)


Tab1.java public class Tab1 { public static void main (String args[ ]) { int tab[ ]; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } } Mmoire

0x0000 0x258 0 0 0 0

Pr. Mohamed NAIMI | Cours_Java | ESTB

62

Les tableaux (6)


Tab1.java public class Tab1 { public static void main (String args[ ]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } } Mmoire

0x258

5 0 0 3 0 7 0 8

Pr. Mohamed NAIMI | Cours_Java | ESTB

63

Les tableaux (7)


Tab2.java public class Tab2 { public static void main (String args[ ]) { String chaines[ ] ; chaines = new String[4]; chaines[0]=new String("Pierre"); chaines[1]=new String("Paul"); chaines[2]=new String("Jacques"); chaines[3]=new String("Philippe"); } } Mmoire 0x0258 0x0106 0x0116 0x0126 0x0136

"Pierre" "Paul" "Jacques" "Philippe"

Pr. Mohamed NAIMI | Cours_Java | ESTB

64

Les tableaux (8)


Tab2.java public class Tab2 { public static void main (String args[ ]) { String chaines[ ] ; chaines = new String[4]; chaines[0]=new String("Pierre"); chaines[1]=new String("Paul"); chaines[2]=new String("Jacques"); chaines[3]=new String("Philippe"); for (int i=0;i< chaines.length;i++) { System.out.println( " chaines[ " + i + " ] = " + chaines[i]); } } } Modification du programme pour afficher le contenu du tableau.

Pr. Mohamed NAIMI | Cours_Java | ESTB

65

Les tableaux (9)


Copie de la rfrence dun tableau:


En Java, un tableau est un objet et le nom du tableau contient la rfrence de cet objet. Laffectation dun tableau un autre ne le duplique pas, mais affecte simplement une autre rfrence au mme objet. CopieRef.java (voir page suivante).

Exemple:

Pr. Mohamed NAIMI | Cours_Java | ESTB

66

Les tableaux (10)


public class CopieRef { public static void main(String[] args) { int[] a = {22, 44, 66, 55, 33}; System.out.println("a: " + a); print(a); int[] aa; aa = a; System.out.println("aa: " + aa); print(aa); a[3] = 88; print(a); print(aa); aa[1] = 11; print(a); print(aa); } public static void print(int[] a) { for (int i=0; i<a.length; i++) System.out.print(a[i] + " "); System.out.println(); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

67

Les tableaux (11)


Sortie du programme CopieRef.java:
a: [I@47858e 22 44 66 55 33 aa: [I@47858e 22 44 66 55 33 22 44 66 88 33 22 44 66 88 33 22 11 66 88 33 22 11 66 88 33

Pr. Mohamed NAIMI | Cours_Java | ESTB

68

Les tableaux (12)


Copie dun tableau:


Pour copier le tableau lui-mme au lieu de la rfrence, on doit copier chaque lment qui le compose. Copie intuitive: Supposons que lon dispose de 2 tableaux a[ ] et aa[ ] et que lon dsire copier les lments de a[ ] dans aa[ ]:

aa[0] = a[0]; aa[1] = a[1]; // etc.

Pr. Mohamed NAIMI | Cours_Java | ESTB

69

Les tableaux (13)

Copie en utilisant la mthode arraycopy( ): La mthode arraycopy( ) de la classe System permet de copier rapidement un tableau: System.arraycopy(Src, SrcPos, Dest, DestPos, Length);

Src: le tableau source. SrcPos: lindex du premier lment du tableau source copier. Dest: le tableau cible. DestPos: lindex o le premier lment doit tre copi dans le tableau cible. Length: le nombre dlments copier. CopieTab.java (voir page suivante).

Exemple:

Pr. Mohamed NAIMI | Cours_Java | ESTB

70

Les tableaux (14)


public class CopieTab { public static void main(String[ ] args) { int[ ] a = {22, 33, 44, 55, 66, 77, 88, 99}; System.out.println("a: " + a); print(a); int[ ] aa = new int[a.length]; System.out.println("aa: " + aa); print(aa); System.arraycopy(a, 0, aa, 0, a.length); System.out.println("aa: " + aa); print(aa); aa[1] = 11; print(a); print(aa); aa = new int[12]; System.arraycopy(a, 0, aa, 3, 8); System.out.println("aa: " + aa); print(aa); System.arraycopy(aa, 3, aa, 1, 5); System.out.println("aa: " + aa); print(aa); } public static void print(int[ ] a) { for (int i=0; i<a.length; i++) System.out.print(a[i] + " "); System.out.println(); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

71

Les tableaux (15)


Sortie du programme CopieTab.java:
a: [I@47858e 22 33 44 55 66 77 88 99 aa: [I@19134f4 00000000 aa: [I@19134f4 22 33 44 55 66 77 88 99 22 33 44 55 66 77 88 99 22 11 44 55 66 77 88 99 aa: [I@2bbd86 0 0 0 22 33 44 55 66 77 88 99 0 aa: [I@2bbd86 0 22 33 44 55 66 55 66 77 88 99 0

Pr. Mohamed NAIMI | Cours_Java | ESTB

72

Les tableaux (16)


La classe Arrays:

La classe Arrays permet de traiter les tableaux. Elle est dfinie dans le paquetage java.util. Cette classe contient plusieurs mthodes utilitaires: sort(a): permet de trier les lments du tableau a. equals(a, b): renvoie true si les tableaux a et b sont gaux. etc. Exemple: TestArrays.java (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

73

Les tableaux (17)


import java.util.Arrays; public class TestArrays { public static void main(String[] args) { int[] a = {44, 77, 55, 22, 99, 88, 33, 66}; print(a); Arrays.sort(a); print(a); int[] b = new int[8]; print(b); System.arraycopy(a, 0, b, 0, a.length); print(b); System.out.println("Arrays.equals(a,b): " + Arrays.equals(a,b)); } public static void print(int[] a) { for (int i=0; i<a.length; i++) System.out.print(a[i] + " "); System.out.println(); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

74

Les tableaux (18)


Sortie du programme TestArrays.java:
44 77 55 22 99 88 33 66 22 33 44 55 66 77 88 99 00000000 22 33 44 55 66 77 88 99 Arrays.equals(a,b): true

Pr. Mohamed NAIMI | Cours_Java | ESTB

75

Les tableaux (19)


Tableaux bidimensionnels:

Les lments dun tableau peuvent tre nimporte quel type dobjet. Ces lments peuvent tre donc des tableaux. Le cas chant, nous obtenons ce quon appelle un tableau bidimensionnel (ou matrice). Syntaxe de dclaration et de cration: Exemple: UneMatrice.java (voir page suivante).

Type[ ][ ] Nom_Tableau = new Type[Nombre_Lignes][Nombre_Colonnes];

Pr. Mohamed NAIMI | Cours_Java | ESTB

76

Les tableaux (20)


public class UneMatrice { public static void main(String[ ] args) { int[ ][ ] M = new int[3][5]; for (int i=0; i<3; i++) for (int j=0; j<5; j++) M[i][j] = 10*(i+1) + j; for (int i=0; i<3; i++) print(M[i]); System.out.println("M[2][4] = " + M[2][4]); } public static void print(int[ ] a) { for (int i=0; i<a.length; i++) System.out.print(a[i] + " "); System.out.println(); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

77

Les tableaux (21)


Sortie du programme UneMatrice.java:
10 11 12 13 14 20 21 22 23 24 30 31 32 33 34 M[2][4] = 34

Pr. Mohamed NAIMI | Cours_Java | ESTB

78

Les chanes: La classe String (1)


Attention ce nest pas un type de base. Il s'agit d'une classe dfini dans lAPI Java (Dans le package java.lang). Dclaration:

String Nom_chaine; String s = "aaa"; // s contient la chane "aaa" String s = new String("aaa"); // s contient la chane "aaa"

Dclaration et initialisation:

Pr. Mohamed NAIMI | Cours_Java | ESTB

79

Les chanes: La classe String (2)


La concatnation:

loprateur + permet de concatner un nombre fini de chanes de type String: Exemple:


String str1 = "Bonjour ! "; String str2 = null; str2 = "Comment vas-tu ?"; String str3 = str1 + str2; /* str3 contient "Bonjour ! Comment vas-tu ?" */

Pr. Mohamed NAIMI | Cours_Java | ESTB

80

Les chanes: La classe String (3)


Longueur dun objet String:


La mthode length( ) renvoie la longueur dune chane de type String. Exemple: String str1 = "bonjour"; int n = str1.length( ); // n vaut 7

Pr. Mohamed NAIMI | Cours_Java | ESTB

81

Les chanes: La classe String (4)


Les sous-chanes:

La mthode substring(int debut, int fin) permet dextraire une sous-chane partir dune chane de type String. Extraction de la sous-chane depuis la position debut jusqu la position fin non-comprise. Exemple:
String str1 = "bonjour"; String str2 = str1.substring(0,3); // str2 contient la valeur "bon"

Remarque: Le premier caractre dune chane occupe la position 0. Le deuxime caractre occupe la position 1 et ainsi de suite.

Pr. Mohamed NAIMI | Cours_Java | ESTB

82

Les chanes: La classe String (5)


Rcupration dun caractre dans une chane:

La mthode charAt(int Pos) permet de renvoyer le caractre situ la position Pos dans la chane de caractres appelant cette mthode. Exemple: String str1 = "bonjour"; char UNj = str1.charAt(3); // UNj contient le caractre 'j'

Pr. Mohamed NAIMI | Cours_Java | ESTB

83

Les chanes: La classe String (6)


Modification de la casse des lettres dans une chane:

La mthode toLowerCase( ) permet de transformer toutes les lettres majuscules en des lettres minuscules dans la chane appelant cette mthode. Exemple:
String str1 = "BONJOUR"; String str2 = str1.toLowerCase( ) // str2 contient la chane "bonjour"

De mme, la mthode toUpperCase( ) permet de transformer toutes

les lettres minuscules en des lettres majuscules dans la chane appelant cette mthode.

Pr. Mohamed NAIMI | Cours_Java | ESTB

84

Les chanes: La classe String (7)


Modification des objets String:


Les objets String sont immuables en Java, ce qui signifie quils ne peuvent pas tre modifis. Remarque: Quand on a besoin de manipuler directement les chanes de caractres, on peut utiliser la classe StringBuffer.

Pr. Mohamed NAIMI | Cours_Java | ESTB

85

Les chanes: La classe String (8)


Exemple rcapitulatif:
class TestClasseString { public static void main(String[ ] args) { String alphabet = "ABCITALIEFGHIJKLMNOPQRSTUVWXYZ"; System.out.println("Cette chaine est: " + alphabet); System.out.println("Sa longueur est: " + alphabet.length()); System.out.println("Le caractre de lindice 4 est: " + alphabet.charAt(4)); System.out.println("Sa version en minuscules est: " + alphabet.toLowerCase()); System.out.println("Cette chaine est toujours: " + alphabet); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

86

Les chanes: La classe String (9)


Sortie du programme TestClasseString.java:
Cette chaine est: ABCITALIEFGHIJKLMNOPQRSTUVWXYZ Sa longueur est: 26 Le caractre de lindice 4 est: E Sa version en minuscules est: abcdefghijklmnopqrstuvwxyz Cette chaine est toujours: ABCITALIEFGHIJKLMNOPQRSTUVWXYZ

Pr. Mohamed NAIMI | Cours_Java | ESTB

87

Les chanes: La classe String (10)


Diffrence entre objet (ex. String) et type de base:


Mmoire int x = 3,y = 3; x == y est vrai 3 3 0x768 0x852 String s1 = "abc", s2 = "abc"; s1 == s2 est faux... abc .... abc ....

Quand on compare 2 variables dun type de base on compare leurs valeurs. Quand on compare 2 objets avec les oprateurs on compare leurs rfrences (leurs adresses). Pour comparer des objets,on utilise la mthode equals(): s1.equals(s2); // retourne true Pr. Mohamed NAIMI | Cours_Java | ESTB

88

Les nombres alatoires: La classe Random


La classe Random est une classe utilitaire de lAPI Java permettant de gnrer des nombres alatoires. La classe Random est dfinie dans le paquetage java.util. Les mthodes les plus utilises de la classe Random:

La mthode nextInt( ) permet de renvoyer des nombres alatoires entiers rpartis de faon uniforme dans lintervalle comportant les entiers de type int (actuellement, de -2 147 483 648 2 147 483 647). La mthode nextInt(n) permet de renvoyer des nombres alatoires entiers rpartis de faon uniforme dans lintervalle de 0 n 1. La mthode nextDouble( ) permet de renvoyer des nombres alatoires de type double qui sont rpartis uniformment dans lintervalle de 0 1.
Pr. Mohamed NAIMI | Cours_Java | ESTB 89

Les nombres alatoires: La classe Random


Exemple:
import java.util.Random; public class EntierAleatoire { public static void main(String[ ] args) { Random random = new Random( ); int n = random.nextInt( ); System.out.println("n = " + n); if (n < 0) System.out.println("**** n < 0"); else System.out.println("**** n >= 0"); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

90

Mthodes, classes et objets

Mthodes (1)

Une mthode est une squence de dclarations et dinstructions excutables. En Java, toute instruction excutable doit se trouver dans une mthode. Les mthodes constituent les actions (ou traitements) excuter sur les objets. La mthode principale en Java est la mthode main( ) qui constitue le point dentre dun programme Java.

Pr. Mohamed NAIMI | Cours_Java | ESTB

92

Mthodes (2)

Syntaxe de dclaration dune mthode:

Modificateurs Type_Retour Nom_Mthode (Liste_Paramtres) Clause {Squence_Instructions} Modificateurs (ex. public, static) spcifie la liste des modificateurs ventuels de la mthode. Ces modificateurs prscrivent la faon daccder la mthode. Ils sont facultatifs. Type_Retour spcifie le type de la valeur renvoye par la mthode. Si Type_Retour nest pas void , alors au moins une de ses instructions doit inclure une instruction return qui renvoie une expression dont le type correspond celui de Type_Retour. Nom_Mthode spcifie le nom ou lidentificateur de la mthode. Par convention, Nom_Mthode est commenc par une lettre minuscule.
Pr. Mohamed NAIMI | Cours_Java | ESTB

93

Mthodes (3)

Syntaxe de dclaration dune mthode (suite):


Liste_Paramtres spcifie la liste des paramtres (ou arguments) de la mthode ainsi que leurs types. Clause spcifie une clause spcifique concernant la mthode (ex. la clause throws IOException qui concerne la mthode main( ) lorsque celle-ci doit contenir des instructions pour lentre interactive des donnes). Clause est facultative. Squence_Instructions spcifie la squence dinstructions constituant le corps de la mthode.

Exemple:

TestCube.java est un programme qui teste la mthode cube( ) dfinie dans la classe TestCube (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

94

Mthodes (4)
public class TestCube { public static void main(String[ ] args) { for (int i = 0; i < 6; i++) System.out.println(i + "\t" + cube(i)); } static int cube(int n) { return n*n*n; } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

95

Mthodes (5)
Sortie du programme TestCube.java:
0 1 2 3 4 5 0 1 8 27 64 125

Pr. Mohamed NAIMI | Cours_Java | ESTB

96

Mthodes (6)

Les variables locales:


Une variable locale est dclare dans une mthode. Elle peut tre utilise uniquement lintrieur de la mthode o elle est dclare. Sa porte est donc limite cette mthode. Remarque: Selon lemplacement des variables, on peut utiliser un seul nom pour plusieurs variables dun mme programme. Exemple: VarLocale.java (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

97

Mthodes (7)
public class VarLocale { public static void main(String[ ] args) { for (int n = 0; n < 9; n++) System.out.println("f(" + n + ") = " + f(n)); } static long f(int n) { long f = 1; while (n > 1) f *= n--; return f; } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

98

Mthodes (8)

La rcursivit:

Une mthode qui sappelle elle-mme est dite rcursive. Une fonction rcursive est compose de deux parties principales: A. La base qui dfinit la fonction pour les premires valeurs. B. La partie rcursive qui dfinit la fonction pour les autres valeurs. Exemple: Le programme FactoRec.java implmente une mthode f qui calcule la fonction factorielle de faon rcursive (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

99

Mthodes (9)
public class FactoRec { public static void main(String[ ] args) { for (int i = 0; i < 9; i++) System.out.println("f(" + i + ") = " + f(i)); } static long f(int n) { if (n < 2) return 1; return n*f(n-1); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

100

Mthodes (10)

Les mthodes boolennes:


Une mthode boolennes se contente de renvoyer une valeur de type boolean ( true ou false ). Les mthodes boolennes sont gnralement utilises dans des expressions o une condition est attendue. Les mthodes boolennes sont parfois qualifies de prdicats. Exemple: Le programme TestNbrePremier.java implmente une mthode nomme nbrePremier(int n ) permettant de vrifier si le paramtre n est un nombre premier ou non (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

101

Mthodes (11)
public class TestNbrePremier { public static void main(String[ ] args) { for (int i = 0; i < 100; i++) if (nbrePremier(i)) System.out.print(i + " "); System.out.println(); } static boolean nbrePremier(int n) { if (n < 2) return false; if (n == 2) return true; if (n%2 == 0) return false; for (int d = 3; d <= Math.sqrt(n); d += 2) if (n%d == 0) return false; return true; } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

102

Mthodes (12)
Sortie du programme TestNbrePremier.java:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Pr. Mohamed NAIMI | Cours_Java | ESTB

103

Mthodes (13)

La surcharge:

La surcharge signifie que plusieurs mthodes peuvent porter le mme nom tant quelles nont pas le mme nombre de paramtres ou des paramtres de types diffrents. La signature dune mthode est compose de son nom et de sa liste de paramtres (y compris les types de ces paramtres). Les mthodes surcharges doivent avoir des signatures diffrentes. Exemple: SurchargeMax.java (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

104

Mthodes (14)
import java.util.Random; public class SurchargeMax { public static void main(String[ ] args) { Random random = new Random(); for (int i = 0; i < 4; i++) { int a = random.nextInt(100); int b = random.nextInt(100); int c = random.nextInt(100); System.out.println("max(" + a + "," + b + ") = " + max(a, b)); System.out.println("max(" + a + "," + b + "," + c + ") = " + max(a, b, c)); } } static int max(int m, int n) { if (m > n) return m; return n; } static int max(int n1, int n2, int n3) { return max( max(n1, n2), n3); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

105

Classes et objets (1)


Java est un langage orient objet;


Un programme Java est structure en classes qui spcifient le comportement des objets. Les objets contrlent les actions (mthodes) du programme. Un programme Java est une collection dun ou de plusieurs fichiers texte qui dfinissent les classes Java. Lune de ces classes doit tre dclare comme public et doit contenir la mthode main ( ); il sagit de la classe principale.

Une classe est un type de donnes qui nest pas prdfini dans le langage, mais qui est dfini par le concepteur de la classe.

Pr. Mohamed NAIMI | Cours_Java | ESTB

106

Classes et objets (2)


Par convention, les noms de classes commencent gnralement par une lettre majuscule. Linstanciation dune classe consiste crer des objets dont le type correspond celui dfini par cette classe. Un objet est une instance de classe qui possde les caractristiques de sa classe. Une classe est compose de trois types de membres:
1. 2. 3.

Les champs qui spcifient le type de donnes contenues dans les objets. Les mthodes qui spcifient les oprations susceptibles dtre effectues par les objets. Les constructeurs (mthodes particulires) qui spcifient le mode de cration des objets.
Pr. Mohamed NAIMI | Cours_Java | ESTB 107

Classes et objets (3)


Syntaxe gnrale de la dfinition dune classe:

Modificateurs class Nom_Classe Clauses { \\ Champs; \\ Constructeurs {} \\ Mthodes {} } Les Modificateurs spcifient le mode daccs la classe (ex. public, abstract). Ils sont facultatifs. Nom_Classe spcifie le nom de la classe. Les Clauses apparaissent, par exemple, lorsque la classe est incluse dans une hirarchie dhritage.

Pr. Mohamed NAIMI | Cours_Java | ESTB

108

Classes et objets (4)


Syntaxe gnrale de la dclaration dun champ:

Modificateurs Type_Champ Nom_Champ; Les Modificateurs spcifient le mode daccs au champ (ex. static, public, private). Type_Champ spcifie le type de donnes contenues dans le champ. Nom_Champ spcifie le nom identifiant le champ.

Pr. Mohamed NAIMI | Cours_Java | ESTB

109

Classes et objets: Les modificateurs (1)


Modificateurs de classes: Modificateur


abstract public

Signification
La classe ne peut pas tre instancie. Les membres de la classe sont accessibles depuis toutes les autres classes.

Pr. Mohamed NAIMI | Cours_Java | ESTB

110

Classes et objets: Les modificateurs (2)


Modificateurs de champs: Modificateur


final private public static

Signification
Il doit tre initialis et ne peut pas tre modifi. Il nest accessible que depuis sa propre classe. Il est accessible depuis toutes les classes. Le mme stockage est utilis pour toutes les instances de la classe.

Pr. Mohamed NAIMI | Cours_Java | ESTB

111

Classes et objets: Les modificateurs (3)


Modificateurs de constructeurs: Modificateur


private public

Signification
Il est uniquement accessible depuis sa propre classe. Il est accessible depuis toutes les classes.

Pr. Mohamed NAIMI | Cours_Java | ESTB

112

Classes et objets: Les modificateurs (4)


Modificateurs de mthodes: Modificateur


private public

Signification
Elle est uniquement accessible depuis sa propre classe. Elle est accessible depuis toutes les classes. Elle est une mthode de classe. Il nest pas ncessaire de crer un objet pour lappeler. La mthode peut tre appele en utilisant le nom de la classe.

static

Pr. Mohamed NAIMI | Cours_Java | ESTB

113

Classes et objets: Les modificateurs (5)


Modificateurs de variables locales: Modificateur


final

Signification
Elle doit tre initialise et ne peut pas tre modifie.

Pr. Mohamed NAIMI | Cours_Java | ESTB

114

Classes et objets: Les constructeurs (1)


Les constructeurs sont des mthodes particulires permettent de crer des objets. Le corps dun constructeur contient gnralement les instructions qui permettent dinitialiser les champs de lobjet cr. A linstar dune mthode, un constructeur peut avoir:

Des modificateurs. Des paramtres. Des variables locales. Des instructions excutables.

Pr. Mohamed NAIMI | Cours_Java | ESTB

115

Classes et objets: Les constructeurs (2)


Contrairement une mthode, un constructeur se caractrise par les proprits suivantes:


1. 2. 3. 4.

Il porte le mme nom que sa classe. Il na aucun type de retour. Il est appel par loprateur new. Il peut appeler dautres constructeurs avec le mot cl this.

Pr. Mohamed NAIMI | Cours_Java | ESTB

116

Classes et objets: Les constructeurs (3)


Le constructeur par dfaut:


Le constructeur par dfaut a une liste de paramtres vide. Syntaxe gnrale de dfinition dun constructeur par dfaut: Modificateur Nom_Classe( ) { \\ Corps du constructeur } Remarques: Si la classe ne possde pas de constructeurs dclars explicitement, le compilateur dfinit un constructeur par dfaut public pour crer des objets. Ce constructeur est appel le constructeur par dfaut implicite. Dans ce cas, le constructeur par dfaut implicite initialise automatiquement tous les champs des objets avec leurs valeurs initiales par dfaut.
Pr. Mohamed NAIMI | Cours_Java | ESTB 117

Classes et objets: Les constructeurs (4)


Le constructeur de copie:

Le constructeur de copie est un constructeur dont le seul paramtre est une rfrence un objet de sa classe. Syntaxe gnrale de dfinition dun constructeur de copie: Modificateur Nom_Classe (Nom_Classe Nom_paramtre) { \\ Corps du constructeur } Remarque: Le constructeur de copie est gnralement utilis afin de dupliquer un objet existant de la classe.

Pr. Mohamed NAIMI | Cours_Java | ESTB

118

Classes et objets: Les constructeurs (5)


Java nous permet de crer dautres constructeurs qui sont diffrents du constructeur par dfaut et du constructeur de copie. Remarque:

Lorsque la classe contient un constructeur dfini explicitement, le constructeur par dfaut implicite est dtruit automatiquement.

Syntaxe de cration dun objet:


Nom_classe Nom_Objet = new Nom_Classe (Paramtres_Constructeur);

Pr. Mohamed NAIMI | Cours_Java | ESTB

119

Classes et objets: Appel de mthodes


En langage Java, les mthodes sont appeles par les objets. Lappel est soit implicite, soit explicite:

Lorsque lobjet appelant la mthode nest pas spcifi explicitement, la mthode est alors appele implicitement par linstance courante de sa classe. On parle dappel explicite lorsque la mthode est appele par un objet cr explicitement. Dans ce cas, lappel est ralis par la syntaxe suivante: Nom_Objet.Nom_Mthode(Paramtres_Effectifs);

Pr. Mohamed NAIMI | Cours_Java | ESTB

120

Classes et objets: Exemple rcapitulatif (1)


Problme:

Crer un programme Java permettant de dcrire les proprits mathmatiques dun point gomtrique dans le plan cartsien (reprsentation, abscisse, ordonne,).

Pr. Mohamed NAIMI | Cours_Java | ESTB

121

Classes et objets: Exemple rcapitulatif (2)


Solution:

Nous pouvons caractriser les points gomtriques en dfinissant une classe appele Point dont les objets reprsentent ces points dans le plan cartsien. Les mthodes de la classe Point vont spcifier le comportement des objets de type Point, cest--dire les proprits mathmatiques des points gomtriques reprsents par ces objets.

Pr. Mohamed NAIMI | Cours_Java | ESTB

122

Classes et objets: Exemple rcapitulatif (3)


public class Point { // Objets reprsentant un point dans le plan private double x, y; public Point( ) { // Constructeur par dfaut x = 1.0; y = -1.0; } public Point(Point p) { // Constructeur de copie x = p.x; y = p.y; } public Point(double a, double b) { // Un autre constructeur x = a; y = b; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

123

Classes et objets: Exemple rcapitulatif (4)


public double abscisse( ) { // Retourne labscisse de lobjet Point appelant return x; } public double ordonnee( ) { // Retourne lordonne de lobjet Point appelant return y; } public Point projectionX( ) { // Retourne la projection sur laxe des X return new Point(x, 0); } public Point projectionY( ) { // Retourne la projection sur laxe des Y return new Point(0, y); } public boolean equals(Point p) { // Vrifie si 2 points sont confondus dans le plan return (x == p.x && y == p.y); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

124

Classes et objets: Exemple rcapitulatif (5)


public static double distance(Point p1, Point p2) { // Retourne la distance entre 2 points double dx = p2.x - p1.x; double dy = p2.y - p1.y; return Math.sqrt(dx*dx + dy*dy); }

/** La mthode toString( ) est appele automatiquement par la mthode println( ). Elle permet celle-ci dafficher la valeur contenue dans lobjet pass en argument au lieu dafficher sa rfrence */ public String toString( ) { return new String("(" + x + ", " + y + ")"); } } // Fin de dfinition de la classe Point (fichier Point.java)

Pr. Mohamed NAIMI | Cours_Java | ESTB

125

Classes et objets: Exemple rcapitulatif (6)


Deux alternatives pour lexcution de la classe Point:


a) b)

Insertion de la mthode main( ) dans le fichier contenant la dfinition de la classe Point (Point.java). Cration dun autre fichier (TestPoint.java) dans le mme dossier (ou projet) o se trouve le fichier Point.java. Puis, dfinition de la classe TestPoint contenant la mthode main( ) dans le fichier TestPoint.java. Etapes de compilation et dexcution concernant la 2me alternative: Compilation du fichier Point.java. Compilation, puis excution du fichier TestPoint.java.

Remarque:

Pr. Mohamed NAIMI | Cours_Java | ESTB

126

Classes et objets: Exemple rcapitulatif (7)


public class TestPoint { public static void main(String[ ] args) { Point p = new Point(2.0, -3.0); System.out.println("p: " + p); System.out.println("p.abscisse( ): " + p. abscisse( )); System.out.println("p.ordonnee( ): " + p. ordonnee( )); Point q = new Point(7.0, 9.0); System.out.println("q: " + q); Point r = new Point(p); System.out.println("r: " + r); System.out.println("q.equals(p): " + q.equals(p)); System.out.println("r.equals(p): " + r.equals(p)); System.out.println("distance(p,q): " + Point.distance(p,q)); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

127

Classes et objets: Exemple rcapitulatif (8)


Sortie du programme TestPoint.java:
p: (2.0, -3.0) p.abscisse( ): 2.0 p.ordonnee( ): -3.0 q: (7.0, 9.0) r: (2.0, -3.0) q.equals(p): false r.equals(p): true distance(p,q): 13.0

Pr. Mohamed NAIMI | Cours_Java | ESTB

128

Composition et hritage

Composition (1)

La composition consiste crer une classe dont certains champs correspondent des objets dautres classes. Dans ce cas, on dit que:

Les objets utiliss dans la dfinition de la classe compose sont des objets composants. La classe compose est une agrgation des objets composants. Les objets de la classe String sont les plus couramment utiliss en tant quobjets composants des autres classes.

Remarque:

Pr. Mohamed NAIMI | Cours_Java | ESTB

130

Composition (2)

Exemple 1:

La classe NomComplet est une agrgation de 3 objets de la classe String (prenom, alias, nom). Cette classe possde:
a. b. c. d.

3 constructeurs (le constructeur par dfaut et 2 autres constructeurs). 3 accesseurs (donnerPrenom( ), donnerAlias( ), donnerNom( )). 3 mutateurs (modifierPrenom( ), modifierAlias( ), modifierNom( )). La mthode toString( ) qui permet laffichage de la chane contenant la valeur de lobjet pass en argument la mthode println( ).

Remarque: Le 2me constructeur possde 2 arguments qui font rfrences aux 2 champs prenom et nom. Ce constructeur omet donc le champ alias.

Pr. Mohamed NAIMI | Cours_Java | ESTB

131

Composition (3)

Exemple 1 (NomComplet.java):
public String prenom; public String alias; public String nom; public NomComplet( ) { // Constructeur par dfaut explicite } public NomComplet(String prenom, String nom) { // Constructeur omettant le champ alias this.prenom = prenom; this.nom = nom; } public NomComplet(String prenom, String alias, String nom) { // Constructeur initialisant tous les champs this(prenom,nom); this.alias = alias; }

public class NomComplet {

Pr. Mohamed NAIMI | Cours_Java | ESTB

132

Composition (4)

Exemple 1 (NomComplet.java) -Suite:


return prenom; } public String donnerAlias( ) { return alias; } public String donnerNom( ) { return nom; }

public String donnerPrenom( ) {

Pr. Mohamed NAIMI | Cours_Java | ESTB

133

Composition (5)

Exemple 1 (NomComplet.java) -Suite:


this.prenom = prenom; } public void modifierAlias(String alias) { this.alias = alias; } public void modifierNom(String nom) { this.nom = nom; }

public void modifierPrenom(String prenom) {

Pr. Mohamed NAIMI | Cours_Java | ESTB

134

Composition (6)

Exemple 1 (NomComplet.java) -Fin:


String s = new String( ); if (prenom != null) s += prenom + " "; if (alias != null) s += alias + " "; if (nom != null) s += nom + " "; return s; }

public String toString( ) {

Pr. Mohamed NAIMI | Cours_Java | ESTB

135

Composition (7)

Exemple 1 (TestNomComplet.java):
public static void main(String[ ] args) { NomComplet medecin = new NomComplet("Francis", "Harry Compton", "CRICK"); System.out.println(medecin + " a eu le prix Nobel de Mdecine en 1962."); System.out.println("Son prnom est " + medecin.donnerPrenom( )); System.out.println("Son alias est " + medecin.donnerAlias( )); System.out.println("Son nom est " + medecin.donnerNom( )); NomComplet ecrivain = new NomComplet("Najib", "MAHFOUD"); System.out.println(ecrivain + " a eu le prix Nobel de Littrature en 1988."); System.out.println("Son prnom est " +ecrivain.donnerPrenom( )); System.out.println("Son alias est " + ecrivain.donnerAlias( )); System.out.println("Son nom est " + ecrivain.donnerNom( )); }

class TestNomComplet {

Pr. Mohamed NAIMI | Cours_Java | ESTB

136

Composition (8)

Sortie du programme TestNomComplet.java:

Francis Harry Compton CRICK a eu le prix Nobel de Mdecine en 1962. Son prnom est Francis Son alias est Harry Compton Son nom est CRICK Najib MAHFOUD a eu le prix Nobel de Littrature en 1988. Son prnom est Najib Son alias est null Son nom est MAHFOUD

Pr. Mohamed NAIMI | Cours_Java | ESTB

137

Composition (9)

Exemple 2:

La classe Personne implmente lidentit dune personne donne (prnom, alias, nom, sexe, code identifiant). Pour cela, elle utilise un champ de type NomComplet pour pouvoir rutiliser le code de la classe NomComplet.

Pr. Mohamed NAIMI | Cours_Java | ESTB

138

Composition (10)

Exemple 2 (Personne.java):
public NomComplet nom_complet; public char sexe; // 'H' ou 'F' public String id; // ex. Numro de la CIN public Personne(NomComplet nom_complet, char sexe) { this.nom_complet = nom_complet; this.sexe = sexe; } public Personne(NomComplet nom_complet, char sexe, String id) { this.nom_complet = nom_complet; this.sexe = sexe; this.id = id; }

public class Personne {

Pr. Mohamed NAIMI | Cours_Java | ESTB

139

Composition (11)

Exemple 2 (Personne.java) -Suite:


return nom_complet; } public char donnerSexe( ) { return sexe; } public String donnerId( ) { return id; }

public NomComplet donnerNomComplet( ) {

Pr. Mohamed NAIMI | Cours_Java | ESTB

140

Composition (12)

Exemple 2 (Personne.java) -Fin:


this.id = id; } /** La mthode toString( ) permet galement dafficher la valeur du champ id si celui-ci possde une valeur concrte */ public String toString( ) { String s = new String(nom_complet + " (sexe: " + sexe); if (id != null) s += "; id: " + id; s += ")"; return s; }

public void modifierId(String id) {

Pr. Mohamed NAIMI | Cours_Java | ESTB

141

Composition (13)

Exemple 2 (TestPersonne.java):
public static void main(String[ ] args) { NomComplet nomPersonne1 = new NomComplet("Robert", "LEE"); Personne personne1 = new Personne(nomPersonne1, 'H'); System.out.println("Premire personne: " + personne1); personne1.nom_complet.modifierAlias("Edward"); System.out.println("Premire personne: " + personne1); Personne personne2 = new Personne(new NomComplet("Ann", "BAKER"), 'F'); System.out.println("Deuxime personne: " + personne2); personne2.modifierId("C053011736"); System.out.println("Deuxime personne: " + personne2); }

class TestPersonne {

Pr. Mohamed NAIMI | Cours_Java | ESTB

142

Composition (14)

Sortie du programme TestPersonne.java:

Premire personne: Robert LEE (sexe: M) Premire personne: Robert Edward LEE (sexe: M) Deuxime personne: Ann BAKER (sexe: F) Deuxime personne: Ann BAKER (sexe: F; id: C053011736)

Pr. Mohamed NAIMI | Cours_Java | ESTB

143

Composition: Les classes rcursives (1)


Une classe rcursive est une classe qui a certains champs qui font rfrences aux objets de la classe elle-mme. Utilit:

Les classes rcursives sont particulirement utiles pour crer des structures lies susceptibles de reprsenter des relations complexes. Exemple: Les arbres gnalogiques. Par exemple, la classe Personne peut tre modifie en lui ajoutant 2 champs de type Personne (pere, mere) ainsi que des mutateurs qui permettent dattribuer des valeurs aux champs ajouts. Voir la 2me version de la classe Personne (page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

144

Composition: Les classes rcursives (2)


Exemple (Personne.java) -2me version:

public class Personne { public NomComplet nom_complet; public char sexe; // 'H' ou 'F' public String id; // ex. Numro de la CIN public Personne mere; public Personne pere; public static final String deuxEspaces = " "; public static String tab = ""; // tab est initialis la chane vide (null) // Mmes constructeurs que ceux de la premire version // Mmes accesseurs donnerNomComplet( ), donnerSexe( ) et donnerId( ) que ceux de la premire version

Pr. Mohamed NAIMI | Cours_Java | ESTB

145

Composition: Les classes rcursives (3)


Exemple (Personne.java) -2me version -Suite:

/** Mutateur permettant dattribuer une valeur concrte au champ mere */ public void ajouterMere(Personne mere) { this.mere = mere; } /** Mutateur permettant dattribuer une valeur concrte au champ pere */ public void ajouterPere(Personne pere) { this.pere = pere; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

146

Composition: Les classes rcursives (4)


Exemple (Personne.java) -2me version -Fin:

/** La mthode toString( ) est modifie de telle sorte avoir un affichage conforme un arbre gnalogique */ public String toString( ) { String s = new String(nom_complet + " (" + sexe + ")"); if (id != null) s += "; id: " + id; s += "\n"; // ajoute un saut de ligne if (mere != null) { tab += deuxEspaces; // ajoute deux espaces vides s += tab + "Mre: " + mere; tab = tab.substring(2); // supprime deux espaces vides } if (pere != null) { tab += deuxEspaces; s += tab + "Pre: " + pere; tab = tab.substring(2); } return s; } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

147

Composition: Les classes rcursives (5)


Exemple (TestPersonne.java) -2me version:

class TestPersonne { public static void main(String[ ] args) { Personne ww = new Personne(new NomComplet("William", "Windsor"), 'H'); Personne cw = new Personne(new NomComplet("Charles", "Windsor"), 'H'); Personne ds = new Personne(new NomComplet("Diana", "Spencer"), 'F'); Personne es = new Personne(new NomComplet("Edward", "Spencer"), 'H'); Personne ew = new Personne(new NomComplet("Elizabeth", "Windsor"), 'F'); Personne pm = new Personne(new NomComplet("Philip", "Mountbatten"), 'H'); Personne eb = new Personne(new NomComplet("Elizabeth", "Bowes-Lyon"), 'F'); Personne gw = new Personne(new NomComplet("George", "Windsor"), 'H'); ww.ajouterPere(cw); ww.ajouterMere(ds); ds.ajouterPere(es); cw.ajouterMere(ew); cw.ajouterPere(pm); ew.ajouterMere(eb); ew.ajouterPere(gw); System.out.println(ww); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

148

Composition: Les classes rcursives (6)


Sortie du programmeTestPersonne.java -2me version:

William Windsor (H) Mre: Diana Spencer (F) Pre: Edward Spencer (H) Pre: Charles Windsor (H) Mre: Elizabeth Windsor (F) Mre: Elizabeth Bowes-Lyon (F) Pre: George Windsor (H) Pre: Philip Mountbatten (H)

Pr. Mohamed NAIMI | Cours_Java | ESTB

149

Hritage (1)

Lhritage consiste crer une nouvelle classe partir dune classe existante en lui ajoutant dautres fonctionnalits:

Nous disons alors que la nouvelle classe hrite de toutes les fonctionnalits de la classe existante. La nouvelle classe est dite alors une extension (ou sous-classe ou classe enfant) de la classe existante. La classe existante est dite alors une classe tendue (ou superclasse ou classe parent ou classe de base) de la nouvelle classe.

Pr. Mohamed NAIMI | Cours_Java | ESTB

150

Hritage (2)

Syntaxe:
Modificateurs Nom_Sous-classe extends Nom_Superclasse { // Corps de la sous-classe }

Tous les champs et mthodes de la superclasse sont alors considrs comme des membres de la sous-classe moins que certains de ces membres sont dclars comme private :

Sil existe des membres de la superclasse dclars comme private , alors la sous-classe ne peut pas accder de tels membres.

Pr. Mohamed NAIMI | Cours_Java | ESTB

151

Hritage (3)

Un membre dclar comme protected signifie que ce membre est accessible depuis sa classe et tous les sousclasses de sa classe. Lhritage sapplique aux champs et mthodes, mais pas aux constructeurs:

Une sous-classe doit avoir son propre constructeur puisque celui-ci doit toujours avoir le mme nom que sa classe.

Le constructeur de la sous-classe peut appeler le constructeur de la superclasse en utilisant le mot-cl super comme nom de ce dernier.

Pr. Mohamed NAIMI | Cours_Java | ESTB

152

Hritage (4)

Exemple 1:

Prenons la classe Point que nous avons dj dfinie (voir le chapitre concernant les classes et les objets) et modifions-la de faon dclarer ses champs x et y comme protected au lieu de private . Nous allons crer une sous-classe appele PointNomme de la classe Point. En plus des champs x et y hrits de la classe Point, la classe PointNomme possde un autre champ appel nom qui rfre au nom dun point. La classe PointNomme hrite galement des mthodes de sa superclasse Point et dfinit son propre constructeur et ses propres mthodes.

Pr. Mohamed NAIMI | Cours_Java | ESTB

153

Hritage (5)

Exemple 1 (PointNomme.java):
public class PointNomme extends Point { final private String nom; public PointNomme(double x, double y, String nom) { super(x, y); this.nom = nom; } public String nomPoint( ) { return nom; } public String toString( ) { return new String(nom + "(" + x + ", " + y + ")"); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

154

Hritage (6)

Exemple 1 (TestPointNomme.java):
public class TestPointNomme { public static void main(String[ ] args) { PointNomme p = new PointNomme(2.0, -3.0, "P"); System.out.println("p: " + p); System.out.println("p.nomPoint( ): " + p.nomPoint( )); System.out.println("p.abscisse( ): " + p.abscisse( )); PointNomme q = new PointNomme(2.0, -3.0, "Q"); System.out.println("q: " + q); System.out.println("q.equals(p): " + q.equals(p)); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

155

Hritage (7)

Sortie du programme TestPointNomme.java:


p: P(2.0, -3.0) p.nomPoint( ): P p.abscisse( ): 2.0 q: Q(2.0, -3.0) q.equals(p): true

Pr. Mohamed NAIMI | Cours_Java | ESTB

156

Hritage (8)

Exemple 2:

Lexemple suivant illustre le fait quune sous-classes ne peut pas accder aux champs private de sa superclasse:

class ClasseX { private int m; public String toString( ) { return new String("(" + m + ")"); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

157

Hritage (9)

Exemple 2 -Suite:
public class ClasseY extends ClasseX { private int n; public String toString( ) { return new String("(" + m + "," + n + ")"); // ERREUR: Accs interdit m } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

158

Hritage (10)

Exemple 2 -Fin:
class TestClasseY { public static void main(String[ ] args) { ClasseX x = new ClasseX( ); System.out.println("x = " + x); ClasseY y = new ClasseY( ); System.out.println("y = " + y); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

159

Hritage versus composition (1)


Lhritage est synonyme de spcialisation:

Une sous-classe se spcialise en hritant de tous les champs et de toutes les mthodes de sa superclasse auxquels elle ajoute de nouveaux champs et/ou de nouvelles mthodes. Lensemble qui regroupe tous les objets de la sous-classe est donc un sous-ensemble de lensemble regroupant tous les objets de la superclasse. Une classe peut avoir des champs dont les types correspondent dautres classes. Le cas chant, on dit que cette classe est une agrgation des classes qui la composent.

La composition est synonyme dagrgation:

Pr. Mohamed NAIMI | Cours_Java | ESTB

160

Hritage versus composition (2)


Distinction entre hritage et composition:


Hritage: est un . Composition: a un . Un point nomm (objet de la classe PointNomme) est un point (objet de type Point) qui, en plus, a un nom (objet de type String).

Exemple:

Pr. Mohamed NAIMI | Cours_Java | ESTB

161

Hritage: Les hirarchies de classes (1)


Une classe peut avoir plusieurs sous-classes. Exemple (hirarchie de classes):


Personne

Fonctionnaire

Ouvrier

Juge

Ingnieur

Maon

Jardinier

Pr. Mohamed NAIMI | Cours_Java | ESTB

162

Hritage: Les hirarchies de classes (2)


Dans une hirarchie de classes, on dit que la classe Y est un descendant de la classe X sil existe une squence de classes commenant par Y et finissant par X dans laquelle chaque classe est la superclasse de celle qui la prcde. Dans ce cas, on dit que la classe X est un anctre de la classe Y. Exemple:

Dans la hirarchie de lexemple prcdent, la classe Jardinier est un descendant de la classe Personne.

Pr. Mohamed NAIMI | Cours_Java | ESTB

163

Hritage: Les hirarchies de classes (3)


La classe Object:

Chaque classe Java est membre dune vaste hirarchie dhritage dont la racine est la classe Object. Chaque classe donc est une extension (directe ou indirecte) de la classe Object. Toutes les classes hritent ainsi des mthodes dfinies dans cette classe racine. Parmi ces mthodes, on retrouve la mthode equals( ) qui retourne true si et seulement les deux objets compars ont la mme rfrence. Il est prfrable donc que chaque classe spcifie sa propre mthode equals( ).

Pr. Mohamed NAIMI | Cours_Java | ESTB

164

Hritage: Les classes abstraites (1)


Une classe abstraite est une classe qui ne peut pas tre instancie. Une mthode abstraite est une mthode dclare uniquement avec sa signature; elle na aucune implmentation. Une mthode abstraite doit tre dclare au sein dune classe abstraite. Les classes et les mthodes sont dclares comme abstraites laide du modificateur abstract.

Pr. Mohamed NAIMI | Cours_Java | ESTB

165

Hritage: Les classes abstraites (2)


Remarque:

Pour pouvoir tre instancie, une sous-classe dune classe abstraite doit redfinir toutes les mthodes abstraites de sa superclasse; Si lune des mthodes nest pas redfinie de faon concrte, la sous-classe doit tre dclare comme abstract .

Pr. Mohamed NAIMI | Cours_Java | ESTB

166

Hritage: Les classes abstraites (3)


Exemple:

Lexemple suivant dfinit trois classes: La classe abstraite FormeGeometrique et les deux classes concrtes Circle et Carre. Les deux dernires sont des sous-classes de la premire.

public abstract class FormeGeometrique { public abstract Point centre( ); public abstract double diametre( ); public abstract double surface( ); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

167

Hritage: Les classes abstraites (4)


Exemple -Suite:
class Circle extends FormeGeometrique { private Point centre; private double rayon; Circle(Point centre, double rayon) { this.centre = centre; this.rayon = rayon; } public Point centre( ) { return centre; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

168

Hritage: Les classes abstraites (5)


Exemple -Suite:
public double diametre( ) { return 2*rayon; } public double surface( ) { return Math.PI*rayon*rayon; } public String toString( ) { return new String("{ centre = " + centre + ", rayon = " + rayon + "}"); } } // Fin de la classe Circle

Pr. Mohamed NAIMI | Cours_Java | ESTB

169

Hritage: Les classes abstraites (6)


Exemple -Suite:
class Carre extends FormeGeometrique { private Point coinNordOuest; private double cote; Carre(Point coinNordOuest, double cote) { this.coinNordOuest = coinNordOuest; this.cote = cote; } public Point centre( ) { x = coinNordOuest.abscisse( ) + cote/2; y = coinNordOuest.ordonnee( ) - cote/2; return new Point(x, y); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

170

Hritage: Les classes abstraites (7)


Exemple -Suite:
public double diametre( ) { return cote*Math.sqrt(2.0); } public double surface( ) { return cote*cote; } public String toString( ) { return new String("{coinNordOuest = " + coinNordOuest + ", cote = " + cote + "}"); } } // Fin de la classe Carre

Pr. Mohamed NAIMI | Cours_Java | ESTB

171

Hritage: Les classes abstraites (8)


Exemple -Suite:
class TestCircle { public static void main(String[ ] args) { Circle circle = new Circle(new Point(3.0,1.0),2.0); System.out.println("Le circle est " + circle); System.out.println("Son centre est " + circle.centre( )); System.out.println("Son diamtre est " + circle.diametre( )); System.out.println("Sa surface est " + circle.surface( )); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

172

Hritage: Les classes abstraites (9)


Exemple -Suite:
Sortie du programme TestCircle.java:
Le circle est { centre = (3.0, 1.0), rayon = 2.0} Son centre est (3.0, 1.0) Son diamtre est 4.0 Sa surface est 12.566370614359172

Pr. Mohamed NAIMI | Cours_Java | ESTB

173

Hritage: Les classes abstraites (10)


Exemple -Suite:
class TestCarre { public static void main(String[ ] args) { Carre carre = new Carre(new Point(1.0,5.0),3.0); System.out.println("Le carr est " + carre); System.out.println("Son centre est " + carre.centre( )); System.out.println("Son diamtre est " + carre.diametre( )); System.out.println("Sa surface est " + carre.surface( )); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

174

Hritage: Les classes abstraites (11)


Exemple -Fin:
Sortie du programme TestCarre.java:
Le carr est {coinNordOuest = (1.0, 5.0), cote = 3.0} Son centre est (2.0, 4.0) Son diamtre est 4.242640687119286 Sa surface est 9.0

Pr. Mohamed NAIMI | Cours_Java | ESTB

175

Hritage: Les classes abstraites (12)


abstract versus final:


Une classe dclare comme final ne peut pas tre tendue. Une mthode dclare comme final dans une classe ne peut pas tre remplace dans les sous-classe de sa classe. Au contraire, une mthode dclare comme abstract est destine tre remplace dans chaque sous-classe de sa classe.

Pr. Mohamed NAIMI | Cours_Java | ESTB

176

Hritage: Le polymorphisme (1)


Soient ClasseX une classe et ClasseY une sous-classe de ClasseX. Une instance y de ClasseY est globalement identique une instance x de ClasseX, mais elle a des donnes et des fonctionnalits supplmentaires. Cependant cette rgle a des limites:

Si les deux classes dclarent une mthode g( ) avec la mme signature, linstruction y.g( ) appelle la mthode dclare dans ClasseY, et non celle dclare dans ClasseX. Dans ce cas, on dit que la mthode g( ) de ClasseY remplace celle de ClasseX.

Pr. Mohamed NAIMI | Cours_Java | ESTB

177

Hritage: Le polymorphisme (2)


Rgles de remplacement de mthodes:


a) b)

La mthode de remplacement doit avoir le mme entte (mme nom et mme signature) que la mthode remplace. La mthode de remplacement doit avoir un accs aussi important que la mthode remplace. Par consquent, une mthode public peut uniquement tre remplace par une autre mthode public .

Le remplacement des champs est similaire au remplacement des mthodes;

Les dclarations sont identiques, mais elles sont dfinies dans des classes diffrentes (la superclasse et la sous-classe).

Pr. Mohamed NAIMI | Cours_Java | ESTB

178

Hritage: Le polymorphisme (3)


Le polymorphisme consiste au fait quune instance y dune sous-classe ClasseY peut appeler une mthode h( ) de la superclasse ClasseX. Deux cas se prsentent:
a) b)

La mthode h( ) nest pas redfinie (nest pas remplace) dans ClasseY. Dans ce cas, lappel peut se faire de faon normale: y.h( ); La mthode h( ) est redfinie (remplace) dans ClasseY. Dans ce cas, on utilise le mot-cl super pour appeler la mthode h( ) de la superclasse ClasseX: super.h( );

Pr. Mohamed NAIMI | Cours_Java | ESTB

179

Hritage: Le polymorphisme (4)


Exemple:

Lexemple suivant dfinit une classe Etudiant qui est une extension de la classe Personne que nous avons dj vue auparavant.

class Etudiant extends Personne { protected double moyenne; // Moyenne des notes Etudiant(NomComplet nom, char sexe, double moyenne) { super(nom, sexe); } // appelle le constructeur de la superclasse Personne this.moyenne = moyenne;

Pr. Mohamed NAIMI | Cours_Java | ESTB

180

Hritage: Le polymorphisme (5)


Exemple -Suite:
double moyenne( ) { return moyenne; } public String toString( ) { String s; s = new String(super.toString( )); s += "\n\tMoyenne: return s; } } // Fin de la classe Etudiant " + moyenne; // appelle toString( ) de la classe Personne

Pr. Mohamed NAIMI | Cours_Java | ESTB

181

Hritage: Le polymorphisme (6)


Exemple -Fin:
class TestEtudiant { public static void main(String[ ] args) { NomComplet nomEtudiante = new NomComplet("Ann", "Baker"); Etudiant etudiante = new Etudiant(nomEtudiante, 'F', 13.5); System.out.println("Etudiante: " + etudiante); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

182

Hritage: Le polymorphisme (7)


Sortie du programme TestEtudiant.java:


Etudiante: Ann Baker (sexe: F) Moyenne: 13.5

Pr. Mohamed NAIMI | Cours_Java | ESTB

183

Interfaces, paquetages et encapsulation

Interfaces (1)

Une interface est une classe dont la dfinition ne peut comporter que:
a) b)

Des constantes publiques (champs dclars comme public final ). Des enttes de mthodes (dclarations de mthodes sans corps).
Na pas de constructeurs. Ne peut pas tre instancie. Peut tre implmente par plusieurs classes. Ne peut pas implmenter une autre interface. Ne peut pas tendre une classe. Peut tendre plusieurs autres interfaces.

Une interface possde galement les proprits suivantes:


Pr. Mohamed NAIMI | Cours_Java | ESTB

185

Interfaces (2)

Syntaxe de dclaration:
interface Nom_Interface { // Dclarations de constantes // Enttes de mthodes }

Une interface a pour objectif de spcifier un ensemble de directives destines aux classes dimplmentation.

Pr. Mohamed NAIMI | Cours_Java | ESTB

186

Interfaces (3)

Syntaxe de dfinition dune classe dimplmentation:


class Nom_Classe implements interface Nom_Interface { // Dclarations de champs // Dfinitions de constructeurs // Dfinitions des mthodes de linterface Nom_Interface // Dfinitions de mthodes supplmentaires }

Pr. Mohamed NAIMI | Cours_Java | ESTB

187

Interfaces (4)

En Java, un type est soit une interface, soit une classe, soit un tableau, soit un type de base:

Les variables (champs ou variables locales) ou les paramtres peuvent tre dclars avec ces quatre types. Lorsquune classe implmente une interface, la classe est alors considre comme sous-type de linterface qui est, son tour, qualifie comme supertype de la classe. De mme, lorsquune classe (resp. une interface) tend une autre classe (resp. une autre interface), la premire est alors considre comme sous-type de la seconde qui est, son tour, qualifie comme supertype de la premire.
Pr. Mohamed NAIMI | Cours_Java | ESTB 188

Remarque:

Interfaces: Linterface Comparable (1)


Linterface Comparable est dfinie dans les bibliothques standard de Java (API), plus prcisment dans le paquetage java.lang. Linterface Comparable comporte la dclaration dune seule mthode compareTo( ) dcrivant la fonctionnalit de comparaison dobjets en vue de les trier.

Pr. Mohamed NAIMI | Cours_Java | ESTB

189

Interfaces: Linterface Comparable (2)


Dfinition de linterface Comparable:


public interface Comparable { public int compareTo(Object object); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

190

Interfaces: Linterface Comparable (3)


Contrat de linterface Comparable: Valeur renvoye


x.compareTo(y) < 0 x.compareTo(y) = = 0 x.compareTo(y) > 0

Interprtation
x<y x est gal y x>y

Pr. Mohamed NAIMI | Cours_Java | ESTB

191

Interfaces: Linterface Comparable (4)


La classe String fait partie des classes qui implmentent linterface Comparable:

Comparaison lexicographique des chanes en vue de leur organisation par ordre alphabtique. Le programme CompareChaines.java illustre la comparaison de chanes (voir page suivante).

Exemple 1:

Pr. Mohamed NAIMI | Cours_Java | ESTB

192

Interfaces: Linterface Comparable (5)


Exemple 2 (CompareChaines.java):
public class CompareChaines { public static void main(String[ ] args) { String s = "COMPARER"; System.out.println("s: " + s); System.out.println("s.compareTo(s): " + s.compareTo(s)); System.out.println("s.compareTo(\"COMPARE\"): " + s.compareTo("COMPARE")); System.out.println("s.compareTo(\"COMPTER\"): " + s.compareTo("COMPTER")); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

193

Interfaces: Linterface Comparable (6)


Sortie du programme CompareChaines.java:


s: COMPARER s.compareTo(s): 0 s.compareTo("COMPARE"): 1 s.compareTo("COMPTER"): -19

Pr. Mohamed NAIMI | Cours_Java | ESTB

194

Interfaces: Linterface Comparable (7)


Exemple 2:

Ce deuxime exemple indique comment une classe dfinie par lutilisateur peut implmenter linterface Comparable. La classe ComparePoints, dfinie dans cet exemple, tend la classe Point et implmente linterface Comparable. Etant donns deux points P1 et P2, la classe ComparePoints spcifie le corps de la mthode compareTo( ) de la faon suivante:

Si P1.x < P2.x alors P1 < P2. Si P1.x = = P2.x et P1.y < P2.y alors P1 < P2. Si P1.x = = P2.x et P1.y = = P2.y alors P1 est gal P2. P1 > P2 dans les autres cas.

Pr. Mohamed NAIMI | Cours_Java | ESTB

195

Interfaces: Linterface Comparable (8)


Exemple 2 Suite (ComparePoints.java):


public class ComparePoints extends Point implements Comparable { public ComparePoints(int x, int y) { super(x, y); } public int compareTo(Object object) { if (this == object) return 0; // Mme objet if (!(object instanceof ComparePoints)) throw new IllegalArgumentException( ); ComparePoints cetObjet = (ComparePoints)object; if (this.x < cetObjet.x) return -1; if (this.x == cetObjet.x) if (this.y < cetObjet.y) return -1; else if (this.y == cetObjet.y) return 0; return 1; } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

196

Interfaces: Linterface Comparable (9)


Exemple 2 Fin (TestComparePoints.java):


public class TestComparePoints { public static void main(String[ ] args) { Comparable p1 = new ComparePoints(2.0, 4.0); Comparable p2 = new ComparePoints(2.0, -1.0); Comparable p3 = new ComparePoints(3.0, 1.0); System.out.println("p1: " + p1); System.out.println("p2: " + p2); System.out.println("p3: " + p3); System.out.println("p1.compareTo(p1): " + p1.compareTo(p1)); System.out.println("p1.compareTo(p2): " + p1.compareTo(p2)); System.out.println("p1.compareTo(p3): " + p1.compareTo(p3)); System.out.println("p2.compareTo(p3): " + p2.compareTo(p3)); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

197

Interfaces: Linterface Comparable (10)


Sortie du programme TestComparePoints.java:


p1: (2.0, 4.0) p2: (2.0, -1.0) p3: (3.0, 1.0) p1.compareTo(p1): 0 p1.compareTo(p2): 1 p1.compareTo(p3): -1 p2.compareTo(p3): -1

Pr. Mohamed NAIMI | Cours_Java | ESTB

198

Interfaces: Types et Polymorphisme (1)


Les sous-types prennent en charge le polymorphisme des objets:

Si lobjet x est de type T2 et T2 est un sous-type de T1, alors x est galement de type T1. Ainsi, lobjet x est la fois de type T2 et T1. Cet objet a donc plusieurs formes. Si T2 est un sous-type (resp. supertype) de T1, alors T2 [ ] est un sous-type (resp. supertype) de T1 [ ].

Remarque:

Pr. Mohamed NAIMI | Cours_Java | ESTB

199

Interfaces: Types et Polymorphisme (2)


Exemple 1:

Le programme TestComparePoints.java de lexemple prcdent illustre le polymorphisme des objets:


Les objets p1, p2 et p3 sont dclars avec le type Comparable. Mais, ils sont instancis comme des objets de la classe ComparePoints qui est un sous-type de linterface Comparable.

Pr. Mohamed NAIMI | Cours_Java | ESTB

200

Interfaces: Types et Polymorphisme (3)


Exemple 2:

Le programme suivant (Polymorphe.java) illustre le cas dun polymorphisme avec des variables locales et des paramtres de mthodes (voir page suivante).

Pr. Mohamed NAIMI | Cours_Java | ESTB

201

Interfaces: Types et Polymorphisme (4)


Exemple 2 (Polymorphe.java) -Suite:


public class Polymorphe { public Polymorphe( ) { Comparable[ ] s = { "TUNISIE", "MAROC", "EGYPTE", "LIBAN" }; print(s); sort(s); print(s); s[0] = new ComparePoints(3.0, 5.0); s[1] = new ComparePoints(2.0, 4.0); s[2] = new ComparePoints(2.0, -1.0); s[3] = new ComparePoints(3.0, 1.0); print(s); sort(s); print(s); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

202

Interfaces: Types et Polymorphisme (5)


Exemple 2 (Polymorphe.java) Suite:


public static void print(Object[ ] a) { if (a == null || a.length == 0) return; System.out.print("{ " + a[0]); for (int i=1; i<a.length; i++) System.out.print(", " + a[i]); System.out.println(" }"); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

203

Interfaces: Types et Polymorphisme (6)


Exemple 2 (Polymorphe.java) Fin:


void sort(Comparable[ ] a) { for (int i = 1; i < a.length; i++) { Comparable c = a[i]; int j = i; for (j = i; j > 0 && a[j-1].compareTo(c) > 0; j--) a[j] = a[j-1]; a[j] = c; } } public static void main(String[ ] args) { new Polymorphe( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

204

Interfaces: Types et Polymorphisme (7)


Sortie du programme Polymorphe.java:


{ TUNISIE, MAROC, EGYPTE, LIBAN } { EGYPTE, LIBAN, MAROC, TUNISIE } { (3.0, 5.0), (2.0, 4.0), (2.0, -1.0), (3.0, 1.0) } { (2.0, -1.0), (2.0, 4.0), (3.0, 1.0), (3.0, 5.0) }

Pr. Mohamed NAIMI | Cours_Java | ESTB

205

Interfaces versus classes abstraites (1)


Comparaison entre interfaces & classes abstraites: Interface


Ne peut pas tre instancie Ne peut pas implmenter des mthodes Ne peut pas inclure des constructeurs

Classe abstraite
Ne peut pas tre instancie Peut implmenter des mthodes Peut inclure des constructeurs

Pr. Mohamed NAIMI | Cours_Java | ESTB

206

Interfaces versus classes abstraites (2)


Utilisation dune interface:


Toute implmentation du contrat est remise plus tard. Trop restrictive dans certains cas. Possibilit dune implmentation partielle du code. Tout le code commun entre les sous-classes concrtes peut tre implment une seule fois dans la superclasse abstraite.

Utilisation dune classe abstraite:


Pr. Mohamed NAIMI | Cours_Java | ESTB

207

Paquetages (1)

Un paquetage (en anglais, package) est un dossier regroupant un ensemble de classes qui peuvent avoir, ventuellement, des liens entre elles. Pour ajouter une classe nomme MaClasse un paquetage nomm monpaquetage:
a) b)

Crer dabord un dossier nomm monpaquetage dans le rprtoire courant. Ajouter ensuite linstruction suivante au dbut du fichier contenant la dfinition de MaClasse: package monpaquetage;

Pr. Mohamed NAIMI | Cours_Java | ESTB

208

Paquetages (2)

Si la classe MaClasse est utilise par une autre classe nomme UneClasse appartenant un autre paquetage ou un autre dossier, linstruction suivante rend MaClasse visible par UneClasse:
import monpaquetage.MaClasse;

Remarque:

Linstruction ci-dessus doit tre ajoute au dbut du fichier contenant la dfinition de la classe UneClasse. Cette instruction suppose que le dossier monpaquetage et le dossier contenant UneClasse se trouvent tous les deux dans le rpertoire courant.

Pr. Mohamed NAIMI | Cours_Java | ESTB

209

Paquetages (3)

Pour importer toutes les classes appartenant un paquetage donn: import Nom_Paquetage.* ; Les paquetages peuvent tre organiss de faon hirarchique:

Un paquetage Paq0 peut contenir un autre paquetage (souspaquetage) Paq1 qui peut, son tour, contenir un autre paquetage (sous-paquetage) Paq2 et ainsi de suite. Dans ce cas, il faut respecter la hirarchie des paquetages pour pouvoir les utiliser. La hirarchie doit tre galement respecte lorsque les paquetages sont contenus dans des dossiers.

Pr. Mohamed NAIMI | Cours_Java | ESTB

210

Paquetages (4)

Illustration:

Pour importer toutes les classes appartenant au paquetage Paq1: import Paq0.Paq1.* ; Pour importer une classe nomme CetteClasse appartenant au paquetage Paq2: import Paq0.Paq1.Paq2.CetteClasse ;

Pr. Mohamed NAIMI | Cours_Java | ESTB

211

Paquetages (5)

Paquetages accessibles par dfaut:

Le paquetage par dfaut qui contient toutes les classes appartenant au rpertoire courant et pour lesquelles aucun paquetage na t spcifi explicitement. Le paquetage java.lang qui contient un certain nombre de classes dusage gnral comme les classes System et Math.

Pr. Mohamed NAIMI | Cours_Java | ESTB

212

Encapsulation (1)

Lencapsulation est la facult de distinguer les services offerts (interface) des dtails dimplmentation de ces services (classes dimplmentation). Motivations:

Prservation de la scurit des donnes:


Les donnes prives ne peuvent tre lues ou modifis que par des accesseurs ou mutateurs rendus publiques. Mcanismes de vrification et de validation des valeurs attribues aux variables susceptibles dtre modifies.

Prservation de lintgrit des donnes:


Pr. Mohamed NAIMI | Cours_Java | ESTB

213

Encapsulation (2)

On utilise les modificateurs daccs pour prciser le niveau daccessibilit (ou de visibilit) dune variable ou dune mthode. En Java, il y a quatre niveaux de visibilit:

public. private. protected. par dfaut : aucun modificateur daccs nest spcifi.

Pr. Mohamed NAIMI | Cours_Java | ESTB

214

Encapsulation (3)

Rgles de visibilit:
Modificateur daccs private protected public par dfaut Toutes les classes

Classe

Paquetage

Sous-classes

Pr. Mohamed NAIMI | Cours_Java | ESTB

215

Collections

Collections (1)

Une collection est un objet qui contient dautres objets. Les objets contenus dans une collection sont qualifis dlments de collection. Le paquetage java.util dfinit trois types gnriques de collection:

List: Squence dlments. Set: Collection non structure dlments distincts. Map: Collection non structure de paires dlments (cl, valeur) avec des cls uniques.

Pr. Mohamed NAIMI | Cours_Java | ESTB

217

Collections (2)

Les deux premiers types de collection (List et Set) sont les plus utiliss dans la pratique. Ces deux types de collection sont dfinis comme des interfaces qui sont tendues et implmentes dans le framework de collections Java JCF (Java Collections Framework).

Pr. Mohamed NAIMI | Cours_Java | ESTB

218

Collections (3)

Partie du JCF qui concerne les types List et Set:


Object AbstractCollection AbstractList AbstractSequentialList LinkedList ArrayList AbstractSet HashSet LinkedHashSet TreeSet SortedSet Set Collection List

Pr. Mohamed NAIMI | Cours_Java | ESTB

219

Collections (4)

JCF implmente chaque interface avec plusieurs structures de donnes diffrentes:


Les tableaux indexs sont utiliss par les classes dimplmentation ArrayList et HashSet. Les listes linaires lies sont utilises par la classe LinkedList. Les arbres binaires lis sont utiliss par la classe TreeSet. Les tableaux hybrides (indexs et lis) sont utiliss par la classe LinkedHashSet.

Pr. Mohamed NAIMI | Cours_Java | ESTB

220

Collections: Linterface Collection (1)


Linterface Collection est le supertype des deux types gnriques List et Set. Elle spcifie toutes les mthodes communes toutes les collections gnriques:

Accesseurs: contains( ), containsAll( ), isEmpty( ), size( ), toArray( ), toArray(Object [ ]). Mutateurs: add( ), addAll( ), clear( ), remove( ), removeAll( ), retainAll( ). Remplacements de mthodes de la classe Object: equals( ), hashCode( ). Mthode permettant de parcourir une collection: iterator( ).

Pr. Mohamed NAIMI | Cours_Java | ESTB

221

Collections: Linterface Collection (2)


Dfinition complte:
public interface Collection { public boolean add(Object object); public boolean addAll(Collection collection); public void clear( ); public boolean contains(Object object); public boolean containsAll(Collection collection); public boolean equals(Object object); public int hashCode( );

Pr. Mohamed NAIMI | Cours_Java | ESTB

222

Collections: Linterface Collection (3)


Dfinition complte -Suite:


public boolean isEmpty( ); public Iterator iterator( ); public boolean remove(Object object); public boolean removeAll(Collection collection); public boolean retainAll(Collection collection); public int size( ); public Object[ ] toArray( ); public Object[ ] toArray(Object[ ] objects); } // Fin de dfinition de linterface Collection

Pr. Mohamed NAIMI | Cours_Java | ESTB

223

Collections: Les listes (1)


Une liste est un conteneur squentiel capable dinsrer et de supprimer des lments localement de faon constante. En Java, les mthodes permettant de grer les listes sont dclares dans linterface List qui est une sous-interface de linterface Collection. Ces mthodes sont implmentes dans la classe AbstractList et ses extensions (AbstractSequentialList, LinkedList et ArrayList).

Pr. Mohamed NAIMI | Cours_Java | ESTB

224

Collections: Les listes (2)


Exemple:
import java.util.*; public class TestListe { public static void main(String[ ] args) { Collection liste = new ArrayList( ); liste.add("MAROC"); liste.add("ALGERIE"); liste.add("TUNISIE"); liste.add("MORITANIE"); System.out.println("Liste: " + liste); System.out.println("liste.contains(\"TUNISIE\"): " + liste.contains("TUNISIE"));

Pr. Mohamed NAIMI | Cours_Java | ESTB

225

Collections: Les listes (3)


Exemple -Suite:
System.out.println("liste.contains(\"LYBIE\"): " + liste.contains("LYBIE")); Object[ ] a = liste.toArray( ); liste.remove("TUNISIE"); System.out.println("Liste: " + liste); System.out.println("liste.contains(\"TUNISIE\"): " + liste.contains("TUNISIE")); System.out.println("liste.size( ): " + liste.size( )); System.out.println("a[2]: " + a[2]); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

226

Collections: Les listes (4)


Sortie du programme TestListe.java:


Liste: [MAROC, ALGERIE, TUNISIE, MORITANIE] liste.contains("TUNISIE"): true liste.contains("LYBIE"): false Liste: [MAROC, ALGERIE, MORITANIE] liste.contains("TUNISIE"): false liste.size( ): 3 a[2]: TUNISIE

Pr. Mohamed NAIMI | Cours_Java | ESTB

227

Collections: Les tableaux et les listes (1)


La mthode asList( ) de la classe Arrays (paquetage java.util) permet de gnrer une liste (objet de type List) qui contient les lments du tableau qui lui est pass en argument.

Pr. Mohamed NAIMI | Cours_Java | ESTB

228

Collections: Les tableaux et les listes (2)


Exemple:
import java.util.*; public class TestAsList { public static void main(String[ ] args) { String[ ] t = {"Salut","Bonjour","Bonsoir"}; Collection c = Arrays.asList(t); print(t); System.out.println(c); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

229

Collections: Les tableaux et les listes (3)


Exemple -Suite:
public static void print(String[ ] a) { for (int i=0; i<a.length; i++) System.out.print(a[i] + " "); System.out.println( ); } } // Fin de dfinition de la classe TestAsList

Pr. Mohamed NAIMI | Cours_Java | ESTB

230

Collections: Les tableaux et les listes (4)


Sortie du programme TestAsList:


Salut Bonjour Bonsoir [Salut, Bonjour, Bonsoir]

Pr. Mohamed NAIMI | Cours_Java | ESTB

231

Collections: Les ensembles (1)


Un ensemble est une collection dlments distincts. En Java, les mthodes permettant de grer les ensembles sont dclares dans linterface Set qui est une sousinterface de linterface Collection. Ces mthodes sont implmentes dans la classe AbstractSet et ses extensions (HashSet, LinkedHashSet et TreeSet).

Pr. Mohamed NAIMI | Cours_Java | ESTB

232

Collections: Les ensembles (2)


Linterface Collection spcifie quatre mthodes destines limplmentation des oprations classiques de la thorie des ensembles:
a) b) c) d)

x.addAll(y) x = x y. x.removeAll(y) x = x - y. x.retainAll(y) x = x y. x.containsAll(y) renvoie true si et seulement si y x.

Pr. Mohamed NAIMI | Cours_Java | ESTB

233

Collections: Les ensembles (3)


Exemple:
public class TestEnsemble { public static void main(String[ ] args) { Set A = new HashSet( ); A.add("SUISSE"); A.add("CANADA"); A.add("FRANCE"); A.add("ITALIE"); System.out.println("A: " + A); Set B = new HashSet(A); System.out.println("B: " + B); Set C = new HashSet( ); C.add("SUISSE"); C.add("JAPAN"); C.add("CHINE"); C.add("AUSTRALIE");

Pr. Mohamed NAIMI | Cours_Java | ESTB

234

Collections: Les ensembles (4)


Exemple -Suite:
System.out.println("C: " + C); System.out.println("B.containsAll(C): " + B.containsAll(C)); System.out.println("B.addAll(C): " + B.addAll(C)); System.out.println("B: " + B); System.out.println("B.containsAll(C): " + B.containsAll(C)); System.out.println("B.removeAll(C): " + B.removeAll(C)); System.out.println("B: " + B); System.out.println("A.retainAll(C): " + A.retainAll(C)); System.out.println("A: " + A); System.out.println("C: " + C); } } // Fin de dfinition de la classe TestEnsemble

Pr. Mohamed NAIMI | Cours_Java | ESTB

235

Collections: Les ensembles (5)


Sortie du programme TestEnsemble.java:


A: [ITALIE, CANADA, SUISSE, FRANCE] B: [ITALIE, CANADA, SUISSE, FRANCE] C: [CHINE, JAPAN, AUSTRALIE, SUISSE] B.containsAll(C): false B.addAll(C): true B: [ITALIE, CHINE, JAPAN, CANADA, AUSTRALIE, SUISSE, FRANCE] B.containsAll(C): true B.removeAll(C): true B: [ITALIE, CANADA, FRANCE] A.retainAll(C): true A: [SUISSE] C: [CHINE, JAPAN, AUSTRALIE, SUISSE]

Pr. Mohamed NAIMI | Cours_Java | ESTB

236

Collections : Les itrateurs (1)


Un itrateur est un objet qui donne accs aux lments dun objet Collection. Les capacits relles dun itrateur sont spcifies dans linterface Iterator du paquetage java.util:
public interface Iterator { public boolean hasNext( ); public Object next( ); public void remove( ); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

237

Collections : Les itrateurs (2)


Mthode next( ): renvoie llment courant de la collection, puis passe llment suivant. Mthode hasNext( ): renvoie true si la mthode next( ) peut tre appele nouveau sans atteindre la fin de la collection. Mthode remove( ): supprime le dernier lment auquel accde next( ).

Pr. Mohamed NAIMI | Cours_Java | ESTB

238

Collections : Les itrateurs (3)


Remarque:

La mthode remove( ) laisse parfois litrateur dans un tat non dfini susceptible dtre corrig uniquement par un appel de la mthode next( ).

Un itrateur est obtenu laide dun appel la mthode iterator( ) de la collection. La mthode iterator( ) renvoie un itrateur qui est initialis au dbut de la collection.

Pr. Mohamed NAIMI | Cours_Java | ESTB

239

Collections : Les itrateurs (4)


Exemple:
import java.util.*; public class TestIterateur { public static void main(String[ ] args) { Set A = new TreeSet( ); A.add("SUISSE"); A.add("CANADA"); A.add("FRANCE"); A.add("ITALIE"); A.add("JAPAN"); A.add("CHINE"); A.add("AUSTRALIE");

Pr. Mohamed NAIMI | Cours_Java | ESTB

240

Collections : Les itrateurs (5)


Exemple -Suite:
System.out.println("A: " + A); Iterator it = A.iterator( ); System.out.println("it.next( ): " + it.next( )); System.out.println("it.next( ): " + it.next( )); System.out.println("it.next( ): " + it.next( )); System.out.println("it.remove( ): "); it.remove( ); System.out.println("A: " + A); System.out.println("it.next( ): " + it.next( )); System.out.println("it.remove( ): "); it.remove( );

Pr. Mohamed NAIMI | Cours_Java | ESTB

241

Collections : Les itrateurs (6)


Exemple -Fin:
System.out.println("A: " + A); System.out.println("it.next( ): " + it.next( )); System.out.println("it.next( ): " + it.next( )); System.out.println("it.remove( ): "); it.remove( ); System.out.println("A: " + A); System.out.println("it.hasNext( ): " + it.hasNext( )); System.out.println("it.next( ): " + it.next( )); System.out.println("it.hasNext( ): " + it.hasNext( )); } } Fin de dfinition de la classe TestIterateur

Pr. Mohamed NAIMI | Cours_Java | ESTB

242

Collections : Les itrateurs (7)


Sortie du programme TestIterateur.java:


A: [AUSTRALIE, CANADA, ITALIE, FRANCE, JAPAN, CHINE, SUISSE] it.next( ): AUSTRALIE it.next( ): CANADA it.next( ): ITALIE it.remove( ): A: [AUSTRALIE, CANADA, FRANCE, JAPAN, CHINE, SUISSE] it.next( ): FRANCE it.remove( ): A: [AUSTRALIE, CANADA, JAPAN, CHINE, SUISSE] it.next( ): JAPAN it.next( ): CHINE it.remove( ): A: [AUSTRALIE, CANADA, JAPAN, SUISSE] it.hasNext( ): true it.next( ): SUISSE it.hasNext( ): false

Pr. Mohamed NAIMI | Cours_Java | ESTB

243

Collections : Les itrateurs (8)


Litrateur qui parcourt une collection procde comme lindex qui fournit un accs direct un tableau. Les collections peuvent tre parcourues dans une boucle for:
for ( Iterator it = collection.iterator( ); it.hasNext( ); ) System.out.print( it.next( ) + " " );

Pr. Mohamed NAIMI | Cours_Java | ESTB

244

Exceptions

Exceptions (1)

Une exception est une erreur qui a lieu au cours de lexcution dun programme. Une exception Java est une instance de la classe Throwable ou de lune de ses sous-classes:

Instanciation explicite laide dune instruction throw dans le programme. Instanciation implicite par lenvironnement dexcution lorsque celui-ci est incapable dexcuter une instruction dans le programme.

Pr. Mohamed NAIMI | Cours_Java | ESTB

246

Exceptions (2)

Une exception lance peut tre attrape par la clause catch dune instruction try. Lutilisation dune instruction try pour attraper une exception est qualifie de gestion des exceptions.

Pr. Mohamed NAIMI | Cours_Java | ESTB

247

Exceptions (3)

Il existe deux types dexceptions:


1.

2.

Exceptions non vrifies: celles qui peuvent tre vites en amliorant le code. Ce sont des instances des classes Error et RuntimeException ainsi que de leurs extensions. Exceptions vrifies: celles qui sont vrifies par le compilateur avant lexcution du programme. Les instructions qui les lancent doivent tre soit insres dans une instruction try, soit dclares dans lentte de la mthode courante.

Pr. Mohamed NAIMI | Cours_Java | ESTB

248

Exceptions non vrifies (1)


Exemple 1 (exception non vrifie implicite):


class ExceptionImplicite { public static void main(String[ ] args) { int n = 4/0; System.out.println("Attention! Division par 0."); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

249

Exceptions non vrifies (2)


Sortie du programme ExceptionImplicite.java:


Exception in thread "main" java.lang.ArithmeticException: / by zero at ExceptionImplicite.main(ExceptionImplicite.java:14)

Pr. Mohamed NAIMI | Cours_Java | ESTB

250

Exceptions non vrifies (3)


Exemple 2 (exception non vrifie explicite):


class ExceptionExplicite { static double sqrt(double x) { if (x < 0) throw new IllegalArgumentException( ); return Math.sqrt(x); } public static void main(String[ ] args) { System.out.println(sqrt(-25)); System.out.println("Fin de la mthode main( )."); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

251

Exceptions non vrifies (4)


Sortie du programme ExceptionExplicite.java:


Exception in thread "main" java.lang.IllegalArgumentException at ExceptionExplicite.sqrt(ExceptionExplicite.java:13) at ExceptionExplicite.main(ExceptionExplicite.java:18)

Pr. Mohamed NAIMI | Cours_Java | ESTB

252

Exceptions non vrifies (5)


Dans les exemples prcdents, lexception nest pas attrape, ce qui entrane larrt immdiat du programme aprs le lancement de lexception.

Pr. Mohamed NAIMI | Cours_Java | ESTB

253

Exceptions non vrifies (6)


Dans le cas gnral, on procde attraper les exceptions pour viter le plantage du programme. Pour attraper une exception non vrifie, on utilise linstruction try de la faon suivante:
try { // Squence dinstructions

} catch (Exception exception) { // Squences dinstructions }

Pr. Mohamed NAIMI | Cours_Java | ESTB

254

Exceptions non vrifies (7)


La syntaxe (Exception exception) de la clause catch ne peut contenir quun seul paramtre dont le type est la classe Exception ou lune de ses extensions. Dans lexemple suivant (Exemple 3), on ajoute au programme de lexemple prcdent un bloc try pour encapsuler le code qui risque de lancer une exception.

Pr. Mohamed NAIMI | Cours_Java | ESTB

255

Exceptions non vrifies (8)


Exemple 3 (exception non vrifie attrape):


class ENVAttrap { static double sqrt(double x) { if (x < 0) throw new IllegalArgumentException( ); return Math.sqrt(x); } public static void main(String[ ] args) { try { // Bloc try System.out.println(sqrt(-25)); } catch (Exception exception) { // Clause catch System.out.println("Exception: " + exception); } System.out.println("Lexception a t attrape."); System.out.println("Fin de la mthode main( )."); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

256

Exceptions non vrifies (9)


Sortie du programme ENVAttrap.java:


Exception: java.lang.IllegalArgumentException Lexception a t attrape. Fin de la mthode main( ).

Pr. Mohamed NAIMI | Cours_Java | ESTB

257

Exceptions vrifies (1)


Les erreurs dues aux exceptions vrifies ne peuvent pas gnralement tre vites:

Ces erreurs sont gnralement provoques par un accs externe.

Ces erreurs peuvent tre gres soit en les relanant, soit en les attrapant. Une mthode qui lance une exception vrifie doit dclarer celle-ci laide dune clause throws dans son en-tte.

Pr. Mohamed NAIMI | Cours_Java | ESTB

258

Exceptions vrifies (2)


Exemple 1 (exception vrifie relance):


import java.io.*; public class EVRelance { public static void main (String[ ] args) throws IOException { int n; BufferedReader in; in = new BufferedReader (new InputStreamReader(System.in)); System.out.println ("Entrer une valeur pour n:"); String input = in.readLine( ); n = Integer.parseInt(input); System.out.println ("n = " +n); System.out.println ("Exception relance."); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

259

Exceptions vrifies (3)


Sortie du programme EVRelance.java:


Entrer une valeur pour n: 3 n=3 Exception relance.

Pr. Mohamed NAIMI | Cours_Java | ESTB

260

Exceptions vrifies (4)


Syntaxe pour attraper une exception vrifie:


try { // Squence dinstructions } catch (ExceptionType1 exception1) { // Squence dinstructions } catch (ExceptionType2 exception2) { // Squence dinstructions } catch (ExceptionTypeN exceptionN) { // Squence dinstructions } finally { // Squence dinstructions }

Pr. Mohamed NAIMI | Cours_Java | ESTB

261

Exceptions vrifies (5)


Exemple 2 (exception vrifie attrape):


import java.io.*; public class EVAttrap { public static void main (String[ ] args) throws IOException { int n; BufferedReader in; in = new BufferedReader (new InputStreamReader(System.in)); System.out.println ("Entrer une valeur pour n:"); String input = in.readLine( ); try { n = Integer.parseInt(input); System.out.println ("n = " +n); } catch (NumberFormatException exception) { System.out.println ("Exception attrape: la chane saisie nest pas un nombre."); } } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

262

Exceptions vrifies (6)


Une excution du programme EVAttrap.java:


Entrer une valeur pour n: 77 n = 77

Une autre excution du programme EVAttrap.java:


Entrer une valeur pour n: st&1 Exception attrape: la chane saisie nest pas un nombre.

Pr. Mohamed NAIMI | Cours_Java | ESTB

263

Fichiers et flux

Introduction

Les Entres et les Sorties (E/S) sont gres par les objets de flux:

Flux dentre: permet de fournir des donnes au programme. Flux de sortie: permet de rcuprer les rsultats du programme. Flux de saisie travers le clavier. Flux daffichage travers lcran. Fichiers de donnes externes.

Types de flux les plus utiliss:


Les classes dE/S sont dfinies dans le paquetage java.io.

Pr. Mohamed NAIMI | Cours_Java | ESTB

265

Fichiers texte (1)


Les fichiers texte sont lus et crits par des diteurs de texte. En Java, ces fichiers sont transfrs sous forme de caractres Unicode 16 bits. La classe Reader est la classe de base permettant de grer les entres des fichiers texte. La classe Writer est la classe de base permettant de grer les sorties des fichiers texte.

Pr. Mohamed NAIMI | Cours_Java | ESTB

266

Fichiers texte (2)


La classe BufferedReader est la sous-classe la plus courante de la classe Reader:

La mthode readLine( ) est la mthode la plus utilise de la classe BufferedReader.

La classe PrintWriter est la sous-classe la plus courante de la classe Writer:

La mthode println( ) est la mthode la plus utilise de la classe PrintWriter.

Pr. Mohamed NAIMI | Cours_Java | ESTB

267

Fichiers texte (3)


Exemple:

Le programme ConversionMaj.java effectue les traitements suivants: Il lit un fichier texte nomm Alice.txt et situ sur le lecteur C. Ensuite, il copie ce fichier dans un nouveau fichier texte nomm AliceMaj.txt et situ sur le lecteur C en remplaant les lettres minuscules par des lettres majuscules.

Pr. Mohamed NAIMI | Cours_Java | ESTB

268

Fichiers texte (4)


Exemple (ConversionMaj.java):
import java.io.*; public class ConversionMaj { public static void main(String[ ] args) { String fichierEntree = "C:\\Alice.txt"; String fichierSortie = "C:\\AliceMaj.txt";

Pr. Mohamed NAIMI | Cours_Java | ESTB

269

Fichiers texte (5)


Exemple (ConversionMaj.java) -Suite:


try { System.out.println("Lecture du fichier:\t" + fichierEntree); FileReader fileReader = new FileReader(fichierEntree); BufferedReader in = new BufferedReader(fileReader); System.out.println("Ecriture dans le fichier:\t" + fichierSortie); FileWriter fileWriter = new FileWriter(fichierSortie); PrintWriter out = new PrintWriter(fileWriter); String ligne = null; int nbreLignes = 0;

Pr. Mohamed NAIMI | Cours_Java | ESTB

270

Fichiers texte (6)


Exemple (ConversionMaj.java) -Fin:


while ((ligne = in.readLine( )) != null) { out.println(ligne.toUpperCase( )); ++nbreLignes; } in.close( ); out.close( ); System.out.println("Copie de " + nbreLignes + " lignes."); } // Fin du bloc try catch(IOException exception) { System.out.println("Exception: " + exception); } } } // Fin de la classe ConversionMaj

Pr. Mohamed NAIMI | Cours_Java | ESTB

271

Fichiers binaires (1)


Les fichiers binaires peuvent tre lus et crits par des programmes excuts. En Java, ces fichiers sont transfrs sous forme doctets binaires de 8 bits. Exemples:

Fichiers image, vido, audio. Fichiers excutables.

Pr. Mohamed NAIMI | Cours_Java | ESTB

272

Fichiers binaires (2)


La classe InputStream est la classe de base permettant de grer les entres des fichiers binaires. La classe OutputStream est la classe de base permettant de grer les sorties des fichiers binaires.

Pr. Mohamed NAIMI | Cours_Java | ESTB

273

Fichiers binaires (3)


La classe ObjectInputStream est la sous-classe la plus courante de la classe InputStream.

La mthode read( ) est la mthode la plus utilise de la classe ObjectInputStream.

La classe ObjectOutputStream est la sous-classe la plus courante de la classe OutputStream.

La mthode write( ) est la mthode la plus utilise de la classe ObjectOutputStream.

Pr. Mohamed NAIMI | Cours_Java | ESTB

274

Srialisation des objets (1)


La srialisation fait rfrence la reprsentation dun objet dans un flux doctets de faon permettre:

Son transfert via un rseau. Sa sauvegarde dans un fichier ou une base de donnes.

Linterface Serializable du paquetage java.io permet de marquer les classes dont les objets peuvent tre srialiss.

Pr. Mohamed NAIMI | Cours_Java | ESTB

275

Srialisation des objets (2)


Les mthodes dE/S destines la srialisation des objets sont dfinies dans les classes Object et ObjectOutputStream:

Si output est une instance de la classe ObjectOutputStream, alors output.writeObject(x); permet de srialiser lobjet x dans ce flux.

Pr. Mohamed NAIMI | Cours_Java | ESTB

276

Srialisation des objets (3)


Exemple:

Nous dfinissons dabord la classe Pays qui reprsente un pays. Le programme SerialisationPays.java cre un tableau de cinq objets Pays en chargeant leurs donnes depuis le fichier texte nomm pays.txt, puis il srialise chacun de ces objets en un fichier binaire nomm pays.dat.

Pr. Mohamed NAIMI | Cours_Java | ESTB

277

Srialisation des objets (4)


Exemple (classe Pays):


public class Pays implements java.io.Serializable { private String id, nom, capitale; private int superficie, population; public Pays(String id) { this.id = id; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

278

Srialisation des objets (5)


Exemple (classe Pays) -Suite:


public Pays(String id, String nom, String capitale, int superficie, int population) { this.id = id; this.nom = nom; this.capitale = capitale; this.superficie = superficie; this.population = population; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

279

Srialisation des objets (6)


Exemple (classe Pays) -Suite:


public int donnerSuperficie( ) { return superficie; } public String donnerCapitale( ) { return capitale; } public String donnerId( ) { return id; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

280

Srialisation des objets (7)


Exemple (classe Pays) -Suite:


public String donnerNom( ) { return nom; } public int donnerPopulation( ) { return population; } public void modifierSuperficie(int superficie) { this.superficie = superficie; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

281

Srialisation des objets (8)


Exemple (classe Pays) -Suite:


public void modifierCapitale(String capitale) { this.capitale = capitale; } public void modifierNom(String nom) { this.nom = nom; } public void modifierPopulation(int population) { this.population = population; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

282

Srialisation des objets (9)


Exemple (classe Pays) -Fin:


public String toString( ) { return id + ":\tNom: " + nom + "\n\tCapitale: " + capitale + "\n\tSuperficie: " + superficie + "\n\tPopulation: " + population; } } // Fin de la classe Pays

Pr. Mohamed NAIMI | Cours_Java | ESTB

283

Srialisation des objets (10)


Exemple (SerialisationPays.java):
import java.io.*; import java.util.*; public class SerialisationPays { private final String CHEMIN = "C:\\"; private final String SOURCE = "pays.txt"; private final String DESTINATION = "pays.dat";

Pr. Mohamed NAIMI | Cours_Java | ESTB

284

Srialisation des objets (11)


Exemple (SerialisationPays.java) -Suite:


public ecrirePays( ) { try { Pays[ ] pays = extraireDonnees( ); ecrireDestination(pays); } catch(IOException exception) { System.out.println("Exception: " + exception); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

285

Srialisation des objets (12)


Exemple (SerialisationPays.java) -Suite:


private Pays[ ] extraireDonnees( ) throws IOException { List liste = new ArrayList( ); BufferedReader in = null; int n = 0; try { in = new BufferedReader(new FileReader(CHEMIN + SOURCE)); for (String ligne=in.readLine( ); ligne!=null; ligne=in.readLine( )) { StringTokenizer tok = new StringTokenizer(ligne, "\t");

Pr. Mohamed NAIMI | Cours_Java | ESTB

286

Srialisation des objets (13)


Exemple (SerialisationPays.java) -Suite:


Pays pays = new Pays(tok.nextToken( )); pays.modifierNom(tok.nextToken( )); pays.modifierCapitale(tok.nextToken( )); pays.modifierSuperficie(Integer.parseInt(tok.nextToken( ))); pays.modifierPopulation(Integer.parseInt(tok.nextToken( ))); liste.add(pays); ++n; }

Pr. Mohamed NAIMI | Cours_Java | ESTB

287

Srialisation des objets (14)


Exemple (SerialisationPays.java) -Suite:


} catch(IOException exception) { System.out.println("Exception: " + exception); } finally { if (in != null) in.close( ); } System.out.println("Lecture de " + n + " lignes de:\t" + CHEMIN + SOURCE ); return (Pays[ ])liste.toArray(new Pays[0]); } ...

Pr. Mohamed NAIMI | Cours_Java | ESTB

288

Srialisation des objets (15)


Exemple (SerialisationPays.java) -Suite:


ObjectOutputStream out = null; int n = p.length; try { out = new ObjectOutputStream(new FileOutputStream(CHEMIN + DESTINATION)); for (int i=0; i<n; i++) { out.writeObject(p[i]); }

private void ecrireDestination(Pays[ ] p) throws IOException {

Pr. Mohamed NAIMI | Cours_Java | ESTB

289

Srialisation des objets (16)


Exemple (SerialisationPays.java) -Fin:


if (out != null) out.close( ); } System.out.println("Ecriture de " + n + " objets dans:\t" + CHEMIN + DESTINATION ); } public static void main(String[ ] args) { new ecrirePays( ); }

} finally {

} // Fin du programme SerialisationPays.java

Pr. Mohamed NAIMI | Cours_Java | ESTB

290

Dsrialisation des objets (1)


La dsrialisation permet un objet srialis de se reconstituer pour reprendre sa forme initiale. Les mthodes dE/S destines la dsrialisation des objets sont dfinies dans les classes Object et ObjectInputStream:

Si input est une instance de la classe ObjectInputStream lie un objet srialis, alors input.readObject(x); permet de dsrialiser lobjet en x.

Pr. Mohamed NAIMI | Cours_Java | ESTB

291

Dsrialisation des objets (2)


Exemple:

Le programme DeserialisationPays.java dsrialise les cinq objets Pays du fichier binaire pays.dat de lexemple prcdent, puis il utilise la mthode toString( ) de la classe Pays afin de les afficher.

Pr. Mohamed NAIMI | Cours_Java | ESTB

292

Dsrialisation des objets (3)


Exemple (DeserialisationPays.java):
import java.io.*; public class lirePays { private final String CHEMIN = "C:\\"; private final String DESTINATION = "pays.dat"; public lirePays( ) throws IOException { System.out.println("Lecture de:\t" + CHEMIN + DESTINATION); ObjectInputStream in = null;

Pr. Mohamed NAIMI | Cours_Java | ESTB

293

Dsrialisation des objets (4)


Exemple (DeserialisationPays.java) -Suite:


try { in = new ObjectInputStream(new FileInputStream(CHEMIN + DESTINATION)); Object objet = null; while ((objet = in.readObject( )) != null) { System.out.println(objet); } } catch(EOFException exception) { System.out.println("Fin de fichier.");

Pr. Mohamed NAIMI | Cours_Java | ESTB

294

Dsrialisation des objets (5)


Exemple (DeserialisationPays.java) -Suite:


} catch(IOException exception) { System.out.println("Exception: " + exception); } catch(ClassNotFoundException exception) { System.out.println("Exception: " + exception); } finally { if (in != null) in.close( ); } System.out.println("Fin de lecture des objets de:\t" + CHEMIN + DESTINATION ); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

295

Dsrialisation des objets (6)


Exemple (DeserialisationPays.java) -Fin:


public static void main(String[ ] args) { try { new lirePays( ); } catch(IOException exception) { System.out.println("Exception: " + exception); } } } // Fin du programme DeserialisationPays.java

Pr. Mohamed NAIMI | Cours_Java | ESTB

296

Fichiers accs alatoire (1)


Les flux dE/S, vus prcdemment, permettent seulement un accs squentiel aux fichiers. Les lments des fichiers accs alatoire (ou direct) peuvent tre lus et/ou crits directement. La classe RandomAccessFile permet dobtenir un accs alatoire en lecture et/ou en criture.

Pr. Mohamed NAIMI | Cours_Java | ESTB

297

Fichiers accs alatoire (2)


La cration dun fichier accs alatoire seffectue laide de deux paramtres:


Le premier est de type String; il indique le nom et le chemin du fichier. Le deuxime est galement de type String; il indique si le fichier est ouvert en lecture seule ("r") ou en lecture et criture ("rw").

Pr. Mohamed NAIMI | Cours_Java | ESTB

298

Fichiers accs alatoire (3)


Exemple:

Le programme AccesAleatoire.java cre dabord un fichier texte simple nomm Test.txt dans le lecteur C et le remplit avec 250 caractres '#' (50 caractres sur chaque ligne). Ensuite, il utilise un accs direct pour remplacer 14 de ces caractres au milieu de la ligne centrale par la chane " Bonjour Amis! ".

Pr. Mohamed NAIMI | Cours_Java | ESTB

299

Fichiers accs alatoire (4)


Exemple (AccesAleatoire.java):
import java.io.*; public class AccesAleatoire { private final static String CHEMIN = "C:\\"; private final static String FICHIER = CHEMIN + "Test.txt"; private final static int Nbre_Car_Ligne = 50; private final static int Nbre_Total_Car = 250; private final static int DIESE = 35; private final static int Position_Ecriture = 120; private final static String s = " Bonjour Amis! ";

Pr. Mohamed NAIMI | Cours_Java | ESTB

300

Fichiers accs alatoire (5)


Exemple (AccesAleatoire.java) -Suite:


public static void main(String[ ] args) throws IOException { OutputStream out = new FileOutputStream(FICHIER); for (int i=0; i<Nbre_Total_Car; i++) { if (i%Nbre_Car_Ligne == 0) out.write((byte)'\n'); else out.write((byte)DIESE); } out.close( );

Pr. Mohamed NAIMI | Cours_Java | ESTB

301

Fichiers accs alatoire (6)


Exemple (AccesAleatoire.java) -Suite:


System.out.println("Ecriture de " + Nbre_Total_Car + " '" + (char)DIESE + "' characters to " + CHEMIN+"Test.txt"); RandomAccessFile raf = new RandomAccessFile(FICHIER, "rw"); raf.seek(Position_Ecriture); raf.writeBytes(s); System.out.println("La longueur du fichier est " + raf.length( )); raf.seek(100); raf.close( );

Pr. Mohamed NAIMI | Cours_Java | ESTB

302

Fichiers accs alatoire (7)


Exemple (AccesAleatoire.java) -Fin:


System.out.println("Lecture de:\t"+FICHIER); FileReader fileReader = new FileReader(FICHIER); BufferedReader in = new BufferedReader(fileReader); String ligne = null; while ((ligne = in.readLine( )) != null) { System.out.println(ligne); } in.close( ); } } // Fin du programme AccesAleatoire.java

Pr. Mohamed NAIMI | Cours_Java | ESTB

303

Interfaces graphiques

Introduction

Java possde une bibliothque de classes graphiques. La plupart de ces classes se trouvent dans lun des deux paquetages javax.swing ou java.awt.

Pr. Mohamed NAIMI | Cours_Java | ESTB

305

La classe JFrame (1)


La classe JFrame se trouve dans le paquetage javax.swing. Elle permet de crer des graphiques (fentres, boutons,). Cette classe hrite des fonctionnalits de ses classes mres dont la hirarchie est la suivante:
Object Component Container Window Frame JFrame Pr. Mohamed NAIMI | Cours_Java | ESTB

306

La classe JFrame (2)


Exemple 1:

Le code suivant indique comment crer un programme graphique simple laide de la classe JFrame: La classe MainFrame est dfinie comme extension de la classe JFrame; elle permet de dfinir un objet graphique sous forme dune fentre avec un bouton de fermeture, un titre, une taille prcise et un emplacement prcis. La classe TestMainFrame permet de tester la classe MainFrame.

Pr. Mohamed NAIMI | Cours_Java | ESTB

307

La classe JFrame (3)


Exemple 1 Suite:
import javax.swing.*; class MainFrame extends JFrame { MainFrame( ) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Cadre principal"); setSize(300, 200); setLocation(250, 150); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

308

La classe JFrame (4)


Exemple 1 Fin:
public class TestMainFrame { public static void main(String[ ] args) { JFrame fenetre = new MainFrame( ); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

309

La classe JFrame (5)


Exemple 2:

Le programme suivant modifie celui de lexemple prcdent en plaant la fentre au centre de lcran et en dfinissant sa taille celle de lcran.

Pr. Mohamed NAIMI | Cours_Java | ESTB

310

La classe JFrame (6)


Exemple 2 -Suite:
import java.awt.*; import javax.swing.*; class MainFrame extends JFrame { MainFrame(int largeur, int hauteur, int x, int y) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle ("Cadre principal"); setSize(largeur, hauteur); setLocation(x, y); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

311

La classe JFrame (7)


Exemple 2 -Fin:
public class TestMainFrame { public static void main(String[ ] args) { Dimension screenSize = Toolkit.getDefaultToolkit( ).getScreenSize( ); int w = screenSize.width; int h = screenSize.height; JFrame fenetre = new MainFrame(w/2, h/2, w/4, h/4); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

312

La classe JLabel (1)


La classe JLabel est galement dfinie dans le paquetage javax.swing. Cette classe permet dafficher un texte dans une fentre. La hirarchie de la classe JLabel est la suivante:
Object Component Container JComponent JLabel Pr. Mohamed NAIMI | Cours_Java | ESTB 313

La classe JLabel (2)


Exemple:

Le programme suivant modifie celui de lexemple 2 prcdent en modifiant la taille de la fentre et en y ajoutant un message textuel.

Pr. Mohamed NAIMI | Cours_Java | ESTB

314

La classe JLabel (3)


Exemple -Suite:
import java.awt.*; import javax.swing.*; class MainFrame extends JFrame { MainFrame(int largeur, int hauteur, int x, int y) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle ("Cadre principal"); setSize(largeur, hauteur); setLocation(x, y); JLabel texte = new JLabel("Bonjour tout le monde!"); texte.setFont(new Font("Serif", Font.BOLD|Font.ITALIC, hauteur/2)); getContentPane( ).add(texte); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

315

La classe JLabel (4)


Exemple Fin:
public class TestMainFrame { public static void main(String[ ] args) { Dimension screenSize = Toolkit.getDefaultToolkit( ).getScreenSize( ); int w = screenSize.width; JFrame fenetre = new MainFrame(w/5, 100, 2*w/5, 0); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

316

Classification des graphiques (1)


Types de graphiques:
1)

2)

Les composants: Objets susceptibles dtre affichs lcran et dinteragir avec lutilisateur. Par exemple, le bouton de fermeture est un composant. Les conteneurs: Composants qui contiennent dautres composants. Par exemple, une fentre est un conteneur tandis quun bouton ne lest pas.

Pr. Mohamed NAIMI | Cours_Java | ESTB

317

Classification des graphiques (2)


Types de graphiques -Suite:


3)

4)

Les fentres: Conteneurs ayant des proprits spcifiques, notamment une bote outils facilitant la cration des composants. Les cadres: Fentres composes dune barre de titre, une barre de menus, une bordure, un curseur et une image dicne. Les cadres sont des objets standard lors de la cration des graphiques.

Pr. Mohamed NAIMI | Cours_Java | ESTB

318

La classe JPanel (1)


On peut ajouter un composant (ex. un objet JLabel) une fentre graphique (ex. un cadre) de deux faons:
1) 2)

Le composant peut tre ajout directement au panneau de contenu de la fentre. Le composant peut tre ajout un conteneur intermdiaire qui est, lui-mme, ajout au panneau de contenu de la fentre.

Dans le deuxime cas, la classe JPanel peut servir comme conteneur intermdiaire.

Pr. Mohamed NAIMI | Cours_Java | ESTB

319

La classe JPanel (2)


La classe JPanel est galement dfinie dans le paquetage javax.swing. Voici la hirarchie dhritage de cette classe:
Object Component Container JComponent JPanel

Pr. Mohamed NAIMI | Cours_Java | ESTB

320

La classe JPanel (3)


Exemple:

Le programme suivant modifie celui de lexemple prcdent en ajoutant un objet JPanel destin contenir lobjet JLabel qui sert laffichage dun contenu textuel: La classe MainPanel est dfinie comme extension de la classe JPanel. Cette classe demande au constructeur dattribuer la couleur noir larrire plan du panneau, puis de crer un objet JLabel permettant dafficher un texte de couleur jaune. Ensuite, lobjet JLabel est ajout lobjet JPanel qui, son tour, est ajout lobjet JFrame.

Pr. Mohamed NAIMI | Cours_Java | ESTB

321

La classe JPanel (4)


Exemple -Suite:
import java.awt.*; import javax.swing.*; class MainFrame extends JFrame { MainFrame(int largeur, int hauteur, int x, int y) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle ("Cadre principal"); setSize(largeur, hauteur); setLocation(x, y); JPanel panneau = new MainPanel( ); getContentPane( ).add(panneau); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

322

La classe JPanel (5)


Exemple -Suite:
class MainPanel extends JPanel { MainPanel( ) { setBackground(Color.black); JLabel texte = new JLabel("Hello, World!"); texte.setFont(new Font(null, Font.BOLD, 40)); texte.setForeground(Color.yellow); add(texte); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

323

La classe JPanel (6)


Exemple -Fin:
public class TestMainFrame { public static void main(String[ ] args) { Dimension screenSize = Toolkit.getDefaultToolkit( ).getScreenSize( ); int w = screenSize.width; JFrame fenetre = new MainFrame(w/5, 100, 2*w/5, 0); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

324

La classe Color (1)


La classe Color est dfinie dans le paquetage java.awt. Cette classe permet de grer les couleurs des objets graphiques. Cette classe hrite directement de la classe Object.

Pr. Mohamed NAIMI | Cours_Java | ESTB

325

La classe Color (2)


La classe Component contient deux mthodes pour dfinir les couleurs darrire et davant plan des composants graphiques:

setBackground(Color. nomCouleur); setForeground(Color.nomCouleur);

La classe Color dfinit 13 champs (public static final) pour les couleurs: black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow.

Pr. Mohamed NAIMI | Cours_Java | ESTB

326

La classe Color (3)


Exemple:

Le programme suivant modifie celui de lexemple prcdent en affichant une srie dobjets JPanel ayant, chacun, une couleur diffrente: La classe ColoredPanel permet de construire un panneau color avec, ventuellement, une tiquette (un texte) qui saffiche sur le panneau. Cette classe dfinit galement un objet Border qui permet dajouter une bordure noire au panneau.

Pr. Mohamed NAIMI | Cours_Java | ESTB

327

La classe Color (4)


Exemple -Suite:
import java.awt.*; import javax.swing.*; import javax.swing.border.Border; class MainFrame extends JFrame { MainFrame(int largeur, int hauteur, int x, int y) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle ("Couleurs"); setSize(largeur, hauteur); setLocation(x, y);

Pr. Mohamed NAIMI | Cours_Java | ESTB

328

La classe Color (5)


Exemple -Suite:
JPanel panneauPrincipal = new JPanel( ); panneauPrincipal.setBackground(Color.white); panneauPrincipal.add(new ColoredPanel(Color.cyan, "blue ciel")); panneauPrincipal.add(new ColoredPanel(Color.magenta, "magenta")); panneauPrincipal.add(new ColoredPanel(Color.green, "vert")); panneauPrincipal.add(new ColoredPanel(Color.orange, "orange")); panneauPrincipal.add(new ColoredPanel(Color.gray, "gray")); panneauPrincipal.add(new ColoredPanel(Color.pink, "rose")); getContentPane( ).add(panneauPrincipal); } } // Fin de la classe MainFrame

Pr. Mohamed NAIMI | Cours_Java | ESTB

329

La classe Color (6)


Exemple -Suite:
class ColoredPanel extends JPanel { Border ligneNoir = BorderFactory.createLineBorder(Color.black); ColoredPanel(Color couleur, String texte) { setBackground(couleur); setBorder(ligneNoir); add(new JLabel(texte)); }

Pr. Mohamed NAIMI | Cours_Java | ESTB

330

La classe Color (7)


Exemple -Fin:
public class TestMainFrame { public static void main(String[ ] args) { Dimension screenSize = Toolkit.getDefaultToolkit( ).getScreenSize( ); int w = screenSize.width; JFrame fenetre = new MainFrame(w/5, 100, 2*w/5, 0); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

331

Les gestionnaires de prsentation (1)


La prsentation fait rfrence la disposition de plusieurs composants dans un conteneur. Les classes principales permettant de grer la prsentation sont BorderLayout, FlowLayout et GridLayout. Ces trois classes implmentent linterface LayoutManager. La prsentation dun conteneur peut tre dfinie en passant un objet LayoutManager la mthode setLayout( ) du conteneur.

Pr. Mohamed NAIMI | Cours_Java | ESTB

332

Les gestionnaires de prsentation (2)


Le gestionnaire FlowLayout organise les composants du conteneur de gauche droite et de haut en bas. La classe FlowLayout est le gestionnaire par dfaut des conteneurs JPanel. Le gestionnaire GridLayout organise les composants du conteneur de manire similaire celle de FlowLayout. De plus, il spcifie le nombre de lignes et de colonnes utiliser. Si la fentre qui contient la grille est redimensionne, GridLayout redimensionne les formes des composants proportionnellement.

Pr. Mohamed NAIMI | Cours_Java | ESTB

333

Les gestionnaires de prsentation (3)


Exemple 1:

Le programme suivant spcifie la prsentation du panneau principal en utilisant le gestionnaire GridLayout: Le panneau principal est cr dans la classe MainFrame et est prsent sous forme dune grille de 4 lignes et 7 colonnes. Ensuite, 26 panneaux tiquets sont ajouts au panneau principal. Ces 26 panneaux et leurs tiquettes vont constituer les cellules de la grille.

Pr. Mohamed NAIMI | Cours_Java | ESTB

334

Les gestionnaires de prsentation (4)


Exemple 1 Suite:
import java.awt.*; import javax.swing.*; import javax.swing.border.Border; class MainFrame extends JFrame { MainFrame(int largeur, int hauteur, int x, int y) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle ("Prsentation en grille"); setSize(largeur, hauteur); setLocation(x, y);

Pr. Mohamed NAIMI | Cours_Java | ESTB

335

Les gestionnaires de prsentation (5)


Exemple 1 Suite:
JPanel panneau = new JPanel( ); panneau.setLayout(new GridLayout(4, 7)); for (int i=0; i<26; i++) { panneau.add(new LabeledPanel("" + (char)('A' + i))); } getContentPane( ).add(panneau); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

336

Les gestionnaires de prsentation (6)


Exemple 1 Suite:
class LabeledPanel extends JPanel { Border ligneNoir = BorderFactory.createLineBorder(Color.black); LabeledPanel(String texte) { setBackground(Color.white); setBorder(ligneNoir); add(new JLabel(texte)); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

337

Les gestionnaires de prsentation (7)


Exemple 1 Fin:
public class TestMainFrame { public static void main(String[ ] args) { JFrame fenetre = new MainFrame(300, 150, 400, 0); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

338

Les gestionnaires de prsentation (8)


Exemple 2:

Le programme suivant cre un panneau principal en utilisant le gestionnaire BorderLayout: Le gestionnaire BorderLayout divise le panneau principal en 5 panneaux tiquets. Les tiquettes sont centres horizontalement dans chacune des 5 sections. De plus, les largeurs des sections Ouest et Est sont ajustes la taille de leur contenu, tandis que celles des 3 autres sections sont tendues sur toute la largeur du panneau principal.

Pr. Mohamed NAIMI | Cours_Java | ESTB

339

Les gestionnaires de prsentation (9)


Exemple 2 Suite:
import java.awt.*; import javax.swing.*; import javax.swing.border.Border; class MainFrame extends JFrame { MainFrame(int largeur, int hauteur, int x, int y) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle ("Prsentation en sections"); setSize(largeur, hauteur); setLocation(x, y);

Pr. Mohamed NAIMI | Cours_Java | ESTB

340

Les gestionnaires de prsentation (10)


Exemple 2 Suite:
JPanel panneau = new JPanel( ); panneau.setLayout(new BorderLayout( )); panneau.add(new LabeledPanel("Nord"), BorderLayout.NORTH); panneau.add(new LabeledPanel("Ouest"), BorderLayout.WEST); panneau.add(new LabeledPanel("Centre"), BorderLayout.CENTER); panneau.add(new LabeledPanel("Est"), BorderLayout.EAST); panneau.add(new LabeledPanel("Sud"), BorderLayout.SOUTH); getContentPane( ).add(panneau); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

341

Les gestionnaires de prsentation (11)


Exemple 2 Suite:
class LabeledPanel extends JPanel { Border ligneNoir = BorderFactory.createLineBorder(Color.black); LabeledPanel(String texte) { setBackground(Color.white); setBorder(ligneNoir); add(new JLabel(texte)); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

342

Les gestionnaires de prsentation (12)


Exemple 2 Fin:
public class TestMainFrame { public static void main(String[ ] args) { JFrame fenetre = new MainFrame(200, 120, 400, 0); fenetre.show( ); } }

Pr. Mohamed NAIMI | Cours_Java | ESTB

343