Vous êtes sur la page 1sur 344

PREMIERS PAS VERS JAVA

______________________________________________________________________________
1
SOMMAIRE

Chapitre 1 GENERALITES SUR LE LANGAGE


JAVA

Chapitre 2 OUTILS ELEMENTAIRES POUR LA


PROGRAMMATION JAVA

Chapitre 3 HERITAGE ET INTERFACES EN JAVA

_____________________________________________________________________________________________________
Mme A. BENOMAR 2
Chapitre 1 GENERALITES SUR LE LANGAGE JAVA

1- CARACTERISTIQUES DE BASES DE LA P.O.O


2- NAISSANCE ET DEVELOPPEMENT DE JAVA
3- ENVIRONNEMENT DE JAVA
4- LES PAQUETAGES (les packages)
5- LES CLASSES EN JAVA
6- UTILISATION DES OBJETS
7- LES CONSTRUCTEURS
8- UTILISATION DES ARGUMENTS DE MAIN

_____________________________________________________________________________________________________
Mme A. BENOMAR 3
Chapitre 1 INTRODUCTION A JAVA

1- CARACTERISTIQUES DE BASES DE LA P.O.O

1 - 1 Notion de classe et dobjet

Objet = Donnes + Traitements

La classe : Abstraction dun ensemble dobjets qui ont les mmes caractristiques
( attributs) et les mmes comportements ( mthodes)

objet est une instance dune classe.

Exemple :
Une classe de nom Individu
Attributs : numeroCin, nom, prenom, dateNaissance, adresse
Mthodes : changeAdresse(), calculSalaire(),dateRetraite()..
Objets : Mohammed, Nadia,
_____________________________________________________________________________________________________
Mme A. BENOMAR 4
1 2 Lencapsulation des donnes :
- Les donnes sont protges lintrieur de chaque objet.
- Les donnes (publiques ,secrtes)

1- 3 LHritage

Une classe drive hrite des proprits dune classe


de base.
- Economie de code
- Amlioration de la fiabilit
- Amlioration de la lisibilit
Exemple : Un rectangle peut hriter dun polygone

1- 4 Le Polymorphisme
Le polymorphisme permet la redfinition dune mthode

1 - 5 Le Multithreading
THREADS : processus qui sexcutent simultanment lintrieur dun
unique programme
_____________________________________________________________________________________________________
Mme A. BENOMAR 5
2-NAISSANCE ET DEVELOPPEMENT DE JAVA

2- 1 Caractristiques de JAVA

- JAVA est un langage de programmation oriente objets


proche de C++.

- JAVA fonctionne comme une machine virtuelle


( indpendant de toute plate forme)

- JAVA est simple (pas de pointeur, pas dhritage multiple)

- JAVA autorise le multitche (multithreading)-

_____________________________________________________________________________________________________
Mme A. BENOMAR 6
2- NAISSANCE ET DEVELOPPEMENT DE JAVA

2- 1 Caractristiques de JAVA

- JAVA peut tre utilis sur INTERNET

- JAVA est gratuit

-JAVA contient une trs riche bibliothque de classes


(Packages) qui permettent de :

- Crer des interfaces graphiques


- Utiliser les donnes multimdia
- Communiquer travers les rseaux
_____________________________________________________________________________________________________
Mme A. BENOMAR 7
2- NAISSANCE ET DEVELOPPEMENT DE JAVA

2- 2 Historique de JAVA

-Projet de recherche en 1991 chez Sun Microsystems


(langage de pilotage des appareils lectroniques) a aboutit
la cration du l.o.o OAK

- En 1994 conversion du langage Oak pour ladapter aux


technologies des rseaux informatiques tels que
INTERNET. Cest la naissance de JAVA

_____________________________________________________________________________________________________
Mme A. BENOMAR 8
2- NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 2 Historique de JAVA

Des diteurs de grande rputation ont rapidement conclu


des accords de licence pour diffuser JAVA
- Netscape Communications ( 23 mai 1995)
- Oracle (30 octobre 1995)
- Borland (8 novembre 1995)
- IBM ( 6 dcembre 1995)
- Adobe Systems ( 6 dcembre 1995)
- Symantec (13 decembre 1995)
- Microsoft (12 mars 1996)
- Novell ( 21 mars 1996)

_____________________________________________________________________________________________________
Mme A. BENOMAR 9
3- ENVIRONNEMENT DE JAVA

3- 1 Java Developers Kit (JDK)


Sun fourni gratuitement un ensemble d'outils et d'API
pour permettre le dveloppement de programmes avec
Java. Ce kit, nomm JDK, est librement tlchargeable
sur le site web de Sun http://java.sun.com
Le kit java contient :
* le compilateur (javac),
* linterprteur (java),
* lappletviewer ou inspecteur dapplet
- Le JDK contient par ailleurs lAPI de java (Application
Programmers Interface) qui correspond la bibliothque
de java
- Le kit JDK ne comporte pas dditeur.
_____________________________________________________________________________________________________
Mme A. BENOMAR 10
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de Java
Java volue au fil des annes. En plus de faire voluer les
numros de versions, le nom complet de chaque version a parfois t
chang. Les principaux vnements de la vie de Java sont les
suivants :

_____________________________________________________________________________________________________
Mme A. BENOMAR 11
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de Java
Depuis sa version 1.2, Java a t renomm Java 2. Les
numros de version 1.2 et 2 dsignent donc la mme version. Le JDK
a t renomm J2SDK (Java 2 Software Development Kit) mais la
dnomination JDK reste encore largement utilise, tel point que la
dnomination JDK est reprise dans la version 5.0.
En outre, Java 2 dsigne les versions de J2SE 1.2 J2SE 1.4
La version actuelle est Java SE 6 alors que la version Java SE 7 est
en cours de dveloppement (sera fini au cours de 2010)

Compatibilit de version
Java assure une compatibilit binaire ascendante (les programmes
compils avec une ancienne version peuvent s'excuter avec une
plate-forme plus rcente).
_____________________________________________________________________________________________________
Mme A. BENOMAR 12
3- ENVIRONNEMENT DE JAVA

3-3 Editions de la plate-forme Java


La plate-forme Java 2 est disponible dans plusieurs ditions utilises
des fins diverses.
Java 2 Standard Edition (J2SE), Contient les classes qui forment le
cur du langage Java

Java 2 Entreprise Edition (J2EE) pour le dveloppement


dapplications dentreprise . Elle contient les classes J2SE plus
dautres
classes pour le dveloppement dapplications dentreprise.
Java 2 Micro Edition (J2ME). pour les produits
dlectronique grand public (tlphones portables,..) dans ce cas
seule une petite partie du langage est utilise.
Chaque dition contient un kit de dveloppement Java 2 (SDK) pour
dvelopper des applications et un environnement dexcution Java 2 (JRE)
pour les excuter.
_____________________________________________________________________________________________________
Mme A. BENOMAR 13
3- 4 Le code source
- Une application java est gnralement compose de
plusieurs fichiers source. Les fichiers source de java ont
lextension .java.
- Un fichier .java peut contenir plusieurs classes.
- Le nom du fichier source java doit tre le mme que celui
de la classe publique que ce fichier renferme (Un fichier java ne
peut pas contenir plus dune classe publique)
3- 5La compilation
* Le byte code
- La compilation va transformer le code source en J-code ou byte-
code Java indpendant de toute plate forme
- La commande qui permet la compilation est la suivante :
Javac nom_fich.java
Cration dun ou plusieurs fichiers .class.
_____________________________________________________________________________________________________
Mme A. BENOMAR 14
3- 2- 3 La machine virtuelle java
- Le code java comprend des instructions crites pour une certaine
machine virtuelle java (JVM : Java virtuel Machine)

- un programme java est excute sur tout ordinateur pour lequel une
machine virtuelle est disponible.

- Une application sera excute par linterprteur de java

Java nom_fich

3- 2- 4 Quelques environnements dutilisation de java


- PCGRASP , JGRASP
- JBUILDER
- ECLIPSE
- NETBEANS
-.
_____________________________________________________________________________________________________
Mme A. BENOMAR 15
-Les fichiers jar

Les fichiers .jar sont des fichiers java compresss comme les
fichiers .zip selon un algorithme particulier devenu un standard de fait
dans le monde des PC.
Ils sont parfois appels fichiers d'archives ou, plus simplement,
archives.
Ces fichiers sont produits par des outils comme jar.exe. ( qui fait
partie du jdk) .
Les fichiers .jar peuvent contenir une multitude de fichiers
compresss avec l'indication de leur chemin d'accs.
Un fichier .jar peut ainsi tre excut directement dans tout
environnement possdant une machine virtuelle

_____________________________________________________________________________________________________
Mme A. BENOMAR 16
4- LES PAQUETAGES (les packages)
* Organisation hirarchique des classes en packages
* Regrouper plusieurs classes qui collaborent entre elles dans une
application
* Dfinir un certain niveau de protection
4- 1 Construction de package
- Pour ranger une classe dans un package, il faut insrer la ligne suivante
au dbut du fichier source:
package nomDuPaquetage ;
- Un paquetage qui doit contenir des classes et donc des fichiers est un
rpertoire. le paquetage a le mme nom que le rpertoire qui le contient.

4- 2 Utilisation des classes dun paquetage


On peut importer les packages de deux manires diffrentes :
1 - import nomDuPackage.* ;
2 - import nomDuPackage.nomDeLaclasse;

Exemple import liste.* ; // importer toutes les classes du package liste


import liste.A ; // importer la classe A du package liste
_____________________________________________________________________________________________________
Mme A. BENOMAR 17
4- 3 API de JAVA

- java.lang : contient les classes fondamentales du langage.


Il contient la classe Object qui est la super classe primitive de toutes
les classes.

- import par dfaut.

Exemples :
Java.lang.Math
Java.lang.System
Java.lang.String

- java.awt : (awt pour Abstract Window Toolkit) contient les


classes pour fabriquer des interfaces graphiques
Exemples :
java.awt.Graphics
java.awt.Color
_____________________________________________________________________________________________________
Mme A. BENOMAR 18
19

4- 3 API de JAVA

-Javax.swing contient les classes pour les interfaces graphiques


volus

-java.applet : utile pour faire des applets qui sont des


applications utilisables travers le web

-java.io: contient les classes ncessaires aux E/S

-java.net : accs aux rseaux

-java.util : classes dutilitaires (Random, Date, ...)

_____________________________________________________________________________________________________
Mme A. BENOMAR 19
5 - LES CLASSES JAVA

Une classe dfinit des attributs et des


mthodes

5 - 1 Architecture d'une classe JAVA

Une classe se compose de deux parties :

* len-tte

* le corps

_____________________________________________________________________________________________________
Mme A. BENOMAR 20
5- LES CLASSES JAVA

5 - 1 Architecture d'une classe JAVA

Entte dune classe

[modificateur] class <NomClasse>[extends <superclass>]


[implements <Interface>]
[ ] : optionnel
< > : obligatoire
gras : mot cl

Corps dune classe


Le corps de la classe donne sa dfinition. Il contient
les dclarations des attributs et des mthodes.
_____________________________________________________________________________________________________
Mme A. BENOMAR 21
5 - 2 Les modificateurs de classe

Modificateur Dfinition
public La classe est accessible par toutes les autres
classes des autres packages. Elle est visible
partout

private La classe nest accessible qu partir du


fichier o elle est dfinie
final Les classes finales ne peuvent pas tre
hritables
friendly l'accs est garanti toute classe dans le
package.
abstract Aucun objet ne peut instancier cette classe.
Seules les classes abstraites peuvent
dclarer des mthodes abstraites. Cette
classe sert pour lhritage

_____________________________________________________________________________________________________
Mme A. BENOMAR 22
5 - 3 Conventions dcriture en JAVA

Type Convention Exemple

Nom dune class Polygone


classe Dbute par une majuscule

Nom dun Dbute par une minuscule premierObjet


objet Peut staler sur plusieurs mots Chaque
mot commence par une majuscule sauf le
premier

Nom de Dbute par une minuscule void ecrire()


mthode Sauf pour le constructeur

Constante Scrit en majuscules A_CONSTANT

_____________________________________________________________________________________________________
Mme A. BENOMAR 23
5- 4 Un premier exemple
public class Premier
{
public static void main (String[ ] arg)
{
System.out.println( bravo) ;
}
}
public : visible de partout , y compris des autres paquetages

static : mthode de classe

System.out.println : La mthode println crit sur lcran la


chaine de caractres passe en paramtres cette mthode

_____________________________________________________________________________________________________
Mme A. BENOMAR 24
5- 4 Un premier exemple

- Cette classe doit se trouver dans le fichier Premier.java

- Il est compil par la commande javac Premier.java

- La compilation cre un fichier Premier.class

- Le fichier est excut par la commande java Premier

- On obtient lexcution : bravo

_____________________________________________________________________________________________________
Mme A. BENOMAR 25
6- UTILISATION DES CLASSES
Pour utiliser une classe, elle doit tre instancie . Il y aura alors cration dun objet.
Mais avant de crer un objet , il faut le dclarer

6 - 1 Dclaration dun objet

NomClasse objet ;

Cette instruction dclare un objet de la classe NomClasse mais ne le cre pas.

6- 2 Cration dun objet

Objet = new NomClasse( ) ;

La dclaration et la cration dun objet peuvent tre regroupes :


NomClasse objet = new NomClasse( )

On accde aux mthodes et aux attributs de la classe comme suit :


NomObjet.mthode(arguments de la mthodes)
NomObjet.attribut
_____________________________________________________________________________________________________
Mme A. BENOMAR 26
6- 3 Exemple dutilisation dobjet
Il sagit dcrire une application en java qui permet de calculer le
salaire hebdomadaire dun employ en fonction du taux horaire et du
nombre dheures

public class Employe


{
String nom; // le nom de l'employ
static float taux_h=50; // le taux horaire en dirhams
int nb_h;

float salaireh () // nb_h : nombre dheures


{ float s;
s=(taux_h*nb_h);
return s;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 27
6- 3 Exemple dutilisation dobjet
public static void main(String[] arg)
{ float s1,s2; // les salaires de 2 employs
Employe emp1,emp2; // 2 objets modlisant 2 employs
emp1=new Employe();
emp2=new Employe();
emp1.nom= " Mohammed"; // le nom de lemploy 1
emp1.nb_h= 35; // le nombre dheures de lemploy 1
emp2.nom="Nadia"; // le nom de lemploy 2
emp2.nb_h=38 ; // le nombre dheures de lemploy 2
s1=emp1.salaireh();
s2=emp2.salaireh();
System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh");
System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh");
} // fin de main
} // fin de la classe
A lxecution , on aura :
Le salaire de Mohammed est 1750.0 dh
Le salaire de Nadia est 1900.0 dh
_____________________________________________________________________________________________________
Mme A. BENOMAR 28
7- LES CONSTRUCTEURS 29

7 - 1 Dfinition

- Le constructeur est une mthode qui est effectue au moment de la


cration dun objet. Il sert initialiser les variables contenues dans les objets.

- Le constructeur porte le mme nom que sa classe. Il ne retourne pas de


valeur et ne mentionne pas void au dbut de sa dclaration

- Toute classe possde au moins un constructeur. Si une classe ne dclare


pas de constructeur, un constructeur vide est cre automatiquement par dfaut

Un constructeur est une fonction qui est appele par le biais de


loprateur new

monObjet = new Constructeur(arguments) ;

_____________________________________________________________________________________________________
Mme A. BENOMAR 29
Exemple dutilisation de constructeur

public class Employe_Constructeur


{
String nom;
static float taux_h=50;
int nb_h;

Employe_Constructeur(String identite) // Constructeur


{
nom=identite;
}

float salaireh () // nb_h : nombre dheures


{ float s;
s=(taux_h*nb_h);
return s;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 30
Exemple dutilisation de constructeur

public static void main(String[] arg)


{ float s1,s2;
Employe_Constructeur emp1,emp2;
emp1=new Employe_Constructeur (" Mohammed");
emp2=new Employe_Constructeur ("Nadia");
/* Ds la cration dun objet on doit spcifier la valeur du nom*/
emp1.nb_h= 35; // le nombre dheures de lemploy 1
emp2.nb_h=38 ; // le nombre dheures de lemploy 2
s1=emp1.salaireh();
s2=emp2.salaireh();
System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh");
System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh");
} // fin de main
} // fin de la classe
_____________________________________________________________________________________________________
Mme A. BENOMAR 31
7 2 La variable this
La variable this sert rfrencer dans une mthode
linstance de lobjet en cours dutilisation. Son emploi peut
savrer utile dans les constructeurs avec des paramtres lorsque
les variables de la classe et celles du constructeur portent
exactement le mme nom .
public class Employe_this
{ String nom;
static float taux_h=50;
int nb_h;

Employe_this(String nom)
{
this.nom=nom; // variable globale de la classe = variable locale
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 32
7 2 La variable this
float salaireh ()
{ float s;
s=(taux_h*nb_h);
return s;
}
public static void main(String[] arg)
{ float s1,s2;
Employe_this emp1,emp2;
emp1=new Employe_this (" Mohammed");
emp2=new Employe_this ("Nadia");
emp1.nb_h= 35; // le nombre dheures de lemploy 1
emp2.nb_h=38 ; // le nombre dheures de lemploy 2
s1=emp1.salaireh();
s2=emp2.salaireh();
System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh");
System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh");
} // fin de main
} // fin de la classe
_____________________________________________________________________________________________________
Mme A. BENOMAR 33
8- UTILISATION DES ARGUMENTS DE MAIN
Les arguments de la mthodes main permettent de rcuprer des
chanes de caractres fournies depuis la ligne de commande
Exemple 1 dutilisation des arguments de main : Les noms des
employs sont considrs des arguments de la mthode main

public class Arguments_main


{
String nom;
static float taux_h=50;
int nb_h;
float salaireh ()
{
float s;
s=(taux_h*nb_h);
return s;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 34
8- UTILISATION DES ARGUMENTS DE MAIN
public static void main(String[] arg)
{ float s1,s2;
Arguments_main emp1,emp2;
emp1=new Arguments_main();
emp2=new Arguments_main();
emp1.nom=arg[0];
emp2.nom=arg[1];
emp1.nb_h= 35; // le nombre dheures de lemploy 1
emp2.nb_h=38 ; // le nombre dheures de lemploy 2
s1=emp1.salaireh();
s2=emp2.salaireh();
System.out.println("Le salaire de "+ emp1.nom+" est "+s1+" dh");
System.out.println("Le salaire de "+ emp2.nom+" est "+s2+" dh");
} // fin de main
} // fin de la classe
Aprs compilation du fichier Arguments_main.java , il faut lexcuter en
donnant 2 chanes de caractres pour les noms des 2 employs.
Exemple dexcution : java Arguments_main Ali Sanae
_____________________________________________________________________________________________________
Mme A. BENOMAR 35
8- UTILISATION DES ARGUMENTS DE MAIN

Exemple 2 : Utilisation dun nombre entier comme argument

Il sagit de considrer le nombre dheures travailles comme


argument de main aussi pour pouvoir donner leurs valeurs
lexcution
public class Arguments_entiers
{
String nom;
static float taux_h=50;
int nb_h;
float salaireh ()
{ float s;
s=(taux_h*nb_h);
return s;
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 36
8- UTILISATION DES ARGUMENTS DE MAIN
public static void main(String[] arg)
{ float s1,s2;
Arguments_entiers emp1,emp2;
emp1=new Arguments_entiers();
emp2=new Arguments_entiers();
emp1.nom=arg[0];
emp1.nb_h= Integer.parseInt(arg[1]);
emp2.nom=arg[2];
emp2.nb_h= Integer.parseInt(arg[3]);
s1=emp1.salaireh();
s2=emp2.salaireh();
System.out.println("Le salaire de "+ emp1.nom+" est "+s1+" dh");
System.out.println("Le salaire de "+ emp2.nom+" est "+s2+" dh");
} // fin de main
} // fin de la classe
il faut excuter cette classe en donnant 2 chanes de caractres pour
les noms des 2 employs et leurs nombres dheures travailles
Exemple dexcution : java Arguments_entier Ali 30 Sanae 28
_____________________________________________________________________________________________________
Mme A. BENOMAR 37
Chapitre 2 LES OUTILS ELEMENTAIRES
POUR LA PROGRAMMATION JAVA

1- COMMENTAIRES EN JAVA
2- TYPES ELEMENTAIRES EN JAVA
3- LES PROPRIETES DES ATTRIBUTS
4- LES STRUCTURES DE CONTROLES
5- LES PROPRIETES DES METHODES
6- LES TABLEAUX
7- LA SAISIE AU CLAVIER
8- LES CHAINES DE CARACTERES
9 LES OPERATIONS SUR LES OBJETS
_____________________________________________________________________________________________________
Mme A. BENOMAR 38
Chapitre 2 TECHNIQUES DE BASE DE
LA PROGRAMMATION JAVA

11 - Commentaires en java

En java, il existe deux types de commentaires :

// commentaire simple sur une ligne

/* */ commentaire de plusieurs lignes

_____________________________________________________________________________________________________
Mme A. BENOMAR 39
Chapitre 2 TECHNIQUES DE BASE DE
LA PROGRAMMATION JAVA
2 Types lmentaires en java
JAVA dispose des 8 types lmentaires suivants, ces types
sont appels primitives en java :

boolean Destin une valeur logique (true, false)


byte Octet sign 8 bits (-128 et 127)
short Entier court sign 16 bits (-32768 32767)
char Caractre 16 bits

_____________________________________________________________________________________________________
Mme A. BENOMAR 40
Chapitre 2 TECHNIQUES DE BASE DE
LA PROGRAMMATION JAVA

2 Types lmentaires en java

int Entier sign 32 bits


float Virgule flottante 32 bits
double Double prcision 64 bits
long Entier long 64 bits

_____________________________________________________________________________________________________
Mme A. BENOMAR 41
Java dispose galement des classes suivantes pour grer ces primitives :

Classe Primitive
______________________________
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Boolean boolean

_____________________________________________________________________________________________________
Mme A. BENOMAR 42
3- LES PROPRIETES DES ATTRIBUTS

3 - 1 Dclaration

Un attribut correspond une variable ou une constante


pouvant prendre une valeur diffrente pour chaque objet instance de la
classe.

Tous les objets dune mme classe ont les mmes attributs,
mais chaque objet associe ces attributs des valeurs qui lui sont
propres.
Avant dutiliser un attribut, il doit tre dclare comme suit :

<modificateur> type_elementaire identificateur

_____________________________________________________________________________________________________
Mme A. BENOMAR 43
3- LES PROPRIETES DES ATTRIBUTS

3 - 1 Dclaration

Modificateur Dfinition

final - Un attribut constant.


private - Un attribut prive ne peut tre utilise que
dans les mthodes de la mme classe
public - Attribut visible par toutes les autres
mthodes
static - Attribut de classe indpendant des objets

_____________________________________________________________________________________________________
Mme A. BENOMAR 44
33-2 Identificateurs
A Chaque objet , classe, programme ou variable est associ un identificateur. Les
identificateurs Java sont forms d'un nombre quelconque de caractres. Ils doivent
respecter les rgles suivantes :
- Les majuscules et les minuscules sont distingues.
- Le premier caractre ne doit pas tre un chiffre
- L identificateur ne doit pas tre un mot cl de Java.
En plus des rgles ci-dessus, il est conseill de respecter les directives
suivantes :
_ - Evitez les caractres accentus dans les noms de classes.
- - Evitez de donner le mme nom des identificateurs d'lments diffrents

_____________________________________________________________________________________________________
Mme A. BENOMAR 45
3-3 Mots cl de java

Les mots suivants sont les mots cl de java :

abstract assert boolean break byte


case catch char class continue
default do double else enum
extends false final finally float
for 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

_____________________________________________________________________________________________________
Mme A. BENOMAR 46
3 - 4 Les attributs statiques

Ce sont les attributs qui ont le modificateur static. Un attribut


statique ( ou de classe) appartient une classe et non ses instances.
Il est indpendant des objets
- Un attribut statique existe ds que sa classe est charge en
mmoire alors quun attribut dinstance existe lors de linstanciation de
la classe
Pour utiliser un attribut ou une mthode statique, on crit :
NomClasse.nomAttributStatique
Cependant JAVA permet galement dutiliser :
nomObjet.nomAttributStatique o nomObjet est une
instanciation de la classe qui contient lattribut ou la mthode statique

_____________________________________________________________________________________________________
Mme A. BENOMAR 47
Exemple1 : attribut statique
class Statique
{
int nons;
static int s;
}
public class UtiliseStatic
{
public static void main (String[] arg)
{
Statique.s=10;
Statique obj1= new Statique();
obj1.nons=20;
Statique obj2= new Statique();
obj2.nons=30;
obj2.s=15;//Pour tous ,les objets s=15
System.out.println(Statique.s); //15
System.out.println(obj1.s); //15
System.out.println(obj1.nons); //20
System.out.println(obj2.nons); //30
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 48
Exemple2 : Calcul des moyennes des lves ainsi que la
moyenne de la classe

class Moyenne
{ static int nb_eleves ; // nombre dlves
float note1,note2,note3; // notes des lves
int num; // numro de l'lve
String nom; // nom de l'lve
static float moyenne_classe;

Moyenne(int num,String nom) //constructeur


{ this.num=num;
this.nom=nom ;
}

float moyenne_eleve()
{ return ((note1+note2+note3) /3);
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 49
Exemple2 : Calcul des moyennes des lves ainsi que la moyenne de
la classe

public class Utilise_Moyenne


{
public static void main(String[] arg)
{
Moyenne.nb_eleves=2;
Moyenne eleve1= new Moyenne(1,"Adnane");
Moyenne eleve2= new Moyenne(2,"Amal");
eleve1.note1=15;
eleve1.note2=11;
eleve1.note3=17;
float moy1=eleve1.moyenne_eleve();
eleve2.note1=12;
eleve2.note2=18;
eleve2.note3=16;
float moy2=eleve2.moyenne_eleve();
_____________________________________________________________________________________________________
Mme A. BENOMAR 50
System.out.println("Eleve : numro : "+eleve1.num);
System.out.println("Nom : "+eleve1.nom+" Moyenne : "+moy1);
System.out.println("Eleve : numro : "+eleve2.num);
System.out.println("Nom : "+eleve2.nom+" Moyenne : "+moy2);
Moyenne.moyenne_classe=(moy1+moy2)/ Moyenne.nb_eleves;
System.out.println("La moyenne de la classe est "+
Moyenne.moyenne_classe);
}
}
A l'excution on aura :
Eleve 1 Nom : Adnane Moyenne : 14.3333
Eleve 2 Nom : Amal Moyenne : 15.3333
La moyenne de la classe est : 14.833

_____________________________________________________________________________________________________
Mme A. BENOMAR 51
-3-5 Les oprateurs de java

* Multiplication
/ division
% modulo
+ addition
- soustraction
= affectation
== identit
!= diffrent de
&& et logique
|| ou logique
++ incrmentation
+= - = *= /=

_____________________________________________________________________________________________________
Mme A. BENOMAR 52
3-6 Les initialiseurs

Les initialiseurs dattributs permettent daffecter


un attribut une valeur initiale. Si on dclare un attribut non
static dans une mthode, cet attribut na pas de valeur.
Toute tentative dy faire rfrence produit une erreur de
compilation.

En revanche , sil sagit dune variable globale, cd


si cette dclaration se trouve en dehors de toute mthode,
JAVA linitialise automatiquement avec une valeur par
dfaut .

_____________________________________________________________________________________________________
Mme A. BENOMAR 53
Exemple :
class Initialiseur
{
int a1; static int a2;
void m1()
{ int a3;
System.out.println(a3) ; //erreur car a3 non initialise
}
public static void main(String[] arg)
{ System.out.println("a2="+a2);
Initialiseur obj= new Initialiseur();
System.out.println("obj.a1="+obj.a1);
obj.m1();
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 54
Pour des initialisations plus complexes, on peut utiliser un
bloc plac lextrieur de toute mthode ou constructeur
Par exemple, float e
{
if (b != 0 )
{ e = (float) a /b ; }
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 55
3-7 Les attributs constants

- Une constante est un attribut qui ne peut plus tre


modifi une fois quil a t initialis.
- Une constante est initialise une seule fois soit au
moment de sa dclaration, soit dans le constructeur de la
classe
-Pour dclarer un attribut constant , on le muni du
modificateur final
Si on dclare un attribut par final static int MAX = 10
MAX est une constante de la classe qui vaut toujours 10 pour
toutes les instances de la classe.
Par contre si on dclare un attribut final dans le
constructeur . Il y en aura un exemplaire par instance cre.
_____________________________________________________________________________________________________
Mme A. BENOMAR 56
Exemple de dfinition et dutilisation de constantes

class Constantes
{
final int C ; /* dclare une constante dinstance qui peut tre
initialise dans le constructeur */

final static int D= 100 ; /* dclare une constante de classe


qui doit tre initialise au moment de sa dfinition */

Constantes (int i ) // Constructeur de la classe Constantes


{
C = i ; // initialisation de la constante dinstance C
// C= D ; interdit car C doit tre dfinit une seule fois
// D = 10 ; interdit car D est une constante de classe
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 57
public class EssaiConstantes
{
public static void main (String[] arg)
{
System.out.println ( ( new Constantes (2)).C ) ;
System.out.println (Constantes.D ) ;
}
}

On obtient lexcution :
2
100

_____________________________________________________________________________________________________
Mme A. BENOMAR 58
4- Les structures de contrle

Les structures de contrle de java sont similaires celles de C

Les instructions conditionnelles

a Linstruction if
if (expression)
InstructionSiVrai ;
else
InstructionSiFaux

b- Loprateur ?
condition ? siVrai : siFaux

Exemple : int a, b ;
int min = a<b ? a : b

_____________________________________________________________________________________________________
Mme A. BENOMAR 59
c- Linstruction switch
switch (variable)
{ case cas1 : instruc11 ;
instruc12 ;
.
break ;
case cas2 : instruc21 ;
instruc22 ;
.
break ;
.
default : instrDefault ;
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 60
Les instructions de rptition
a Linstruction while
while (condition)
instruction ;
b Linstruction do
do
instr ;
while (condition)

c Linstruction for
for ( initialisation, ; test ; incrementation)

La boucle for en java autorise plusieurs expressions spares par


une virgule apparatre dans la partie initialisation et
incrmentation mais pas dans la partie test

Exemple : for (i=1, j=10; (k<15);i++,j--)

_____________________________________________________________________________________________________
Mme A. BENOMAR 61
5- Les proprits des mthodes

5 - 1 Signature dune mthode

les mthodes sont les fonctions quon peut appliquer aux objets.
Elles permettent de changer ltat des objets ou de calculer des valeurs
Plusieurs mthodes dune mme classe peuvent avoir le mme
nom, mais des paramtres diffrents ( surcharge) .
Le nom et le type des paramtres constituent la signature de la
mthode. Une mthode peut elle aussi possder des modificateurs.

_____________________________________________________________________________________________________
Mme A. BENOMAR 62
Modificateur Dfinition

abstract Prototype de mthode


Une mthode qui ne peut pas tre redfinie.
final
Mthode ne peut tre invoque que par des
sous classes.
protected
une mthode prive ne peut tre utilise que
dans les mthodes de la mme classe
private
mthode visible par toutes les autres
mthodes
public
Mthode de classe indpendant des objets
static
_____________________________________________________________________________________________________
Mme A. BENOMAR 63
5 -2 Les mthodes statiques

Comme pour les attributs statiques , les mthodes statiques


ont le modificateur static et sont indpendantes des instances
- Une mthode statique ne peut pas tre redfinie. Elle est
automatiquement finale
Pour utiliser une mthode statique, on crit :

NomClasse.nomMethodeStatique(arguments)

Cependant JAVA permet galement dutiliser :

nomObjet.nomMethodeStatique(arguments)

nomObjet tant une instanciation de la classe qui


contient lattribut ou la mthode statique
_____________________________________________________________________________________________________
Mme A. BENOMAR 64
5-3 La surcharge

Si plusieurs mthodes possdent le mme nom mais


diffrent par lensemble des types de leurs arguments, ou par
lordre des types de leurs arguments, on dit quil y a
surcharge. Lorsquune mthode surcharge est invoque , la
bonne mthode est choisie pour quil y ait correspondance
sur les paramtres de lappel et les arguments de la mthode

_____________________________________________________________________________________________________
Mme A. BENOMAR 65
EXEMPLE
class Surcharge
{ int n ;
double x ;
Surcharge( )
{
n=1;
x = 3.5 ;}
Surcharge(int n, double x)
{
this.n = n ;
this.x = x ;
}
int operation(int p)
{ return 10*p +n ; }
double operation (double y , int p)
{ return x*p + y ; }
double operation(int p, double y )
{ return (double) n/p + y ;}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 66
public class EssaiSurcharge
{
public static void main (String[] arg)
{
Surcharge surcharge ;
surcharge = new Surcharge( ) ;
System.out.println (surcharge.operation (2)) ;
System.out.println (surcharge.operation (1.5 , 4)) ;
System.out.println (surcharge.operation (4 , 1.5)) ;
surcharge = new Surcharge(7 , 2.0) ;
System.out.println (surcharge.operation (2)) ;
}
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 67
remarque :
si on ajoute linstruction : (surcharge.operation (4 , 5)) ; il
yaura erreur de compilation car ambiguit .Par contre sil
ny avait pas de surcharge (une seule mthode double
operation (double y , int p) ) cette mme instruction ne
gnerera pas derreur car transtypage automatique

_____________________________________________________________________________________________________
Mme A. BENOMAR 68
6 Les tableaux 69
Les tableaux en java sont des structures pouvant contenir un nombre fixe d lments de
mme nature. Chaque lment est accessible grce un indice correspondant sa position dans
le tableau.

6-1 Dclaration d un tableau

Les tableaux doivent tre dclars comme tous les objets. Java dispose de deux syntaxes
quivalentes pour la dclaration des tableaux,

type_elements[ ] tableau;
ou
type_elements tableau[ ] ;

Exemple : int [] tab1


int tab2[]

6-2 Cration dun tableau

Comme tout objet java un tableau doit tre cre aprs sa dclaration. Les tableaux java sont
de taille fixe.La cration doit indiquer leur taille. La syntaxe utiliser est la suivante :
x = new type[ dimension];
dimension est le nombre d'lments que le tableau pourra contenir.

_____________________________________________________________________________________________________
Mme A. BENOMAR 69
Exemple :
class TableauA
{ public static void main(String[] arg)
{
int[] tableau ;
tableau = new int[2];
tableau[0]=-5;
tableau[1]= 8
for(int i=0 ;i<2 ;i++)
System.out.println(tableau[i]);
}
}
Autre faon de dfinir un tableau : On peut dfinir un tableau avec un
tableau littral au moment de sa dclaration.

Exemple: boolean tableau[ ] = {true,false,true}; int t[ ]={0, 5, 9, -45}


_____________________________________________________________________________________________________
Mme A. BENOMAR 70
6- 3 Longueur dun tableau

On peut connatre la longueur d un tableau en utilisant


l attribut length.
Tableau.length est la longueur du tableau Tableau.

class TableauB
{public static void main(String[ ] argv)
{ int tableau[ ]=new int[3];
System.out.println(Taille du tableau : + tableau.length) ;
} // affichera 3
}

Remarque : Pour parcourir un tableau, il ne faut pas dpasser sa


longueur (Tableau.length) sinon il yaura une erreur lexcution.
Exemple : for (int i= 0 ; i <= Tableau.length; i++)gnrera une erreur
_____________________________________________________________________________________________________
Mme A. BENOMAR 71
6- 4 Tableau dobjets

Avec java, on peut aussi manipuler des tableaux dobjets


Exemple:

class TableauD
{
public static void main(String[] argv)
{ Integer tableau[] = new Integer[4] ; //un tableau de 4 objets
int somme = 0 ;
for (int i=0 ; i<tableau.length ; i++)
tableau[i]= new Integer(i) ;
for (int i=0 ; i<tableau.length ; i++)
somme+=tableau[i].intValue() ; //intValue retourne lattribut i
System.out.println( La somme des entiers est +somme) ;
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 72
6-5 Tableau multidimensionnel :

Les tableaux de java peuvent comporter plusieurs dimensions. Pour


dclarer un tableau multidimensionnel, on doit utiliser la syntaxe suivante :
type [ ] [ ] [] tableau

Exemple : int[ ] [ ] tableau; // 2 dimensions


La cration du tableau peut tre effectue l'aide de
-L'oprateur new : int [][] x = new int[2][4]; ou
-de tableaux littraux : int [ ][ ] tableau = {{1, 2, 3, 4},{5, 6, 7, 8}};

Pour accder tous les lments du tableau, on utilise des boucles


imbriques Exemple : int [ ][ ] x = new int[2][4];
for (int i = 0; i < x.length; i++) // x.length : longueur de la 1re imension

for (int j = 0; j < x[i].length; j++) //x[i].length : longueur de la 2dimension

_____________________________________________________________________________________________________
Mme A. BENOMAR 73
7- La saisie au clavier

-En java, le clavier est un fichier reprsent par un


objet particulier de La classe java.io.BufferedReader qui
admet le constructeur :
BufferedReader (InputStreamReader objet)

Pour reprsenter le clavier, on doit instancier la classe


BufferedReader comme suit :
BufferedReader (new InputStreamReader(System.in))

La mthode readLine de BufferedReader permet de


lire une ligne
_____________________________________________________________________________________________________
Mme A. BENOMAR 74
Exemple : Ecrire une application qui permet de lire 3 entiers partir du clavier
et d'en faire la somme.
import java.io.*;
public class SaisieClavier
{
static int somme = 0;
static int a,b,c;
static int lire_entier()throws IOException
{
BufferedReader entree = new BufferedReader
(new InputStreamReader(System.in));
int i=0;
i=Integer.parseInt(entree.readLine()); // conversion en entier
return i;
}
public static void main(String[] argv)throws IOException
{ System.out.println( Entrer au clavier 3 entiers : ) ;
a=lire_entier();
b=lire_entier();
c=lire_entier();
somme=a+b+c;
System.out.println("La somme vaut : "+somme);}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 75
8- LES CHAINES DE CARACTERES
En Java, les chanes de caractres sont des objets
de la classe java.lang.String ou java.lang.StringBuffer

8-1 Les chanes de caractres de type String


-La classe java.lang.String est une classes dont les
objets sont immuables (ils ne peuvent pas changer de
valeur)

-La JVM cre un objet de type String la rencontre


dune srie de caractres entre doubles apostrophes.

- Les chanes de caractres (String) peuvent se


concatner laide de loprateur +.

_____________________________________________________________________________________________________
Mme A. BENOMAR 76
8- LES CHAINES DE CARACTERES

- Les Constructeurs de java.lang.String

_____________________________________________________________________________________________________
Mme A. BENOMAR 77
- Les Comparaisons de chanes de caractres
int compareTo(Object o) Compare une chane de caractre un autre objet.
Renvoie une valeur <0 ==0 ou > 0

int compareTo(String anotherString) Compare une chane de caractre un autre objet.


Renvoie une valeur <0 ==0 ou > 0. La
comparaison est une comparaison
lexicographique.
int compareToIgnoreCase(String str) Compare une chane de caractre un autre objet.
Renvoie une valeur <0 ==0 ou > 0. La
comparaison est une comparaison
lexicographique, ignorant la casse.
boolean equals(Object anObject) Compare la chane a un objet et retourne true en
cas dgalit et false sinon

boolean equalsIgnoreCase(Object Compare la chane a un objet et retourne true en


anObject) cas dgalit et false sinon ( on ignore la casse)

boolean regionMatches(boolean Teste lgalit de deux parties de chanes


ignoreCase, int toffset, String other, int
ooffset, int len)
boolean regionMatches(int toffset, String Teste lgalit de deux parties de chanes
other, int ooffset, int len)
_____________________________________________________________________________________________________
Mme A. BENOMAR 78
- Les Caractres et sous-chane.

char charAt(int i) Retourne le caractre lindice spcifi en


paramtre.

String substring(int d) Sous-chane depuis d jusqu la fin


String substring(int d, int f) Sous-chane depuis d jusquau caractre
dindice f non inclus.

boolean startsWith(String prefix) Renvoie true si prefix est un prfixe de la


chane

boolean startsWith(String prefix, int i) Renvoie true si prefix est un prfixe de la


chane partir de i.

boolean endsWith(String suffix) Retourne true si suffix est un suffixe de la


chane

_____________________________________________________________________________________________________
Mme A. BENOMAR 79
- Les Conversions

String toLowerCase() Retourne une chane gale la chane


convertie en minuscules.
String toLowerCase(Locale Retourne une chane gale la chane
locale) convertie en minuscules.
String toString() Retourne une chane gale la chane
String toUpperCase() Retourne une chane gale la chane
convertie en majuscules.
String toUpperCase(Locale Retourne une chane gale la chane
locale) convertie en majuscules.
String trim() Retourne une chane gale la chane sans les
espaces de dbut et de fin.
String replace(char ac, char Retourne une chane ou tous les ac ont t
nc) remplac par des nc. Sil ny a pas de
remplacement, la chane elle-mme est
retourne.

_____________________________________________________________________________________________________
Mme A. BENOMAR 80
- La recherche dans une chane de caractre

int indexOf(int ch) Retourne lindice de la premire occurrence


du caractre
int indexOf(int ch, int fromIndex) Retourne lindice de la premire occurrence
du caractre partir de fromIndex
int indexOf(String str) Retourne lindice de la premire occurrence
de la chane
int indexOf(String str, int fromIndex) Retourne lindice de la premire occurrence
de la chane partir de fromIndex
int lastIndexOf(int ch) Retourne lindice de la dernire occurrence
du caractre
int lastIndexOf(int ch, int fromIndex) Retourne lindice de la dernire occurrence
du caractre partir de fromIndex
int lastIndexOf(String str) Retourne lindice de la dernire occurrence
de la chane
int lastIndexOf(String str, int fromIndex) Retourne lindice de la dernire occurrence
de la chane partir de fromIndex

_____________________________________________________________________________________________________
Mme A. BENOMAR 81
Exemple :
public class Chaine1
{ String ch1="langage" ;
String ch2= " java" ;
String ch3=ch1+ch2;
void affiche_longueur()
{ System.out.println(ch1+" a pour longueur " + ch1.length());
System.out.println(ch2+" a pour longueur " + ch2.length());
System.out.println(ch3+" a pour longueur " + ch3.length());
}
void affiche_caractere(String ch)
{ for(int i = 0;i<ch.length();i++)
System.out.println(ch+" l'indice "+i+" = "+ch.charAt(i));
}
public static void main(String[] arg)
{ Chaine1 obj = new Chaine1();
obj.affiche_longueur();
obj.affiche_caractere(obj.ch3);
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 82
8-2 Les chanes de caractres de type StringBuffer

Pour une utilisation plus volue dune chane de


caractres on peut utiliser des objets de la classe
java.lang.StringBuffer qui contient des mthodes qui ne
sont pas dfinies dans la classe String (append,.setLength,
)
Les objets de cette classe contiennent des chanes de
caractres variables, ce qui permet de les agrandir ou de
les rduire.
La classe StringBuffer dispose de nombreuses
mthodes qui permettent de modifier le contenu de la
chane de caractre

_____________________________________________________________________________________________________
Mme A. BENOMAR 83
- Les Constructeurs de la classe StringBuffer

StringBuffer() Construit une chane vide de capacit initiale de 16


caractres.

StringBuffer (int l) Construit une chane vide de capacit initiale de l


caractres.

StringBuffer (String s) Construit une chane de caractres partir de la chane s

int capacity() la capacit de la chane de caractres : longueur max


int length() la longueur de la chane de caractres
void setLength (int n) la longueur de la chane est n ; les caractres
ventuellement ajouts ont une valeur indtermine.
_____________________________________________________________________________________________________
Mme A. BENOMAR 84
- Concatnation

StringBuffer append(boolean b) Concatne la reprsentation en chane du


boolen.
StringBuffer append(char c) Concatne la reprsentation en chane du
caractre.
StringBuffer append(char[] str) Concatne la reprsentation en chane du
tableau de caractres.
StringBuffer append(char[] str, int Concatne la reprsentation en chane du
offset, int len) tableau de caractres.
StringBuffer append(double d) Concatne la reprsentation en chane du
double.
StringBuffer append(float f) Concatne la reprsentation en chane du
float.
StringBuffer append(int i) Concatne la reprsentation en chane du int.

_____________________________________________________________________________________________________
Mme A. BENOMAR 85
- Caractre et sous-chane.

char charAt(int i) Retourne le caractre lindice


spcifi en paramtre.
String substring(int i) Sous chane depuis i jusqu la
fin
String substring(int i, int l) Sous chane depuis i et de
longueur l.

- Conversion
String toString() Retourne une chane gale la chane

- Modifications

StringBuffer delete(int start, int end) Enlve tous les caractres compris entre start et
end.
StringBuffer deleteCharAt(int index) Enlve le caractre lindice index

_____________________________________________________________________________________________________
Mme A. BENOMAR 86
8-2 Les chanes de caractres de type StringBuffer
Exemple : utilisation de la longueur et de la capacit
public class Chaine2
{static StringBuffer stb1,stb2;
public static void main(String[ ] arg)
{ stb1=new StringBuffer();
stb2=new StringBuffer(10);
System.out.println("stb1 a pour longueur "+stb1.length()); //0
System.out.println("stb1 a pour capacit "+stb1.capacity()); //16
System.out.println("stb2 a pour longueur "+stb2.length()); //0
System.out.println("stb2 a pour capacit "+stb2.capacity()); //10
stb1=new StringBuffer("Chaine");
System.out.println("stb1 a pour longueur "+stb1.length()); //6
System.out.println(stb1+ " pour capacit "+stb1.capacity()); //22=16+6
stb1.append(" StringBuffer");
System.out.println(stb1+" a pour longueur "+stb1.length());//19
System.out.println(stb1+" a pour capacit"+stb1.capacity()); //22
stb1.setLength(3);
System.out.println(stb1+" a pour longueur "+stb1.length()); //3
System.out.println(stb1+" a pour capacit"+stb1.capacity());//22
} }
_____________________________________________________________________________________________________
Mme A. BENOMAR 87
9 OPERATIONS SUR LES OBJETS

9 1 Laffectation =
ObjetA = ObjetB ObjetA dsigne le mme objet que ObjetB, cest
la copie de rfrence
Toute modification effectu sur lobjet rfrence par objetA sera
rpercut sur lobjet rfrence par objetB et vice versa.

Exemple:
class Copie
{
public static void main(String[] argv)
{
int[ ] tableau = {1,2};
int[ ] table ;
table = tableau;
table[0] =7;
System.out.println(tableau contient: + tableau[0] +tableau
[1]);
/* tableau[0]=7 et tableau[1]=2 */
_____________________________________________________________________________________________________
} A. BENOMAR
Mme 88
}
9 2 Egalit entre objets

Si obj1 et obj2 sont deux rfrences dobjets de la mme classe.


(obj1== obj2) est vraie si ces deux rfrences obj1 et obj2 dsignent
le mme objet
Exemple :
class C1
{ }
public class Egalite
{
public static void main( String[] arg)
{ C1 obj1,obj2,obj3;
obj1=new C1();
obj2=new C1();
obj3=obj1;
System.out.println(obj1==obj2); // false
System.out.println(obj1==obj3); //true
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 89
9 3 Lobjet null
Lobjet null nappartient pas une classe, mais il peut tre utilis en lieu et place
dun objet de toute classe,
public class Case
{ int val ;
Case (int val ) // Constructeur de la classe Case
{ this.val=val ; }
boolean estEgal (Case c)
/* Mthode estEgal avec un paramtre objet de type Case */
{ return val = = c.val ; }
}
public class DemoNull
{ public static void main (String[] arg)
{
Case c1 = new Case (10) ;
Case c2 = new Case (15) ;
Case c3 = null ;
System.out.println ( c1 = =c2 :+c1.estEgal(c2)) ;
System.out.println ( c1= =c3 :+ c1.estEgal(c3)) ;
System.out.println (c1= =null:+c1.estEgal(null));
}
}
/* Le programme se compile correctement, en revanche son excution est interrompue
la ligne c1.estEgal(c3) puisque c3 = null et on ne peut pas accder c3.val (dans la
mthode estEgal ) */
_____________________________________________________________________________________________________
Mme A. BENOMAR 90
Chapitre 3 HERITAGE ET INTERFACES EN JAVA

1 GENERALITES SUR LHERITAGE EN JAVA



2 LA CLASSE java.lang.Object

3 MASQUAGE DES ATTRIBUTS ET
REDEFINITION DES METHODES
4 CASTING OU TRANSTYPAGE

5 LES INTERFACES

6 LES CLASSES ABSTRAITES


_____________________________________________________________________________________________________
Mme A. BENOMAR 91
Chapitre 3 HERITAGE ET INTERFACES EN JAVA

1 GENERALITES SUR LHERITAGE EN JAVA

1 1 Dfinition de lhritage

Lhritage est lun des aspects les plus utiles de la


programmation oriente objet. Il permet une classe de
transmettre ses attributs et ses mthodes des sous classes.
Ainsi, si une classe B hrite dune classe A, alors la classe B
contient implicitement lensemble des attributs non privs de A et
peut invoquer toutes les mthodes non prives de la classe A.

_____________________________________________________________________________________________________
Mme A. BENOMAR 92
1- 2 Dclaration de lhritage

En java, pour dclarer lhritage, on utilise le mot cl extends

Syntaxe : class B extends A :


B hrite de A
B est drive de A
B est une sous classe de A
A est la super classe de B

_____________________________________________________________________________________________________
Mme A. BENOMAR 93
1-3 Proprits de lhritage

-En java, lhritage est simple, toute classe ne peut hriter que
dune et une seule classe. Si une classe nhrite daucune autre
classe, elle hrite par dfaut de la super classe Object dfinie dans
la package java.lang

-Une rfrence une classe de base peut tre affecte dune


rfrence une classe drive, linverse doit faire lobjet dune
opration de conversion de type ou cast :
class A {}
class B extends A {}
Soient les instructions : A a= new A();
B b= new B();
a=b; // possible
b= a; // faux
b= (B) a; // peut tre possible
_____________________________________________________________________________________________________
Mme A. BENOMAR 94
1-3 Proprits de lhritage
-Exemple :
class Pere
{ final String nom_famille; // nom de famille est constant par objet Pere
Pere (String nom_famille) // constructeur
{ this.nom_famille=nom_famille; } }
class Fils extends Pere
{String prenom;
Fils(String nom) // Constructeur
{super(nom);} // Appel du constructeur de la super classe (Pere)
public static void main(String[] arg)
{ Pere sonPere= new Pere("SEDRATI");
Fils monFils = new Fils(sonPere.nom_famille); // monFils est de type Pere
System.out.println(" Nom de famille de mon fils " + monFils.nom_famille);
monFils.prenom="Anass";
System.out.println(" Prnom de mon fils "+monFils.prenom);
// sonPere.prenom="Driss"; Faux
sonPere= monFils; // est possible car monFils est de mme type que son pr
monFils=sonPere; est faux ( la rciproque) }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 95
1-3 Proprits de lhritage

-Si la dclaration dune classe est prcde de final, alors cette


classe ne peut pas tre une super classe

final class Mere


{}
class Fille extends Mere { }
// erreur de compilation car la classe Mere ne peut avoir denfants

- Si le constructeur par dfaut dune classe drive est dfini mais


ne commence pas par un appel de constructeur de la classe mre,
Java insre un appel du constructeur par dfaut de la classe mre.

_____________________________________________________________________________________________________
Mme A. BENOMAR 96
1-4- Oprateurs : super et instanceof

- Loprateur super :
Pour faire rfrence la classe parente (super
classe) , il suffit dutiliser le mot cl super. Ce mot permet
dinvoquer un attribut ou une mthode de la super classe
On utilise super(arguments) pour invoquer le
constructeur de la super classe ayant les arguments
correspondants

- Loprateur instanceof :
Loprateur instanceof permet de savoir quelle
classe appartient une instance :

_____________________________________________________________________________________________________
Mme A. BENOMAR 97
1-4- Oprateurs : super et instanceof
class A
{ }
class B extends A
{ }
public class C
{ public static void main(String[] arg)
{ A a= new A();
B b = new B();
C c = new C();
System.out.println( a instanceof A ); // true
System.out.println( a instanceof B );//false
System.out.println( b instanceof A );//true
System.out.println( b instanceof B );//true
a=b;
System.out.println( a instanceof A );//true
System.out.println( a instanceof B );//true
//System.out.println( c instanceof A ); :erreur de compilation
//(c et A ne sont pas de mme type)
} }
_____________________________________________________________________________________________________
Mme A. BENOMAR 98
1-5- Un exemple de lhritage

Prenons la hirarchie suivante :

Personne

Fonctionnaires Profession_liberale Eleve


Chomeur

Avocat Commerant Primaire


MedecinPublic Enseigantt

Les classes Fonctionnaire, Profession_liberale, Eleve et


Chomeur sont drivs de la classe Personne

_____________________________________________________________________________________________________
Mme A. BENOMAR 99
1-5- Exemple
class Personne // la super classe
{
final String nom;
final int annee_naissance;
String adresse; // sauf pour les SDF!!
Personne(String nom,int annee_naissance)
{this.nom=nom;
this.annee_naissance= annee_naissance;}
String getNom()
{ return nom;}
int getNaissance()
{ return annee_naissance;}
public String toString()
{
return("Je suis "+getNom()+" et je suis +
getClass()).getNom();}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 100
1-5- Exemple
class Fonctionnaire extends Personne
{int numeroSomme;
double salaire;
String fonction;
Fonctionnaire(String nom,int annee_naissance,int numeroSomme)
{super(nom,annee_naissance);
this.numeroSomme=numeroSomme;
}
double getSalaire()
{ return salaire;}
}

class MedecinPublic extends Fonctionnaire


{ String specialite;
MedecinPublic(String nom,int annee_naissance,int numeroSomme,
String specialite)
{
super(nom,annee_naissance,numeroSomme);
this.specialite=specialite; }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 101
1-5- Exemple
class Profession_liberale extends Personne
{int numeroCNSS;
double salaire;
String fonction;
double patente; // impot
Profession_liberale(String nom,int annee_naissance,
int numeroCNSS)
{super(nom,annee_naissance);
this.numeroCNSS=numeroCNSS; }
}
class Chomeur extends Personne
{String diplome;
Chomeur(String nom,int annee_naissance)
{super(nom,annee_naissance);}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 102
1-5- Exemple
class Eleve extends Personne
{String classe;
int numeroEleve;
Eleve(String nom,int annee_naissance,String classe,
int numeroEleve)
{super(nom,annee_naissance);
this.numeroEleve=numeroEleve;
this.classe=classe; }
}

public class Heritage


{
public static void main(String[] arg)
{ Personne[] desPersonnes= new Personne[4];
desPersonnes[0]= new Fonctionnaire("F",1980,10);
desPersonnes[1]= new MedecinPublic("M",1970,100," cardiologue");
desPersonnes[2]= new Eleve("E",1990,"INE1",20);
desPersonnes[3]= new Chomeur("C",1980);
_____________________________________________________________________________________________________
Mme A. BENOMAR 103
1-5- Exemple

for(int i=0;i<desPersonnes.length;i++)
System.out.println(desPersonnes[i]);
}
}

- A lexcution :
Je suis F et je suis Fonctionnaire
Je suis M et je suis MedecinPublic
Je suis E et je suis Eleve
Je suis C et je suis Chomeur

_____________________________________________________________________________________________________
Mme A. BENOMAR 104
2- LA CLASSE java.lang.Object
La classe dentte public class Object est la super classe de
toutes les classes Java : toutes ses mthodes sont donc hrites par
toutes les classes.

Voici quelques mthodes lmentaires de la classe Object

2.1. La mthode public final Class getClass()


La mthode getClass() renvoie un objet de la classe Class qui reprsente
la classe de l'objet.

Le code suivant permet de connaitre le nom de la classe de l'objet

Exemple : String nomClasse = monObject.getClass().getName();

_____________________________________________________________________________________________________
Mme A. BENOMAR 105
2- LA CLASSE java.lang.Object
2-2 La mthode public String toString()
La mthode toString() permet d'obtenir la reprsentation d'un
objet quelconque par une chane de caractres. Ainsi lorsque une
rfrence r vers un objet de classe quelconque est dans une expression
en lieu et place d'une chane de caractres c'est en fait la chane
retourne par le message r.toString() qui est utilise dans l'expression.
La mthode toString de la classe Object retourne une chane
correspondant au nom de la classe de l'objet suivi de @ suivi de
l'adresse mmoire de la structure de donnes dfinissant les
caractristiques de l'objet (cette adresse est la valeur contenue dans la
variable rfrencant l'objet).
La mthode toString() est souvent redfinie
_____________________________________________________________________________________________________
Mme A. BENOMAR 106
2- LA CLASSE java.lang.Object
Soit la classe Livre dfinie comme suit
public class Livre
{ double prix;
String titre;
String auteur;
public Livre(double p, String t, String a)
{ prix=p;
titre = t;
auteur = a;
}
public static void main(String[] arg)
{ Livre monLivre= new Livre(50.00,"Programmation en langage
Java","Mme A. BENOMAR");
System.out.println(monLivre);
// La classe Livre ne redfinissant pas la mthode toSTring
// c'est celle hrite de la classe Object qui est invoque.
}
}
// A l'excution, on aura : Livre@ba34f2
_____________________________________________________________________________________________________
Mme A. BENOMAR 107
2- LA CLASSE java.lang.Object
Exemple 2 : Utilisation de la mthode toString() redfinie

public class Livre2


{ String titre;
String auteur;
public Livre2(double p, String t, String a)
{ prix=p;
titre = t;
auteur = a;
}

public String toString()


{ return ("Titre : " +titre +"\n"+"Auteur : " +
auteur + "\n" + "Prix : " + prix);
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 108
2- LA CLASSE java.lang.Object
Exemple 2 : Utilisation de la mthode toString() redfinie
public static void main(String[] arg)
{ Livre2 monLivre= new Livre2(50.00,"Programmation en langage
Java","Mme A. BENOMAR");
System.out.println(monLivre);
// La classe Livre redfinit la mthode toSTring
// c'est celle redfinie qui est invoque.
}
}
- A l'excution, on aura :
Titre : Programmation en langage Java
Auteur : Mme A. BENOMAR
Prix : 50.0
_____________________________________________________________________________________________________
Mme A. BENOMAR 109
2- LA CLASSE java.lang.Object

2-3. La mthode public boolean equals(Object obj)


La mthode equals() implmente une comparaison par dfaut.
Sa dfinition dans Object compare les rfrences : donc
obj1.equals(obj2) ne renverra true que si obj1 et obj2 dsignent le
mme objet. Dans une sous classe de Object, pour laquelle on a
besoin de pouvoir dire que deux objets distincts peuvent tre gaux,
il faut redfinir la mthode equals hrite de Object.
- Dans la classe Object cette mthode est dfinie comme suit :
public boolean equals(Object obj)
{ return (this == obj); }

_____________________________________________________________________________________________________
Mme A. BENOMAR 110
2- LA CLASSE java.lang.Object

2-3. La mthode public boolean equals(Object obj)


Exemple 1 : Utilisation de la mthode equals hrite

public class LivreCompare

{ double prix;

String titre;

String auteur;

public LivreCompare(double p, String t, String a)

{ prix=p;

titre = t;

auteur = a;

}
_____________________________________________________________________________________________________
Mme A. BENOMAR 111
2- LA CLASSE java.lang.Object
2-3. La mthode public boolean equals(Object obj)
Exemple 1 : Utilisation de la mthode equals hrite
public static void main(String[] arg)
{ LivreCompare l1 = new LivreCompare(50.00,"Programmation
en langage Java","Mme A. BENOMAR");
LivreCompare l2 = new LivreCompare(50.00,"Programmation en
langage Java","Mme A. BENOMAR");
System.out.print("Les livres rfrencs par l1 et l2 sont ");
if (l1.equals(l2))
/* ici quivalent l1 == l2 puisque la mthode equals n'est pas
redfinie. On compare le contenu des deux rfrences l1 et l2 (c'est
dire les adresses mmoire des deux Livres */
System.out.println("identiques");
else
System.out.println("diffrents"); }
}
- A lexcution : les livres rfrencs par l1 et l2 sont diffrents
Remarque : Pour avoir un comportement plus conforme ce que l'on attend
pour la mthode equals il faudrait redfinir celle-ci
_____________________________________________________________________________________________________
Mme A. BENOMAR 112
2- LA CLASSE java.lang.Object
2-3. La mthode public boolean equals(Object obj)
Exemple 2 : Utilisation de la mthode equals redfinie
public class LivreCompare2
{
double prix;
String titre;
String auteur;
public LivreCompare2(double p, String t, String a)
{ prix=p;
titre = t;
auteur = a; }
public boolean equals(LivreCompare2 l)
{ return (this.titre.equals(l.titre) && this.auteur.equals(l.auteur)
&& this.prix == l.prix); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 113
2- LA CLASSE java.lang.Object
2-3. La mthode public boolean equals(Object obj)
Exemple 2 : Utilisation de la mthode equals redfinie
public static void main(String[] arg)
{ LivreCompare2 l1 = new LivreCompare2 (50.00,
"Programmation en langage Java","Mme A. BENOMAR");
LivreCompare2 l2 = new LivreCompare2 (50.00,
"Programmation en langage Java","Mme A. BENOMAR");
System.out.print("Les livres rfrencs par l1 et l2 sont ");
if (l1.equals(l2)) // ici on compare les attributs de l1 et l2
System.out.println("identiques");
else
System.out.println("diffrents");
}
- A lexcution : les livres rfrencs par l1 et l2 sont identiques
_____________________________________________________________________________________________________
Mme A. BENOMAR 114
2- LA CLASSE java.lang.Object
2-4. La mthode protected void finalize()
A l'inverse de nombreux langages orients objet tel que le C+
+ ou Delphi, le programmeur Java n'a pas se proccuper de la
destruction des objets qu'il instancie. Ceux-ci sont dtruits et leur
emplacement mmoire est rcupr par le ramasse miette de la
machine virtuelle ds qu'il n'y a plus de rfrence sur l'objet.
La machine virtuelle garantit que toutes les ressources Java
sont correctement libres mais, quand un objet encapsule une
ressource indpendante de Java (comme un fichier par exemple), il
peut tre prfrable de s'assurer que la ressource sera libre quand
l'objet sera dtruit. Pour cela, la classe Object dfinit la mthode
protected finalize, qui est appele quand le ramasse miettes doit
rcuprer l'emplacement de l'objet ou quand la machine virtuelle
termine son excution

_____________________________________________________________________________________________________
Mme A. BENOMAR 115
3- Masquage des attributs et redfinition des mthodes

- On dit quun attribut dune classe masque un attribut


dune super classe sil a le mme nom quun attribut de la super
classe
- On dit quune classe redfinit une mthode dune super
classe si elle dfinie une mthode ayant mme nom, mme suite
de types darguments et mme valeur de retour quune mthode
de la super classe

Il ya une diffrence dans la faon dont le masquage dattributs et


la redfinition des mthodes sont traites en java

_____________________________________________________________________________________________________
Mme A. BENOMAR 116
3- Masquage des attributs et redfinition des mthodes

Supposons quune classe A possde un attribut attr et une mthode


meth et quune classe B tendant A dfinisse un attribut de mme nom attr et
redfinisse la mthode meth.
Considrons alors les dclarations suivantes :
A a // dclaration d un objet a de la classe A
B b = new B() ; // declaration et creation dun objet b de la classe B
a = b ; // Tout objet de B est objet de A
Alors :
b.attr est lattribut attr de la classe B
a.attr est lattribut attr de la classe A
Par contre :
b.meth est la mthode redfinie dans B
a.meth est la mthode redfinie dans B

_____________________________________________________________________________________________________
Mme A. BENOMAR 117
class A
{ int attr=10;
void meth()
{ System.out.println("Je suis la mthode de A"); }
}
class B extends A
{
int attr=20;
void meth()
{ System.out.println("Je suis la mthode de B"); }
}
public class Masque
{ public static void main(String[] argv)
{Aa;
B b = new B();
a=b;// car b est aussi un objet de la classe A (hritage)
System.out.println("b.attr= "+b.attr);
System.out.println("a.attr= "+a.attr);
b.meth();
a.meth(); }
_____________________________________________________________________________________________________
}
Mme A. BENOMAR 118
A l'excution , on aura :
b.attr= 20
a.attr= 10
Je suis la mthode de B
Je suis la mthode de B */

_____________________________________________________________________________________________________
Mme A. BENOMAR 119
4- casting ou transtypage
Le casting (mot anglais qui signifie moulage ), galement appel transtypage,
consiste effectuer une conversion dun type vers un autre type. Le casting peut tre
effectu dans deux conditions diffrentes :

Vers un type plus gnral. On parle alors de sur-casting.

Vers un type plus particulier. On parle alors de sous- casting.

- Dans le cas des primitives, le sur-casting consiste convertir vers un type


dont la prcision est suprieure. C'est le cas, par exemple, de la conversion d'un
byte en short, d'un int en long ou d'un float en double. On parlera en revanche de
sous-casting lors de la conversion d'un type vers un autre de prcision infrieure,
par exemple de double en float, de long en int ou de short en byte.

_____________________________________________________________________________________________________
Mme A. BENOMAR 120
4- casting ou transtypage

A l'inverse du sur-casting, le sous-casting prsente un risque


de perte d'informations. C'est pourquoi Java est autoris effectuer
de faon implicite un sur-casting, alors qu'un sous-casting doit tre
demand explicitement par le programmeur.

-Un casting explicite peut tre effectu simplement en faisant


prcder la valeur par l'indication du nouveau type entre parenthses

_____________________________________________________________________________________________________
Mme A. BENOMAR 121
Exemple :

class Casting
{ static float f1,f2;
static double d1,d2;
public static void main (String[] arg)
{
f1=(float)10.5; // sous casting 10.5 est considre double
d1=f1; // pas de problme sur casting implicite : float en double
//Java est autoris effectuer de faon implicite un sur-casting
System.out.println("d1 est gal :"+d1);

d2=12.5;
// f2=d2 est interdit sous-casting doit tre demand explicitement.
f2= (float) d2;// conversion d'un double en float : sous casting explicite
System.out.println("f2 est gal :"+f2);
}
}
d1 est gal :10.5
f2 est gal :12.5
_____________________________________________________________________________________________________
Mme A. BENOMAR 122
Casting des objets

Il est possible dutiliser le casting dobjets. Cela ncessite une


conversion de classe.
Exemple :

class Animal
{}

class Chien extends Animal


{ int taille = 80; }

class Conversion
{ public static void main (String[] argv)
{
Chien chien; // dclaration dun objet de type Chien
Animal animal = new Chien ();
chien = (Chien)animal;
System.out.println(" Ce chien mesure : "+ chien.taille +" cm");
_____________________________________________________________________________________________________
Mme A. BENOMAR 123
Casting des objets

animal = new Animal(); // cration dun objet de type Animal


// chien = (Chien)animal; //erreur dexecution
System.out.println(" Tout animal ne peut pas tre converti en
chien");
}
}

A lexcution :
Ce chien mesure : 80 cm
Tout animal ne peut pas tre converti en chien

_____________________________________________________________________________________________________
Mme A. BENOMAR 124
5 - LES INTERFACES

5-1 Dfinition dune interface

Une interface est un type purement abstrait au sens o il ne dfinit


aucune implmentation et ne comporte pas de constructeur : une
interface dclare uniquement des mthodes publiques
Une interface ne contient que des prototypes de mthodes et des
constantes ayant les modificateurs static et final
Une interface sert regrouper des constantes et traiter des
objets qui ne sont pas tous ncessairement de la mme classe mais
qui ont en commun une partie . Cette partie sera gre par linterface
Les interfaces portent souvent des noms se terminant en able. Par
exemple (Comparable ,Runnable, )

_____________________________________________________________________________________________________
Mme A. BENOMAR 125
5-2- Prsentation dune interface
Une interface se compose de deux parties :
- len-tte
- le corps

Entte dune interface

[modificateur] interface <Nom> [extends interface>]

[]: optionnel

< > : obligatoire

gras : mot cl
_____________________________________________________________________________________________________
Mme A. BENOMAR 126
Remarques :

- Une interface peut avoir le modificateur public .

- Une interface est toujours abstract sans quil soit ncessaire de


lindiquer

- Elle peut tre attribue un package . Si elle ne lest pas, elle fera
partie du package par dfaut

- Une interface peut driver de plusieurs autres interfaces ( hritage


multiple pour les interfaces et non pas pour les classes)

interface I1
{}

abstract interface I2 //abstract nest s ncessaire


{}

public interface I3 extends I1,I2 //hritage multiple


{}
_____________________________________________________________________________________________________
Mme A. BENOMAR 127
Corps dune interface

Le corps dune interface contient une liste de constantes et de


prototypes de mthodes.

La syntaxe dune dclaration dune interface est la suivante :


entte
{
dclarations des constantes et des prototypes de mthodes
}
Exemple : interface Ecriture
{ static final int LIGNE_MAX = 50 ;
void ecrire() ;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 128
5- 3 Utilisation dune interface

- Pour utiliser une interface , on doit utiliser le mot cl implements


suivi de la liste des interfaces dont la classe drive ,spares par
des virgules. exemple : class A implemets I1, I2

- Une interface I peut tre implmente par une classe A signifie :


* La classe A dclare implmenter linterface I
* Toutes les mthodes figurant dans linterface I doivent tre
dfinie par la classe A
* Une classe qui implmente une interface devra dclarer publiques
toute les mthodes dfinies de linterface

- Si une classe A implmente une interface I, les sous classes de A


implmentent aussi automatiquement I

_____________________________________________________________________________________________________
Mme A. BENOMAR 129
Utilisation dune interface

Une interface peut tre utilise comme une classe.

Si I est une interface, on pourra rfrencer par objI de

type I nimporte quel objet dune classe implmentant

linterface I et on pourra appliquer cet objet une

mthode dclare dans linterface ( qui est

ncessairement redfinie dans la classe de lobjet

rfrence par i)

_____________________________________________________________________________________________________
Mme A. BENOMAR 130
interface I
{ . }

class A Implements I
{ }

class B implements I
{ . }

public class C implements I


{
public static void main(String[] arg)
{
I objI;
objI= new A();
objI = new B();
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 131
5- 4 Exemple dutilisation dune interface
interface Demeure
{ void affiche_commentaire(); }
class Appartement implements Demeure
{
public void affiche_commentaire()
{ System.out.println("La demeure est un joli appartement") ;}
}
class Villa implements Demeure
{
public void affiche_commentaire()
{ System.out.println("La demeure est une villa splendide") ;} }

class Baraque implements Demeure


{ public void affiche_commentaire()
{ System.out.println("La demeure est une baraque : seul
abri des pauvres") ;}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 132
public class UtiliseInterface
{
public static void main(String[] argv)
{
Demeure[] table_demeures= new Demeure[3];

table_demeures[0] = new Appartement();


table_demeures[1] = new Villa();
table_demeures[2] =new Baraque();

for(int i=0;i<table_demeures.length;i++)
table_demeures[i].affiche_commentaire();
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 133
6 DEFINITION DUNE CLASSE ABSTRAITE

- Une classe abstraite est une classe qui contient au


moins une mthode abstraite, elle doit tre dclare avec le
modificateur abstract

- Dans une classe, une mthode est dite abstraite si


seul son prototype figure. Elle na pas de dfinition explicite

- Une classe abstraite ne peut pas tre instancie , il


faut ltendre pour pouvoir lutiliser

_____________________________________________________________________________________________________
Mme A. BENOMAR 134
EXEMPLE : UNE CLASSE ABSTRAITE POUR MODELISER DES
FORMES GEOMETRIQUES

La classe Forme modlise des formes gomtriques planes. Elle contient deux
mthodes abstraites (perimetre et surface) et deux mthodes non abstraites
(estPlutotRond et description)
abstract class Forme
{
abstract float perimetre();
abstract float surface();
boolean estPlutotRond()
{
float lePerimetre=perimetre();
return surface() <= lePerimetre*lePerimetre/16;
}
void description()
{
if(estPlutotRond())
System.out.println(this + "s'etale au moins comme uncarre");
else
System.out.println(this + "s'etale moins q'un carre");
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 135
La classe Disque tend la classe Forme et dfinit les deux mthodes abstraites
de celle ci . Elle dfinit aussi la mthode toString de java.lang.Object

class Disque extends Forme


{
private int rayon;

Disque( int rayon)


{ this.rayon=rayon ; }

float perimetre()
{
return (float)(2*Math.PI*rayon);}

float surface()
{
return (float)Math.PI*rayon*rayon; }

public String toString() // redfinition de la mthode toString


{
return ("Le disque de rayon "+ rayon);
}
} //fin de la classe
_____________________________________________________________________________________________________
Mme A. BENOMAR 136
La classe Rectangle tend la classe Forme et dfinit les deux mthodes
abstraites de celle ci . Elle dfinit aussi la mthode toString de java.lang.Object

class Rectangle extends Forme


{
private int longueur,largeur;

Rectangle (int longueur, int largeur)


{ this.longueur=longueur;
this.largeur=largeur;
}

float perimetre()
{ return 2* (longueur+largeur) ; }

float surface()
{ return longueur*largeur; }

public String toString()


{ return ("Le rectangle de longueur "+longueur+ "et de largeur "+largeur); }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 137
La class EssaiForme montre quon peut rfrencer avec une
variable de type Forme un objet Disque ou bien un objet Rectangle
puisque ces deux dernires classes hritent de la classe Forme
class EssaiFormes
{
public static void main(String[] argv )
{
Forme[] desFormes = new Forme[5];

desFormes[0]=new Disque(1);
desFormes[1]=new Disque(2);
desFormes[2]=new Disque(3);
desFormes[3]=new Rectangle(1,1);
desFormes[4]=new Rectangle(2,1);

for (int i = 0 ; i < desFormes.length ; i++)


desFormes[i].description();
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 138
Chapitre 4 LES COLLECTIONS DE DONNEES

INTRODUCTION

1- GENERALITES SUR LES COLLECTIONS EN JAVA

2- LINTERFACE java.util.Collection

3- LES LISTES

4- LES ENSEMBLES

5- LES MAP

6- LES CLASSES UTILITAIRES

_____________________________________________________________________________________________________
Mme A. BENOMAR 139
Chapitre 4 LES COLLECTIONS DE DONNEES
Introduction
Les collections permettent de stocker un nombre variable d'lments de
types identiques ou diffrents. Les collections se dmarquent des
tableaux dans la mesure ou elles ont la capacit de s'tendre et de
diminuer au gr, respectivement, des ajouts et des suppressions
d'lments. Cela permet d'viter de consommer des ressources
mmoires inutilement en initialisant un tableau une taille prdfinie en
sachant que celui-ci risque de ne pas tre totalement rempli lors des
diffrentes tapes d'excution d'un programme. Dans ce cas, une
collection possdera la facult d'adapter sa taille tous changements.
Le principe de collections de donnes repose sur un ensemble doutils
permettant de regrouper sous forme d'un objet unique diffrents
lments (par exemple un ensemble de donnes constituant un rpertoire
dabonns au tlphone).
_____________________________________________________________________________________________________
Mme A. BENOMAR 140
Chapitre 4 LES COLLECTIONS DE DONNEES
Introduction
Les collections permettent de stocker un nombre variable d'lments de
types identiques ou diffrents. Les collections se dmarquent des
tableaux dans la mesure ou elles ont la capacit de s'tendre et de
diminuer au gr, respectivement, des ajouts et des suppressions
d'lments. Cela permet d'viter de consommer des ressources
mmoires inutilement en initialisant un tableau une taille prdfinie en
sachant que celui-ci risque de ne pas tre totalement rempli lors des
diffrentes tapes d'excution d'un programme. Dans ce cas, une
collection possdera la facult d'adapter sa taille tous changements.
Le principe de collections de donnes repose sur un ensemble doutils
permettant de regrouper sous forme d'un objet unique diffrents
lments (par exemple un ensemble de donnes constituant un rpertoire
dabonns au tlphone).
_____________________________________________________________________________________________________
Mme A. BENOMAR 141
1- GENERALITES SUR LES COLLECTIONS JAVA
1-1 Dfinition dune collection
Une collection reprsente un groupe d'objets, connu par ses
lments et utilis pour stocker, rechercher et manipuler ces lments
Les collections peuvent permettre des lments en double (ou
doublons) l'image des listes, ou parfois les interdisent telles que les
ensembles.
Le langage Java dispose de plusieurs outils destins grer des
collections dune faon unifie qui met en oeuvre :
- des interfaces qui permettent la manipulation des collections
indpendamment de leurs reprsentations (linterface Collection,
linterface List, )
- des classes qui implmentent les interfaces prcdentes (la
classe Vector, ArrayList,)
- des mthodes qui ralisent des oprations utiles (add(),
contains(),..)
_____________________________________________________________________________________________________
Mme A. BENOMAR 142
1- GENERALITES SUR LES COLLECTIONS JAVA
1-2 Organisation des collections
Lensemble de ces outils java (interfaces, classes,
mthodes) qui permettent la mise en uvre des collections
est organis dans le package java.util selon deux
hirarchies :
Linterface java.util.Collection et linterface java.util.Map

_____________________________________________________________________________________________________
Mme A. BENOMAR 143
1- GENERALITES SUR LES COLLECTIONS JAVA

1 - 3 Le type Collection

*Linterface Collection reprsente les collections o tous les


lments sont des structures capables de contenir des objets de
diffrents types accessibles squentiellement Elle possde 3 sous
interfaces List, Set et SortedSet
* Linterface List reprsente une collection dlments dans
laquelle chaque lment peut tre insr (en dbut, fin ou une
certaine position). Les lments peuvent tre dupliqus.
* Linterface Set reprsente une collection dlments dans
laquelle les lments ne peuvent pas, tre dupliqus . Linterface Set
met en oeuvre le concept d'ensemble.
* Linterface SortedSet reprsente un ensemble tri
_____________________________________________________________________________________________________
Mme A. BENOMAR 144
1- GENERALITES SUR LES COLLECTIONS JAVA
1 - 4 Le type Map

*Linterface Map permet de grer des tableaux associatifs


qui permettent de lier un objet cl un autre objet valeur.
Linterface Map reprsente une collection de couples (cl,
valeur); un Map ne peut contenir de doublon; une cl
correspond une et une seule valeur; on accde aux valeurs
par leur cl.

* Linterface SortedMap reprsente un ensemble tri de


couples (cl,valeur).

_____________________________________________________________________________________________________
Mme A. BENOMAR 145
2- L'INTERFACE java.util.Collection
1 - 2 Architecture et organisation de linterface
Collection
Linterface Collection est utilise pour transmettre des
collections et les manipuler avec le maximum de gnralits. Des sous-
interfaces particulires sont fournies par ailleurs (Set, SortedSet ou
List).
voici un aperu de la hirarchie Linterface java.util.Collection:

_____________________________________________________________________________________________________
Mme A. BENOMAR 146
2- L'INTERFACE java.util.Collection
2-2 Les mthodes de l'interface Collection
Mthode Description
boolean add(Object o) Ajoute llment donn
boolean addAll(Collection c) Ajoute tous les lments de la collection donne
void clear() Supprime tous les lments de cette collection
boolean contains(Object o) Retourne true si cette collection contient llment donn
boolean containsAll(Collection c) Retourne true si cette collection contient tous les lments
de la collection
boolean equals(Object o) Vrifie lgalit entre lobjet donn et la collection
int hashCode() Retourne la valeur de code de hashage de la collection
boolean isEmpty() Retourne true si cette collection ne contient aucun lment
Iterator iterator() Retourne un itrateur sur les lments de cette collection
boolean remove(Object o) Supprime lobjet o de la collection
boolean removeAll(Collection c) Supprime tous les lments de la collection
boolean retainAll(Collection c) Ne conserve que les lments contenus dans la collection c
int size() Retourne le nombre dlments de la collection
Object[] toArray() Retourne un tableau contenant tous les lments de cette
collection
Object[] toArray(Object[] t) Retourne un tableau contenant tous les lments de cette
_____________________________________________________________________________________________________
collection dont le type correspond celui du tableau donn
Mme A. BENOMAR 147
2-3 Les classes implmentant l'interface Collection

Les implmentations de l'interface Collection sont


AbstractCollection, AbstractList, AbstractSet, ArrayList,
HashSet, LinkedHashSet, LinkedList, TreeSet et Vector.
Toute classe implmentant lune de ces interfaces
Collection devrait contenir un constructeur sans paramtre
crant une collection vide et un constructeur avec un
argument construisant une collection contenant les mmes
lments que son argument.

_____________________________________________________________________________________________________
Mme A. BENOMAR 148
3- LES LISTES
Une liste en java contient une squence ordonne d'lments
avec possibilit de doublons. Une liste en java est reprsente par
linterface List.
Les lments dune liste sont accessibles soient par :
- leur position ou indice (comme un tableau)
- un itrateur

3 1 Linterface java.util.List
Linterface java.util.List est dfinie sous la forme :
public interface List extends Collection
L'interface List tend linterface Collection et ajoute les possibilits
suivantes :
- Accs aux lments par leur position;
- Recherche de la position d'lments;
L'interface List est implmente par les classes AbstractList,
ArrayList, LinkedList, et Vector.
_____________________________________________________________________________________________________
Mme A. BENOMAR 149
3-2 Mthodes ajoutes dans l'interface List
Mthode Description
void add(int index, Object element) insre un objet l'index spcifi, au sein de la liste courante.
insre tous les lments de la collection spcifie, l'index donn au sein
boolean addAll(int index, Collection c)
de la liste.
Object get(int index) retourne l'lment la position spcifie dans la liste.
int hashCode() retourne le code de hachage de la liste.
retourne la position de la premire occurrence de l'objet au sein de la liste
int indexOf(Object o)
courante, ou -1 s'il n'a pu tre trouv.
retourne la position de la dernire occurrence de l'objet spcifi au sein de
int lastIndexOf(Object o)
la liste, ou -1 s'il n'a pu tre trouv.
retourne un itrateur de liste sur les lments de l'objet List partir de la
ListIterator listIterator(int index)
position spcifie.
Object remove(int index. supprime l'lment positionn l'index spcifi au sein de la liste.
remplace l'lment la position spcifie dans la liste, par l'objet pass en
Object set(int index, Object element
argument.
retourne une partie de la liste, dlimite par les index fromIndex inclus et
List subList(int fromIndex, int toIndex.
toIndex exclus.
Object remove(int index). supprime l'lment positionn l'index spcifi au sein de la liste.
remplace l'lment la position spcifie dans la liste, par l'objet pass en
Object set(int index, Object element)
argument.
retourne une partie de la liste, dlimite par les index fromIndex inclus et toIndex
List subList(int fromIndex, int toInindex.
_____________________________________________________________________________________________________
exclus.
Mme A. BENOMAR 150
3-3 La classe java.util.Vector
Son entte :
public class Vector extends AbstractList implements
List
La classe Vector permet de crer une collection
d'objets qui fonctionne de la mme manire qu'un tableau,
l'exception que sa capacit peut varier en fonction des
besoins.
Une allocation de mmoire dynamique est utilise par
les objets Vector, si bien qu'il est possible d'ajouter, de
supprimer aisment leurs lments, soit de faire varier leur
taille dynamiquement.
De cette manire, un vecteur peut stocker un nombre
quelconque d'objets de type Object, soit n'importe quel
genre d'objets (String, Integer, URL, Date, etc.). Par contre,
un vecteur n'accepte pas les valeurs de types primitifs qui
doivent tre converties en objet par l'intermdiaire de leur
_____________________________________________________________________________________________________
classe
Mme s (double -> Double, char -> Character, etc.). .
A. BENOMAR 151
3-3-1 Les attributs ( les champs) de la classe Vector-

-protected Object[]elementData un tableau de donnes interne du


vecteur

-protected int elementCount : le nombre d'lments effectif contenu


dans le vecteur

-protected int capacityIncrement : le pas dincrmentation lorsque la


capacit dun vecteur est dpass. Lorsque ce pas gale ou < 0. La
capacit du vecteur double chaque accroissement

Remarque : Ces trois champs elementData, elementCount et


capacityIncrement sont en mode protected, cest dire que seuls les
classes du mme package que la classe Vector y ont accs
_____________________________________________________________________________________________________
Mme A. BENOMAR 152
3-3-2 Les constructeurs de la classe Vector

Un vecteur comporte quatre constructeurs permettant


d'initialiser les instances de cette classe.

1* public Vector() : Ce premier constructeur permet de crer


un vecteur initialement vide auquel il sera possible d'ajouter des
lments via une mthode spcifique. La capacit par dfaut de ce
vecteur est 10 et le pas dincrmentation contenu dans le champ
capacityIncrement est 0

_____________________________________________________________________________________________________
Mme A. BENOMAR 153
Exemple
import java.util.*;
class Vecteur1
{ public static void main(String args[])
{
Vector v = new Vector();
System.out.println ("Nombre d'lments : " + v.size()); //0
System.out.println ("Capacit du vecteur "+ .capacity()); //10
v.add(new Integer(1));// un entier
v.add("Mon premier vecteur");// une chane
v.add(new Double(0.5));
System.out.println ("Nombre d'lments : " + v.size()); //3
System.out.println ("Capacit du vecteur "+ .capacity());//10
for(int i = 0; i < v.size(); i++)
System.out.println ("Element " +i+" : "+ v.elementAt(i));
for(int i = 0; i < 10; i++)
v.add(new Integer(i));
System.out.println ("Nombre d'lments : " + v.size());//13
System.out.println ("Capacit du vecteur "+ .capacity());}//20
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 154
2* public Vector(int initialCapacity) : Ce second
constructeur permet d'initialiser le vecteur une certaine
capacit fournie en argument. Dans ce cas, la valeur
contenu par chacun des lments est null.

Exemple : On reprend le mme exemple que pour la


classe Vecteur1 et on cre le vecteur v comme suit :
Vector v = new Vector(5);
/*Nombre d'lments : 0
Taille du vecteur : 5
Nombre d'lments : 3
Capacit du vecteur : 5
Element 0 : 1
Element 1 : Mon premier vecteur
Element 2 : 0.5
Nombre d'lments : 13
Capacit du vecteur : 20 */
_____________________________________________________________________________________________________
Mme A. BENOMAR 155
3* public Vector(int initialCapacity,int capacityIncrement) :
Ce troisime constructeur permet d'initialiser le vecteur une certaine
capacit tout en veillant galement dfinir un pas d'incrmentation de
sa capacit suite un dpassement, palliant ainsi la contrainte du
constructeur prcdent.
Exemple : On reprend le mme exemple que pour la classe Vecteur1 et
on cre le vecteur v comme suit : Vector v = new Vector(5,1);
/* A lexcution, on aura :
Nombre d'lments : 0
Capacit du vecteur : 5
Nombre d'lments : 3
Capacit du vecteur : 5
Element 0 : 1
Element 1 : Mon premier vecteur
Element 2 : 0.5
Nombre d'lments : 13
Capacit du vecteur : 13*/
_____________________________________________________________________________________________________
Mme A. BENOMAR 156
4* public Vector(Collection c)
Ce quatrime constructeur permet de construire un
vecteur partir d'une collection passe en argument. Cette
collection doit implmenter l'interface Collection, l'image
de ArrayList, HashSet, LinkedHashSet, LinkedList, TreeSet
et mme Vector.

_____________________________________________________________________________________________________
Mme A. BENOMAR 157
Exemple :
import java.util.*;
class Vecteur4
{ public static void main(String args[])
{ ArrayList collection = new ArrayList();
collection.add("lundi");
collection.add("mardi");
collection.add("mercredi");
collection.add("jeudi");
collection.add("vendredi");
collection.add("samedi");
collection.add("dimanche");
collection.add(new Integer(4));
Vector vecteur = new Vector(collection);
for(int i = 0; i < vecteur.size(); i++)
System.out.println (vecteur.elementAt(i));
System.out.println ("Taille du vecteur : " + vecteur.size());//8
System.out.println ("Capacit du vecteur : " +
vecteur.capacity()); //8
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 158
3-3-3 Quelques mthodes de la classe Vector
Mthodes de gestion de taille dun vecteur

- La mthode public int capacity() : Cette mthode


permet rcuprer la capacit du vecteur. La capacit
correspond la longueur du tableau de donnes interne
conserv dans le champ elementData d'un vecteur, par
contre la mthode public int size() retourne la taille du
vecteur qui correspond au nombre d'lments effectif
contenu dans le champ elementCount du vecteur.

- La mthode public void setSize(int taille) dtermine une


nouvelle taille pour le vecteur,

_____________________________________________________________________________________________________
Mme A. BENOMAR 159
- La mthode public void ensureCapacity(int capacite) augmente la capacit
du vecteur si ncessaire
La mthode public void trimToSize() adapte la capacit la taille courante
du vecteur.
- Les mthodes dajout dlments dans un vecteur
L'ajout d'objets dans un vecteur s'accompli par l'intermdiaire de plusieurs
mthodes dont la plupart sont prfixes par add.
La mthode void add(int index, Object element) insre un lment la
position spcifie.
La mthode boolean add(Object obj) ajoute un lment la fin du vecteur.
La mthode boolean addAll(Collection col) ajoute une collection d'lments
la fin du vecteur.
La mthode boolean addAll(int index, Collection col) ajoute une collection
d'lments l'index spcifi dans le vecteur.
La mthode void addElement(Object obj) ajoute un objet la fin du vecteur.
La mthode void insertElementAt(Object obj, int index) insre un objet
l'index spcifi du vecteur.
_____________________________________________________________________________________________________
Mme A. BENOMAR 160
- Les mthodes de suppression dlments dans un vecteur
La suppression est prise en charge par plusieurs mthodes de la classe Vector
commenant en gnral par remove. La suppression d'un ou plusieurs lments
entrane une rorganisation du vecteur, c'est--dire que l'emplacement d'un lment
effac et immdiatement remplac par l'lment suivant et cela en cascade
jusqu'au dernier lment du vecteur.
la mthode Object remove(int index) supprime l'objet l'index spcifi et le
retourne.
La mthode boolean remove(Object obj) supprime la premire occurrence de
l'objet trouve dans le vecteur.
La mthode boolean removeAll(Collection col) supprime tous les lments de la
collection qui sont contenus dans le vecteur.
La mthode void removeAllElements() supprime tous les lments et remet
zro la taille du vecteur.
La mthode boolean removeElement(Object obj) supprime la premire
occurrence de l'lment du vecteur.
La mthode void removeElementAt(int index) efface l'lment l'index spcifi.
La mthode protected void removeRange(int debut, int fin) supprime les lments
situs dans un intervalle spcifi par les arguments.
La mthode void clear() supprime tous les lments dans le vecteur.
La mthode boolean retainAll(Collection col) retient les lments de la collection
et supprime tous les autres du vecteur.
_____________________________________________________________________________________________________
Mme A. BENOMAR 161
Exemple : ajout et suppression dlments dans un
vecteur
import java.util.*;
public class VecteurSupprim
{ public static void main(String[] args)
{ Vector vecteur = new Vector();
vecteur.add("lundi"); vecteur.add("mardi");
vecteur.add("mercredi"); vecteur.add("jeudi");
vecteur.add("Vendredi");
Vector v1 = new Vector(vecteur);
Vector v2 = new Vector(vecteur);
v1.removeAllElements();
v2.clear();
System.out.println ("La taille du vecteur (1, 2) : "
+ v1.size() + ", " + v2.size() ); // 0,0
System.out.println ("La capacit du vecteur (1, 2) : "
+ v1.capacity() + ", " + v2.capacity());// 5,5
} }
_____________________________________________________________________________________________________
Mme A. BENOMAR 162
- Les mthodes de consultation des lments
La consultation des lments prsents dans une collection Vector
s'effectue par l'intermdiaire de diverses mthodes permettant de
rcuprer un lment prcis ou plusieurs.
- La mthode Object elementAt(int index) retourne l'lment
trouv l'index spcifi.
- La mthode Enumeration elements() retourne la liste de tous les
lments du vecteur dans un objet Enumeration.
- Les mthodes Object firstElement() et Object lastElement()
retournent respectivement le premier et le dernier lment du
vecteur.
- Les mthodes Object[] toArray() et Object[] toArray(Object[]
obj) retournent un tableau d'objets contenant les lments du
vecteur. La seconde mthode remplit le tableau pass en
argument et retourne galement un tableau de mme contenu que
le premier. Ainsi dans ce cas, il est inutile d'utiliser la valeur de
retour de cette mthode.
_____________________________________________________________________________________________________
Mme A. BENOMAR 163
Exemple
import java.util.*;
public class VecteurTableau
{ public static void main(String[] args) {
Vector vecteur = new Vector();
vecteur.add("lundi");
vecteur.add("mardi");
vecteur.add("mercredi");
vecteur.add("jeudi");
vecteur.add("vendredi");
Object[] tabCh2 = new Object[10];
Object[] tabCh = vecteur.toArray(tabCh2);
for(int i = 0; i < tabCh.length; i++)
System.out.println (tabCh[i]);
for(int i = 0; i < tabCh2.length; i++)
System.out.println (tabCh2[i]);
} }
_____________________________________________________________________________________________________
Mme A. BENOMAR 164
A lexcution
lundi
mardi
mercredi
jeudi
vendredi
null
null
null
null
null
lundi
mardi
mercredi
jeudi
vendredi
null
null
null
null
Null
Remarque : tabchar et tabchar2 ont la mme taille (10) et contiennent les mmes lments
_____________________________________________________________________________________________________
Mme A. BENOMAR 165
3- 4 La classe java.util.ArrayList
Un objet de la classe ArrayList est un tableau qui se redimensionne
automatiquement. Il accepte tout type d'objets, null y compris.
Chaque instance d'ArrayList a une capacit, qui dfinit le nombre
d'lments qu'on peut y stocker. Au fur et mesure qu'on ajoute des
lments et qu'on " dpasse " la capacit, la taille augmente en
consquence.
La classe ArrayList est trs similaire la classe Vector.car elle
utilise un tableau en interne pour ranger les donnes et fournit un accs aux
lments par leur indice
Le principal intrt d'une ArrayList est de pouvoir facilement ajouter
un lment la liste. En effet, le tableau utilis en interne est surdimensionn
par rapport au besoin.
Ainsi une ArrayList initialis une taille de 5 lments pourra en
contenir beaucoup plus (jusqu 20 millions dentres).
Lorsque que l'on ajoutera un nouvel lment, il sera plac dans la
1re case libre du tableau interne ; on ne sera pas amen instancier un
nouveau tableau. Evidement, force d'ajouter des lments, le tableau
interne peut se trouver satur, dans ce cas un nouveau tableau est cr
automatiquement et les anciennes valeurs y sont recopies. Toutes ces
_____________________________________________________________________________________________________
oprations
Mme A. BENOMAR
sont transparentes.
166
3.4.1.Les constructeurs de ArrayList
Il existe 3 types de constructeurs pour la classe ArrayList :
ArrayList maAList = ArrayList(); // On construit un tableau vide dune
taille par dfaut de 10.
ArrayList maAList = ArrayList(int initialCapacity); // On initialise la taille
du tableau initialCapacity
ArrayList maAList = ArrayList(Collection c);
// On construit un tableau partir dune Collection passe en argument.

3-4 -2 Les oprations principales sur un ArrayList sont :


add(Object o) : ajoute l'objet o la fin du ArrayList
clear() : vide le ArrayList
get(int index) : renvoie l'Object l'index spcifi. Renvoie une exception
si vous dpassez le tableau (IndexOutOfBoundsException)
size() : renvoie la taille du ArrayList

_____________________________________________________________________________________________________
Mme A. BENOMAR 167
// Les mthodes de la classe ArrayList
//Informations
size(); trimToSize(); hashCode(); minCapacity);
// Positional Access
Object get( index); Object set( index, Object element); add(Object
element); index, Object element); index, Collection c);
addAll(Collection c); clear(); Object remove( index); remove(Object
element); removeAll(Collection c); toIndex); Object
retainAll(Collection c);
// Search
indexOf(Object o); lastIndexOf(Object o); containsAll(Collection c);
contains(Object element); isEmpty();
// Comparator equals (Object element);
// Iteration Iterator iterator(); ListIterator listIterator(); ListIterator
listIterator(int debut);
// Range-view List subList( to); Object clone(); Object[] toArray();
Object[] toArray(Object[] element);
_____________________________________________________________________________________________________
Mme A. BENOMAR 168
Exemple dutilisation dun ArrayList :
List maListe = ArrayList(12);
for( i = 0; i < 12; i++)
{ maListe.add("lment" + i); }
Iterator it = maListe.iterator();(it.hasNext())
{ System.out.println(it.next().toString()); }

Affichage :
lment0
lment1
lment2
lment3
lment4
lment5
lment6
lment7
lment8
lment9
lment10
lment11
_____________________________________________________________________________________________________
Mme A. BENOMAR 169
4 LES ENSEMBLES
4-1 Linterface java.util.Set

Les objets de java.util.Set sont des ensembles d'lments


uniques. En effet, contrairement linterface List, un objet Set ne
contient pas de doublons ; si un nouvel objet insr existe dj, il ne
sera pas ajout la collection.

La classe HashSet, qui implmente linterface Set est la plus


utilise. Ce type de collection garantit des performances constantes
selon ce que lon ajoute, efface ou recherche.

_____________________________________________________________________________________________________
Mme A. BENOMAR 170
Quelques mthodes de linterface Set
size();
add(Object element);
addAll(Collection c);
clear();
remove(Object element);
removeAll(Collection c);
Object retainAll(Collection c);
containsAll(Collection c); contains(Object element);
isEmpty(); equals(Object element); Iterator
iterator(); Object[] toArray(); Object[]
toArray(Object[] element);

- Les principales implmentations de Set sont :


HashSet, TreeSet,SortedSet

_____________________________________________________________________________________________________
Mme A. BENOMAR 171
4-2 La classe .HashSet
Les collections HashSet organisent des lments uniques dont
lordre ditration est alatoire.
Aussi, la classe HashSet naccepte quun seul lment null.

Disposant dune fonction de hachage, les objets HashSet ne


garantissent pas l'ordre des lments durant une itration de
l'ensemble, contrairement aux collections TreeSet.
En effet, la fonction de hachage disperse les lments au sein
de la collection Set.

Cette classe garantit des performances constantes en ce qui


concerne les oprations de base, telles que l'ajout (add(Object
element)), la suppression (remove(Object element)), la vrification de
prsence (contains(Object element)) et l'obtention de la taille(size()).

_____________________________________________________________________________________________________
Mme A. BENOMAR 172
.Les constructeurs de la HashSet
HashSet ensemble = HashSet();
Ce constructeur par dfaut initialise l'instance avec des valeurs par
dfaut, soit une capacit initiale et un facteur de charge par dfaut gaux
respectivement 16 et 0.75.
HashSet ensemble = HashSet(capacite);
// initialise linstance avec une capacit initiale de valeur capacite
HashSet ensemble = HashSet(float factch);
// initialise linstance avec une capacit de valeur capacite et un facteur
de charge de valeur factch

HashSet ensemble = HashSet(Collection collection);


//initialise l'instance en la remplissant dune collection
Ce dernier constructeur accepte comme argument une collection destine
initialiser la nouvelle instance. Chaque lment de la collection spcifie
sera copi au sein de l'objet HashSet cr.
_____________________________________________________________________________________________________
Mme A. BENOMAR 173
Les mthodes principalement utilises sont les mthodes :
dajout : add(Object elt) et addAll(Collection c).
de suppression : remove(Object elt), removeAll(Collection c),
retainsAll(Collection c) et clear()
.

de vrification de prsence : isEmpty(), contains(Object elt) et


containsAll(Collection c).
Les mthodes toArray() et toArray(Object[] element) hrites de
l'interface Set permettent de renvoyer l'ensemble des lments contenus
dans la collection Set, dans un tableau.

La mthode iterator() retourne un Iterator sur les lments de l'ensemble.


Cet objet Iterator fournira dailleurs le seul moyen de parcourir l'ensemble
sous-jacent.
Iterator valeurs = ensemble.iterator();
if (valeurs.hasNext())
{ System.out.println("Elements : " + valeurs.next());}
_____________________________________________________________________________________________________
Mme A. BENOMAR 174
4-3 La classe.TreeSet
La classe TreeSet organise un ensemble dlments uniques
tris selon un ordre croissant (ordre naturel des lments ou ordre
prcis par lutilisateur grce un Comparateur).
Les objets TreeSet assurent aussi de trs bonnes
performances pour des oprations de base, telles que les ajouts, les
suppressions ou vrifications de prsence.

4-3-1 Les constructeurs de la TreeSet


TreeSet ensemble = TreeSet();//constructeur par dfaut
Le constructeur par dfaut initialise l'objet en fondant son mode
de tri sur l'ordre naturel des lments.

_____________________________________________________________________________________________________
Mme A. BENOMAR 175
TreeSet ensemble = TreeSet(Collection maCollection);
Ce constructeur accepte comme argument un objet Collection.
Chaque lment de la collection spcifie sera copi dans lobjet TreeSet
instanci. La collection sera par ailleurs trie selon lordre naturel de ses
lments (ordre alphabtique, numrique).

TreeSet ensemble = TreeSet(SortedSet collection);


Ce constructeur accepte comme argument un objet SortedSet.
Chaque lment de la collection spcifie sera copi dans lobjet TreeSet
instanci. La collection sera par ailleurs trie selon lordonnancement de
lobjet SortedSet fourni.

TreeSet ensemble = TreeSet(Comparator comparateur);


Pour ce dernier constructeur, on spcifie un comparateur pour
effectuer le tri des lments comparables de l'objet TreeSet.

_____________________________________________________________________________________________________
Mme A. BENOMAR 176
4-3-2 Les mthodes de la classe TreeSet
Un objet TreeSet, dfini sans comparateur, utilise les mthodes
compareTo() et equals() des objets contenus dans cet ensemble.
Le comparateur de la collection TreeSet est accessible via la mthode
comparator() :
Comparator comparateur = ensemble.comparator();
Les mthodes principalement utilises sont les mthodes :
dajout (add(Object elt) et addAll(Collection c))
de suppression (remove(Object elt, removeAll(Collection c),
retainsAll(Collection c) et clear())
de vrification de prsence (isEmpty(), contains(Object elt) et
containsAll(Collection c)).
LIterator est le seul moyen de parcourir l'ensemble.
TreeSet(collection); Iterator valeurs = ensemble.iterator();
if(valeurs.hasNext()) { System.out.println("Elements : " +
valeurs.next()); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 177
La classe TreeSet implmente deux mthodes first() et last(), charges respectivemen
de rcuprer dans un ensemble le premier lment (cest dire le plus petit) et le
dernier lment (le plus grand).
La comparaison entre les lments est assure par l'ordre naturel ou par le comparateu
spcifi.
Object premier = ensemble.fisrt(); Object dernier = ensemble.last();
Les mthodes toArray() et toArray(Object o) hrites de l'interface Set permettent de
renvoyer l'ensemble des lments contenus dans la collection Set, dans un tableau.
La mthode SortedSet headSet(Object toKey) retourne seulement les lments de
l'objet TreeSet, qui sont strictement infrieurs l'objet pass en argument. Ce dernier
est exclu de l'objet SortedSet retourn.
La mthode tailSet(Object fromKey) retourne seulement les entres de l'objet
TreeMap, dont les cls sont strictement suprieures ou gales l'objet pass en
argument.
La mthode subSet(Object fromKey, Object toKey) extrait un intervalle d'entres, don
les cls sont comprises entre la valeur du premier argument incluse et la valeur du
second argument exclu.
La mthode values() retourne toutes les valeurs dans une collection.
SortedSet partie = ensemble.headSet(valeur);
_____________________________________________________________________________________________________
Mme A. BENOMAR 178
5- LES COLLECTIONS DE TYPE Map
Un objet de type map est une collection qui associe
une cl une valeur. La cl est unique, contrairement la
valeur qui peut tre associe plusieurs cls.

La majorit des collections de type Map ont deux


constructeurs : un constructeur sans paramtre crant
une Map vide, et un constructeur prenant en paramtre
une Map qui cre une nouvelle Map en fonction de la Map
passe en paramtre.

_____________________________________________________________________________________________________
Mme A. BENOMAR 179
5-1- Linterface java.util.Map
Les java.util.Map (associations) mmorisent une collection de couples
cl/valeur.
Si on a une cl, l'association retrouvera la valeur associe cette cl. Les
cls sont uniques, mais la mme valeur peut-tre associe plusieurs cls.
Les mthodes de Map:
size(); clear(); Object get(Object key); Object TUputUT(Object
key, Object value); TUputAllUT(Map t); Object remove (Object
element); containsKey (Object key); containsValue(Object value);
isEmpty(); hashcode(); equals (Object element); Set entrySet(); Set
keySet(); Collection values();

Remarque : Un seul exemplaire dune cl doit exister dans un objet


implmentant l'interface Map ;elle ne peut donc correspondre qu une seule
valeur, elle est unique.

_____________________________________________________________________________________________________
Mme A. BENOMAR 180
Les objets Map dpendent de deux mthodes particulirement
importantes pour le fonctionnement des collections :
hashCode() // calcule le code de hachage des cls
equals(Object o) // teste lgalit entre 2 cls
Ces mthodes sont indispensables puisquelles assurent la cohrence de
la collection lors de lutilisation des mthodes :
get(Object key) // rcupre la valeur correspondante la cl key
put(Object key,Objet value) // ajoute un ensemble cl/valeur
remove(Object o) // supprime lensemble cl/valeur correspondant la cl
key spcifie
Ainsi, si un nouveau couple cl/valeur est ajout une collection et que la
cl y est dj prsente, la valeur de cette cl remplacera lancienne et ne
rajoutera pas une nouvelle paire cl/valeur.

_____________________________________________________________________________________________________
Mme A. BENOMAR 181
5-2 La classe HashMap

La classe HashMap est une implmentation de linterface Map,


et comme on pourra le constater elle ressemble normment la classe
HashSet .
I l ne peut y avoir quune seule cl null dans une instance de
classe HashMap. Cependant, plusieurs valeurs peuvent tre null,
l'unicit des entres tant assures par les cls

Les objets HashMap ne garantissent pas l'ordre des lments


durant une itration de la collection, contrairement aux TreeMap.
En effet, la fonction de hachage disperse les lments au sein d'une
collection Map.

_____________________________________________________________________________________________________
Mme A. BENOMAR 182
5-5-1.Les constructeurs de la classe HashMap

HashMap maHashMap = new HashMap();


Ce constructeur est le constructeur par dfaut. Il initialise l'instance avec
des valeurs par dfaut, soit une capacit initiale et un facteur de charge
par dfaut gaux respectivement 16 et 0,75.

HashMap maHashMap= new HashMap(int initcapacite) ;


Ce constructeur permet d'indiquer la capacit initiale seule

HashMap maHashMap= new HashMap(int


initcapacite,float factch);
Ce constructeur permet dindiquer la capacit initiale et le facteur de
charge.

_____________________________________________________________________________________________________
Mme A. BENOMAR 183
Dfinitions :
- La capacit initiale dfinit la taille initiale de la collection.
- Le facteur de charge dtermine quel moment l'ensemble doit
recalculer la capacit de la collection afin d'accueillir ventuellement
plus d'lments.
Dans le cas d'une collection de capacit initiale de 100 et dun facteur
de charge de 0.70, sa capacit sera recalcule ds quelle aura atteint
un taux de remplissage de 70%. Le facteur de charge influant sur les
performances de l'objet, il faut bien sr linitialiser en fonction de ses
besoins.
HashMap maHashMap = new HashMap(collection);
Ce dernier constructeur accepte comme argument une collection qui va
initialiser la nouvelle instance. Chaque entre de la collection spcifie
sera copie au sein de l'objet HashMap cr.

_____________________________________________________________________________________________________
Mme A. BENOMAR 184
Quelques mthodes de la classe HashMap
Les mthodes put(Object key,Object value)
et putAll(Map m) permettent respectivement
d'ajouter une paire cl/valeur et toutes les entres
d'une collection Map.
Les mthodes d'ajout vrifient au pralable
si les cls spcifies ne sont pas dj prsentes
dans la collection. Si cest le cas, les valeurs
correspondantes aux cls existantes sont
remplaces par les nouvelles valeurs spcifies.

_____________________________________________________________________________________________________
Mme A. BENOMAR 185
Exemple dutilisation de la classe HashMap:
import java.util.*;
class TestHashMap
{ public static void main(String[]args)
{ HashMap maHashMap =new HashMap();
String eleve = "Anass ";
float[] notes = {12,14,10,17};
maHashMap.put(eleve, notes); // la mthode put()
float[] resultat = (float[]) maHashMap.get(eleve);// la mthode
get()
System.out.println(eleve +" a eu les notes : ");
for(int i=0;i<resultat.length;i++)
System.out.println( resultat[i]);
maHashMap.clear(); //on efface tout
HashMap maHashMap2 =new HashMap();
maHashMap2.put("Marwane", "classe prpa");
maHashMap2.put("Oussama", "INPT");
maHashMap.putAll(maHashMap2); // on remplit maHashMap
System.out.println("Marwane est en " + (String)
maHashMap.get("Marwane"));
System.out.println("Oussama est " + (String)
maHashMap.get("Oussama")); }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 186
La suppression d'une entre spcifique par rapport sa cl ou de la totalit
des paires cl/valeur s'effectue respectivement par les mthodes
remove(Object key) ou clear().
Exemple :
//suppression de l'entre correspondant la cl pass en argument
float[] lesNotes = maHashMap.remove("Anass");
//suppression de toutes les entres de la collection HashMap
maHashMap.clear();
La vrification de prsence d'entres, d'une cl ou d'une valeur est possible
par l'intermdiaire des mthodes isEmpty(), containsKey(Object key) et
containsValue(Object value).
Exemple :
if (maHashMap.isEmpty())
{ System.out.println("La collection est vide !"); }
if (maHashMap.containsKey("Marwane"))
{ System.out.println("La cl de Marwane a t trouve !"); }
if (maHashMap.containsValue("INPT"))
{ System.out.println("La valeur 'valeur' a t trouve !");}
Affichage : La cl de Marwane a t trouve ! La valeur INPT a t trouve !
_____________________________________________________________________________________________________
Mme A. BENOMAR 187
5-3 La classe HashTable
Un objet HashTable est une implmentation de Map qui associe une
cl une valeur. N'importe quel objet, mis part null peut y tre
ajout.
Voici un exemple d'utilisation de HashTable, o on associe un
numro de mois son nom :
Map monHashtable = new Hashtable() ;
monHashtable.put(new Integer(1),"Janvier")
monHashtable.put(new Integer(2),"Fevrier");
monHashtable.put(new Integer(3),"Mars");
monHashtable.put(new Integer(4),"Avril");
monHashtable.put(new Integer(5),"Mai");
monHashtable.put(new Integer(6),"Juin");
monHashtable.put(new Integer(7),"Juillet");
monHashtable.put(new Integer(8),"Aout");
monHashtable.put(new Integer(9),"Septembre");
monHashtable.put(new Integer(10),"Octobre");
monHashtable.put(new nteger(11),"Novembre");
monHashtable.put(new Integer(12),"Dcembre");

_____________________________________________________________________________________________________
Mme A. BENOMAR 188
La complexit d'accs une valeur par sa cl dpend d'une
fonction appele hashCode dfinie dans la cl.
Cette fonction est dj dfinie dans Object, mais pour optimiser la
recherche, la surcharger dans vos propres classes (si la cl est une
instance d'une classe de votre cration) permet un gain de temps non
ngligeable.
Le principe de cette fonction est simple : elle renvoie un entier. Si
les deux objets sont gaux, les valeurs renvoyes par leur fonction
respectives sont gales, mais l'inverse n'est pas vrai, ce qui veut dire que
si deux objets sont ingaux, leurs hashCode ne sont pas forcment
ingaux.
Gnralement, on fait renvoyer la fonction hashCode() d'un
objet la somme des hashCode() des lments le composant.

_____________________________________________________________________________________________________
Mme A. BENOMAR 189
6 LES CLASSES UTILITAIRES

6-1 L'interface java.util.Enumeration


L'interface Enumeration dfinit deux mthodes permettant de
balayer une squence d'lments :
public boolean hasMoreElements () :Cette mthode doit renvoyer
true
s'il reste encore un ou plusieurs lments numrer.

public Object nextElement () throws NoSuchElementException


Cette mthode doit retourner l'lment suivant numrer ou
dclencher une exception de classe NoSuchElementException si le
dernier lment a dj t numr.
Les mthodes de cette interface sont gnralement utilises dans
une boucle while, comme dans l'exemple suivant

_____________________________________________________________________________________________________
Mme A. BENOMAR 190
Les mthodes de cette interface sont gnralement
utilises dans une boucle wile, comme dans l'exemple suivant
import java.util.*;
// Classe mmorisant des chanes de caractres
class CollectionChaines
{ String [ ] tabChaines;
int nbreChaines = 0;
CollectionChaines (int max)
{ tabChaines = new String [max]; }
public void ajouterChaine (String chaine)
{ tabChaines [nbreChaines++] = chaine; }
public Enumeration chanes ()
{ return new EnumerationChaines (this); }
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 191
// Classe permettant d'numrer les chanes de CollectionChaines
class EnumerationChaines implements Enumeration
{ CollectionChaines collection;
int indice = 0;
public EnumerationChaines (CollectionChaines collection)
{ this.collection = collection; }
public boolean hasMoreElements ()
{ return indice < collection.nbreChaines; }
public Object nextElement ()
{ if (indice < collection.nbreChaines)
return collection.tabChaines [indice++];
else
throw new NoSuchElementException (); }
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 192
public class EssaiEnumeration
{ public static void main (String [ ] args)
{
// Cration d'une collection de chanes et ajout de 3 chanes
CollectionChaines donnees = new CollectionChaines (10);
donnees.ajouterChaine ("INE1");
donnees.ajouterChaine ("INE2");
donnees.ajouterChaine ("INE3");
// Enumration des lments de la collection
Enumeration enumeration = donnees.chanes ();
while (enumeration.hasMoreElements ())
System.out.println (enumeration.nextElement ()); }
}
/*A lexcution
INE1
INE2
INE3*/

_____________________________________________________________________________________________________
Mme A. BENOMAR 193
4-2 Linterface Iterator

Linterface java.util.Iterator permet le parcours squentiel des


lments de nimporte quelle collection

Linterface java.util.Iterator facilite le parcours de collections


ainsi que le retrait dlment dont on ne connat pas la position.

Un itrateur est un objet qui implmente linterface Iterator, et


qui a pour but de permettre le parcours des lments dun conteneur,
sans avoir besoin de savoir de quelle nature est ce conteneur.
Linterface Iterator contient les mthodes suivantes :

_____________________________________________________________________________________________________
Mme A. BENOMAR 194
elle permet de tester l'existence d'un lment aprs le
curseur
boolean hasNext() Retourne true si litrateur nest pas arriv en fin de
lensemble et false sinon.

Elle permet davancer litrateur, en dplaant le curseur


aprs llment)
Elle retourne un objet de la classe Object qui
correspond llment suivant, cest pourquoi on doit
Object next() faire du transtypage pour rcuprer la valeur de la
collection; en prcisant le type de lobjet.
Elle Lve une exception NoSuchElementException si
l'itrateur n'a pas d'objet qui le suit.

Elle supprime lobjet qui vient dtre retourne par next


void remove() (c'est--dire l'lment avant le curseur)..

- La mthode iterator()
La mthode Iterator iterator().de l'interface Collection, vise construire un itrateur pour
une collection. Elle retourne un objet Iterator.
Toutes les collections disposent d'une mthode Iterator iterator(), qui permet d'initialiser
un itrateur, (de faon analogue au int i=0 qui initialise un indice de boucle entier).
_____________________________________________________________________________________________________
Mme A. BENOMAR 195
* Cration dun Iterator partir dune collection :
Iterator it = maCollection.iterator();
On peut donc parcourir une collection grce aux mthodes
de linterface Iterator
Quelque soit la collection c, on peut parcourir tous ses
lments de la faon suivante :
Collection c ;
// c est de type E
Iterator it = c.iterator() ;
while(it.hasNext())
{ E o = (E)it.next(); // o a pour valeur un objet de la collection

_____________________________________________________________________________________________________
Mme A. BENOMAR 196
-Linterface ListIterator
ListIterator est une sous-interface adapte aux listes.
La sous-interface ListIterator permet :
le parcours d'une liste dans les deux sens
la modification de la liste pendant le parcours ;
d'obtenir une position courante (situe entre l'lment qui serait retourne par
previous et celui retourn par next). Dans une liste de longueur n, les index valides
sont 0, 1, ..., n.
Les mthodes ajoutes dans cette interface sont les suivantes :
boolean hasPrevious() qui teste s'il existe un lment avant le curseur ;
Object previous() qui renvoie, s'il existe, l'lment avant le curseur ;
void add(Object o) qui permet l'insertion d'un lment avant le curseur (c'est--dire
entre les lments qui seraient retourns par appel de Object previous() et Object
next()) ;
int nextIndex() qui renvoie l'index de l'lment avant le curseur ;
int previous qui renvoie l'index de l'lment aprs le curseur ;
void set(Object o) qui remplace le dernier lment retourn par previous ou next
(si la dernire opration a modifi la liste, c'est--dire si la dernire opration a t
add ou remove, l'exception IllegalStateException est leve).

_____________________________________________________________________________________________________
Mme A. BENOMAR 197
Exemple dutilisation ditrateur
import java.util.*;
public class UtiliseIterator
{
public static void main(String args[]){
Vector vect = new Vector(5);
vect.addElement(new Integer(3));
vect.addElement(new String("Bonjour"));
vect.addElement(new Float(3.14));
System.out.println("vecteur : " + vect);
//vecteur : [3, Bonjour, 3.14]
Object o;
Iterator iter = vect.listIterator();
while (iter.hasNext()){
o = iter.next();
System.out.println(" " + o);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 198
for(Enumeration enum = vect.elements();
enum.hasMoreElements();) // pas dincrmentation
System.out.println(" " + enum.nextElement());
ListIterator listIter = (ListIterator) iter;
while (listIter.hasPrevious()){
o = listIter.previous();
System.out.println(" " + o);
}
}
}
/* vecteur : [3, Bonjour, 3.14]
3
Bonjour
3.14
3
Bonjour
3.14
3.14
Bonjour
3*/
_____________________________________________________________________________________________________
Mme A. BENOMAR 199
6-3.Linterface java.lang.Comparable
Les objets manipuls dans une TreeMap ou une TreeSet
doivent tre comparables entre eux, cest dire quils doivent
implmenter linterface Comparable
En effet, Linterface java.lang.Comparable contient une seule
mthode :
int compareTo(Object o);
La mthode compareTo(), applique un objet x, avec pour
argument un objet y, compare les objets x et y et retourne un entier
<0, ou 0 ou un entier >0, selon que x est plus petit que y, lui est gal
ou lui est suprieur

_____________________________________________________________________________________________________
Mme A. BENOMAR 200
En ce qui concerne les objets tels que les String ou les
Integer, cette implmentation existe dj, ils peuvent donc
tre utiliss tels quels ( sans passer par linterface Comparable)
Cependant, les objets crs par lutilisateur ne
limplmentent pas automatiquement ; Il convient donc de
lajouter.

_____________________________________________________________________________________________________
Mme A. BENOMAR 201
Chapitre4 LES APPLETS

INTRODUCTION

1 LE LANGAGE HTML

2 LES PRINCIPALES METHODES DE LA CLASSE


APPLET

3 CREATION DUNE APPLET

4 EXEMPLE DUNE APPLET

5- TRANSMISSION DE PARAMETRES A UNE APPLET

_____________________________________________________________________________________________________
Mme A. BENOMAR 202
_____________________________________________________________________________________________________
Mme A. BENOMAR 203
Chapitre4 LES APPLETS

INTRODUCTION

Une applet est une application crite en java et qui tourne


travers le web dans un logiciel de navigation (les logiciels de
navigation les plus utiliss sont Internet Explorer et Netscape
Navigator).

Pour publier une applet sur Internet , il faut dabord crer une
page HTML. Lapplet est rfrence dans la page HTML et excute
par le logiciel de navigation.

_____________________________________________________________________________________________________
Mme A. BENOMAR 204
Chapitre4 LES APPLETS

1 LE LANGAGE HTML

Le langage HTML (Hyper Text Markup Language) est un


langage universel de structuration de documents hypertextuels
indpendants des plates formes
Il est bas sur les balises ou les tags qui permettent de
formater le texte. Les balises servent aussi appeler des contenus
externes (image, animation, son, )
- Pour afficher une image dans une page HTML, on crit :
<img scr = URL + Nom du fichier
- Les fichiers de sons et les fichiers vido sont intgrs au
moyen du tag <embed> . La syntaxe est la suivante :
<embed scr = URL + Nom du fichier
_____________________________________________________________________________________________________
Mme A. BENOMAR 205
Dans une page HTML , on peut dfinir des liens qui
reprsentent des sauts vers d autres endroits. Pour identifier la
cible vers la quelle doit pointer le lien., on utilise la balise a
(ancre), cette balise a un attribut href (hypertext reference);
celui ci doit contenir une URL qui pointe sur un document ou sur
une partie du document
Il existe deux types de liens, des liens internes qui
renvoient un emplacement situ dans le mme document et
des liens externes qui appellent un autre document figurant
dans le mme ordinateur serveur ou sur un autre
gographiquement loign.

Lien interne: <a href= #nom de lancrage texte1


ou image1</a>
<a name= nom de lancrag texte2 ou
image2 </a>
- Si on clique sur texte1 ou image1 , on va directement
au texte2 ou limage2 spcifie dans le tag <a
name>
Lien externe:<a href= adresse URL texte ou image
_____________________________________________________________________________________________________
Mme</a>
A. BENOMAR 206
- Si on clique sur le texte ou limage, on va se dplacer vers
Chapitre4 LES APPLETS

2 LES PRINCIPALES METHODES DE LA CLASSE


Applet

Pour crire une applet en java, il faut tendre (hriter) de la


classe Applet du package java.applet

La hirarchie dhritage de la classe Applet est la suivante :

java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
java.applet.Applet

_____________________________________________________________________________________________________
Mme A. BENOMAR 207
Chapitre4 LES APPLETS

2 LES PRINCIPALES METHODES DE LA CLASSE


Applet

Les principales mthodes de la classes Applet :


-La mthode init() : appel automatiquement par le browser pour initialiser
tous les objets et variables de lapplet.

-- La mthode start() : appel automatiquement par le browser pour


dmarrer lapplet. Elle excute chaque dmarrage de lapplet

-la mthode stop() : appel automatiquement par le browser pour


interrompre lexcution dune applet

-La mthode destroy() : appel automatiquement par le browser pour


fermer et finir lexcution dune applet

- La mthode paint() : pour afficher la fentre de lapplet.


_____________________________________________________________________________________________________
Mme A. BENOMAR 208
Chapitre4 LES APPLETS

3 CREATION DUNE APPLET

Une applet est incluse dans une page HTML sous la forme dune
rfrence qui indique lendroit o le logiciel de navigation doit aller la
chercher
La balise APPLET sutilise comme nimporte quelle commande HTML.
Sa syntaxe est la suivante :

<APPLET CODE= Nomclass.class widht = w height=h >


</APPLET>
NomClasse : indique le nom de la classe dfinissant lapplet
w et h dsignent la largeur et la hauteur (en pixels) de la zone
de la page html destine reprsenter lapplet
_____________________________________________________________________________________________________
Mme A. BENOMAR 209
Chapitre4 LES APPLETS

3 CREATION DUNE APPLET

La balise APPLET peut comporter quelques attributs


facultatifs :
codebase : dans le cas o lapplet ne se trouve pas dans le mme dossier
que le fichier HTML, il faut indiquer ladresse de la classe dfinissant
lapplet par rapport lURL de la page HTML (en partant du dossier de la
page HTML). Le paramtre codebase est plac la suite du paramtre
code
CODE = nom de lapplet codebase = chemin (nom du dossier)
Hspace/vspace : les paramtres hspace (espacement horizontal) et
vspace (espacement vertical) servent fixer la distance en pixels entre
lapplet et le texte
align : Ce paramtre dtermine la position relative de lapplet dans la
fentre. Les valeurs possibles sont : left, top, texttop,middle,
absmiddle, bottom, absbottom
_____________________________________________________________________________________________________
Mme A. BENOMAR 210
Chapitre4 LES APPLETS

3 CREATION DUNE APPLET

Pour crer et excuter une applet , il faut suivre ces


tapes :
1 Ecrire le code source de la classe qui dfinit lapplet et
lenregistrer sous le nom de la classe .java
2 Compilation et cration du fichier .class
3 -Cration du fichier HTML faisant rfrence lapplet
4 - Le test de lapplet

_____________________________________________________________________________________________________
Mme A. BENOMAR 211
Chapitre4 LES APPLETS

Fonctionnement dune applet

Une applet contient des mthodes qui sont appeles


automatiquement lorsque certains vnements se produisent.
La mthode init() est appele au chargement de lapplet.
init() nest pas une mthode statique . Une instance de la
classe charge doit tre cre

_____________________________________________________________________________________________________
Mme A. BENOMAR 212
Chapitre4 LES APPLETS
Fonctionnement dune applet
La liste ci dessous dcrit les diffrents vnements qui se
produisent lorsquune applet est charge :

La classe est charge


La classe est instancie
La mthode init() de linstance cre est invoque
La mthode strart() est invoque
- Si la page contenant lapplet est quite :
La mthode stop() est invoque
Si la page est de nouveau affiche :
La mthode start() est invoque de nouveau
- Lorsque le navigateur est quitt :
La mthode destroy() est invoque
_____________________________________________________________________________________________________
Mme A. BENOMAR 213
Chapitre4 LES APPLETS

4 EXEMPLE DUNE APPLET


1 re tape le code source

import java.applet.Applet ;
import java.awt.Graphics ; // lapplet est une fentre graphique

public class Helloworld extends Applet


{
public void paint (Graphics g)
{
g.drawString( Hello World , 20, 25)
/* affiche la chaine aux coordonnes spcifies */
}
}
Ce code sera contenu dans un fichier de nom Helloworld.java

_____________________________________________________________________________________________________
Mme A. BENOMAR 214
Chapitre4 LES APPLETS

4 EXEMPLE DUNE APPLE


2me tape la compilation
Une fois le code enregistr dans le fichier Helloworld.java. On
le compile pour obtenir le fichier Helloword.class

3me tape Cration du fichier HTML

<HTML>

<applet code = Helloworld.class width=100 height=50>

</applet>

</HTML>

On enregistre ce code dans un fichier .html (dans le mme


dossier que le fichier Helloworld.class )
_____________________________________________________________________________________________________
Mme A. BENOMAR 215
Chapitre4 LES APPLETS
4 EXEMPLE DUNE APPLE
4 me tape : Le test de lapplet

On peut tester lapplet soit :

- En invoquant lappletviewer :

c:\chemin> appletviewer Helloworld.html

- Soit en lanant lapplet dans un navigateur

_____________________________________________________________________________________________________
Mme A. BENOMAR 216
Chapitre4 LES APPLETS

5 TRANSMISSION DE PARAMETRES A UNE APPLET

Les applets java peuvent lire des paramtres issus


dune page HTML. Cette technique constitue un outil efficace
pour personnaliser lexcution dune applet dans un document
HTML et ladapter sans tre oblig de retoucher le code
source, ce qui demanderait une recompilation

_____________________________________________________________________________________________________
Mme A. BENOMAR 217
Chapitre4 LES APPLETS

5 TRANSMISSION DE PARAMETRES A UNE APPLET


5-1 Passage des paramtres depuis une page HTML
Les paramtres sont stocks comme lments constitutifs de la page
Web qui contient une applet. Ils sont cres laide de la balise HTML
<PARAM> et de ses deux attributs : NAME et VALUE.
On peut avoir plusieurs balises <PARAM> avec une applet, mais
elles doivent toutes tre places entre la balise douverture <APPLET> et
celle de fermeture </APPLET>
<APPLET code=Nom_applet.class width=w height=h >
<PARAM name = nom1 value=valeur1 >
<PARAM name = nom2 value=valeur2 >
</APPLET>
_____________________________________________________________________________________________________
Mme A. BENOMAR 218
Chapitre4 LES APPLETS

5 TRANSMISSION DE PARAMETRES A UNE APPLET


5-1 Passage des paramtres depuis une page HTML
Les paramtres sont stocks comme lments constitutifs de la page
Web qui contient une applet. Ils sont cres laide de la balise HTML
<PARAM> et de ses deux attributs : NAME et VALUE.
On peut avoir plusieurs balises <PARAM> avec une applet, mais
elles doivent toutes tre places entre la balise douverture <APPLET> et
celle de fermeture </APPLET>
<APPLET code=Nom_applet.class width=w height=h >
<PARAM name = nom1 value=valeur1 >
<PARAM name = nom2 value=valeur2 >
</APPLET>
_____________________________________________________________________________________________________
Mme A. BENOMAR 219
Chapitre4 LES APPLETS

5 TRANSMISSION DE PARAMETRES A UNE APPLET


5-2 Lecture des paramtres depuis une applet
Java dispose de la mthode getParameter() pour rcuprer les
paramtres dcrits sur la page HTML
La mthode getParameter() de la classe java.awt.Applet
rcupre un paramtre dune balise <PARAM> sur une page Web. Le
nom de ce dernier qui est prcis avec lattribut Name, est utlis
comme argument pass la mthode getParameter(). Cette mthode
renvoie comme rsultat une chane de caractres de type String
La syntaxe de la lecture est la suivante :
String ParametreHTML ;
ParametreHTML = getParameter(nom_du_parametre) ;
_____________________________________________________________________________________________________
Mme A. BENOMAR 220
Chapitre4 LES APPLETS

5 TRANSMISSION DE PARAMETRES A UNE APPLET


5-3 Exemple dutilisation de paramtres dans une applet
/* Lecture de paramtres dans un fichier HTML */
import java.awt.* ;
import java.applet.Applet ;
public class ParametresHTML extends Applet
{ String p1,p2 ; // variables recevant les paramtres
public void paint (Graphics g)
{ p1= getParameter("param1") ;
p2= getParameter("param2");
g.drawString("Valeur du premier paramtre = "+p1,10,40) ;
g.drawString("Valeur du deuxime paramtre = "+p2,10,70) ; }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 221
Chapitre4 LES APPLETS

5 TRANSMISSION DE PARAMETRES A UNE APPLET


5-3 Exemple dutilisation de paramtres dans une applet
/* fichier HTML coprrespondant lapplet */
<HTML>
<APPLET code = "ParametresHTML.class" width=400 height=200>
<PARAM Name="param1" value=" Je suis le premier paramtre ! ">
<PARAM Name="param2" value=" et moi le deuxime ! " >
</APPLET>
</HTML>

A lexcution , on aura :
Valeur du premier paramtre = Je suis le premier paramtre !
Valeur du deuxime paramtre = et moi le deuxime !
_____________________________________________________________________________________________________
Mme A. BENOMAR 222
Chapitre 5 LES INTERFACES GRAPHIQUES
INTRODUCTION

A - LE PACKAGE java.awt

1 LES POSSIBILITES de java.awt

2 -LES PRINCIPALES CLASSES DE java.awt

3 LES COMPOSANTS DE LINTERFACE


GRAPHIQUE

4 LES GESTIONNAIRES DE MISE EN PAGE

5- LES CONTENEURS

6- LES EVENEMENTS ET LES ACTIONS


_____________________________________________________________________________________________________
Mme A. BENOMAR 223
Chapitre 5 LES INTERFACES GRAPHIQUES

INTRODUCTION

Il existe en java plusieurs packages ddis au graphisme,


les plus utiliss sont :

- Le paquetage java.awt (Abstract Windowing Toolkit) fournit au


programmeur toutes les classes ncessaires la gestion du
graphisme . Cette librairie de classes est destine fonctionner
sur toute plate forme ( Windows, MacOs, X- Window)

- Le paquetage javax.swing disponible depuis la version jdk1.2


offre beaucoup plus de composants graphiques que le package
java.awt et lapparence des composants dans javax.swing est
totalement diffrente. javax.swing permet de raliser de vritables
interfaces homme-machine.
_____________________________________________________________________________________________________
Mme A. BENOMAR 224
Chapitre 5 LES INTERFACES GRAPHIQUES

INTRODUCTION

Principes de base de java.awt et javax.swing

awt et Swing permettent de crer et grer une interface graphique


en utilisant les mmes principes :

- Crer un cadre ( un objet de la classe conteneur),

- Crer des composants (objets de la classe Component)

-Utiliser une mise en page pour ces composants,

- Insrer les composants dans le cadre

- Utiliser des mthodes en rponse aux actions de lutilisateur.

_____________________________________________________________________________________________________
Mme A. BENOMAR 225
Chapitre 5 LES INTERFACES GRAPHIQUES

A - LE PACKAGE java.awt

1 LES POSSIBILITES de java.awt

Avec java.awt, on peut par exemple :

- Tracer diffrentes formes (polygones,, ovales, )

- Dfinir des polices de caractres, des couleurs,

- Crer des composants simples (boutons, cases cocher, )

- Crer des composants complexes ( menus droulants,

- Grer des vnements utilisateurs (clique sur un bouton,


coche sur une case, )

_____________________________________________________________________________________________________
Mme A. BENOMAR 226
Chapitre 5 LES INTERFACES GRAPHIQUES

2 LES PRINCIPALES CLASSES DE java.awt


2-1 La classe Graphics

La classe java.awt.Graphics comporte un nombre important de mthodes


permettant de tracer des formes gomtriques vides ou pleines. Voici un chantillon
des mthodes de Graphics :

* drawLine(int x1,int y1,int x2 ,int y2) : affiche le segment de (x1,y1) (x2,y2).

Remarque : Les segments tracs en java ont une largeur gale un point dcran. Pour
tracer un segment plus pais , on doit tracer plusieurs segments parallles

Le systme de coordonnes x et y dans une fentre graphique ou une applet est


dtermin par son origine (0,0) qui est langle suprieur gauche de la fentre.
(0,0) 50

20
(50,20)

_____________________________________________________________________________________________________
Mme A. BENOMAR 227
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics


Exemple dapplication de traage de segment

import java.awt.*;
class TraceLigne extends Frame
{
TraceLigne( String titre) // Constructeur
{
super (titre);
/* appel au constructeur de la super classe de Traceligne (Frame) qui dessine une
fentre invisible et appelle automatiquement la mthode paint */
}
public void paint(Graphics g) // mthode redfinie
{ g.setColor(Color.blue);
// dessin dune ligne paisse (2 pixels dpaisseur
g.drawLine(50,65,150,100);
g.drawLine(50,66,150,101);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 228
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics


public static void main(String[] argv)
{
TraceLigne monDessin = new TraceLigne("Une ligne");

monDessin.setSize(400, 400); // taille de la fentre

monDessin.setVisible(true);
/* la mthode setVisible(boolean) de la classe java.awt.component rend visible ou cache le
composant en fonction de ltat du boolean */
} // fin de main
} // fin de la classe

_____________________________________________________________________________________________________
Mme A. BENOMAR 229
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

* drawString (String texte, int x, int y) : affiche la chane de caractres


texte aux coordonnes (x,y) dans une fentre graphique ou une
applety

* drawRect(int x1, int y1, int larg , int haut) affiche un rectangle vide
partir du point (x1,y1) de largeur larg et de hauteur haut

* fillRect(int x1, int y1, int larg , int haut) affiche un rectangle plein
partir du point (x1,y1) de largeur larg et de hauteur haut. La couleur de
remplissage du rectangle plein est la couleur courante
_____________________________________________________________________________________________________
Mme A. BENOMAR 230
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics


Exemple dapplication de traage de rectangle

import java.awt.*;
class TraceRect extends Frame
{
int x=50, y=60, largeur=150 , hauteur=100;
Color couleur=Color.red ; // dclaration d'un objet couleur
TraceRect (String titre)
{ super (titre); }
public void paint(Graphics g)
{
g.setColor(couleur);
g.drawRect(x,y,largeur,hauteur);
g.fillRect(x,y+150,largeur,hauteur); // rectangle plein
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 231
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics


Exemple dapplication de traage de rectangle

public static void main(String[ ] argv)


{
TraceRect monDessin = new TraceRect ("Des Rectangles");
monDessin.setSize(400, 400);
monDessin.setVisible(true);
} // fin de main

} // fin de la classe

_____________________________________________________________________________________________________
Mme A. BENOMAR 232
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics

* drawOval (int x, int y, int largeur, int hauteur) affiche un ovale vide de
coin suprieur gauche de coordonnes (x,y) et de largeur et hauteur
dfinis
(x,y)
Largeur
Largeur

Hauteur
Dans le cas dun cercle largeur = hauteur = diamtre

* fillOval (int x, int y, int largeur, int hauteur) affiche un ovale plein

_____________________________________________________________________________________________________
Mme A. BENOMAR 233
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics


* drawPolygon (xpoints, ypoints, points) , trace un polygone
vide ferm en joignant les points un un et en joignant le dernier point
au premier. xpoints est un tableau dentiers rservs aux abscisses, et
ypoints est un tableau dentiers rservs aux ordonns et points est le
nombre de points , relier

* fillPolygon (xpoints, ypoints, points) trace un polygone plein


Exemple de traage de polygone (un triangle)
import java.awt.*;
class TracePoly extends Frame
{ int[ ] xPoints ={150,40,300}; // les abscisses des points
int[ ] yPoints ={40,240,240}; // les ordonnes des points
int points=3; // le nombre de points (3 cest un triangle)
Color couleur ;
TracePoly(String titre) // Constructeur
{ super (titre); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 234
Chapitre 5 LES INTERFACES GRAPHIQUES

2-1 La classe Graphics


public void paint(Graphics g)
{ couleur= Color.red;
g.setColor(couleur);
g.fillPolygon(xPoints,yPoints,points);
}
public static void main(String[] argv)
{ TracePoly monDessin = new TracePoly("Un triangle");
monDessin.setSize(400, 400);
monDessin.setVisible(true); }
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 235
Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Color

La classe java.awt.Color permet la gestion des couleurs en


java. Les couleurs peuvent tre spcifies de plusieurs manires
diffrentes car la classe Color offre plusieurs constructeurs :
- On peut utiliser des noms standards prdfinis avec la
syntaxe :
Color.nom_de_la_couleur

Les noms de couleurs prdfinis sont les suivants : black,


blue, cyan, darkGray, gray, green, lightGray, magneta, orange, pink,
red, white, yellow.
_____________________________________________________________________________________________________
Mme A. BENOMAR 236
Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Color

- On peut aussi spcifier une couleur laide de trois nombres


entiers compris entre 0 et 255. Ces trois nombres reprsentent les 3
valeurs RGB (Red, Green, Blue) de la couleur

Exemple : Color bleu = new Color (0,0,255) ;


Color blanc = new Color (255, 255, 255) ;
Color noir = new Color (0,0,0) ;
Color maCouleur = new Color (150,200,250) ;

-On peut aussi spcifier une couleur laide de trois nombres floats
compris entre 0.0 et 1.0
-Ces trois nombres reprsentent les 3 valeurs RGB
Color rouge = new Color(1.0f, 0.0f, 0.0f) ;
Color blanc = new Color(1.0f, 1.0f, 1.0f) ;

_____________________________________________________________________________________________________
Mme A. BENOMAR 237
Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Color

* Pour afficher un texte ou un graphique dans une couleur


spcifique, on utilise la mthode setColor(couleur) de la classe
java.awt.Graphics

* Pour attribuer une couleur darrire plan une fentre, on


utilise la mthode setBackground(couleur)

_____________________________________________________________________________________________________
Mme A. BENOMAR 238
Chapitre 5 LES INTERFACES GRAPHIQUES

2-3 La classe java.awt.Font


Laffichage des caractres est dfinie par trois lments :
- Le nom de la police : Helvetica, Courier, Dialog, Times ,
- Le style de la police : gras, italique ou normal
- La taille de la police en points

Pour afficher un texte dans une police dfinie, avec un style


dfini et une taille prcise, on doit crer un objet Font qui contient ces
informations. Le constructeur de la classe Font est :
Font(String nom, int style, int taille)
nom : nom de la police de la JVM ;
style : style de la police qui peut tre lune des constantes :
Font.PLAIN : texte normal
Font.BOLD : texte gras
Font.ITALIC : texte italique
taille : prcise la taille de la police en pixels
_____________________________________________________________________________________________________
Mme A. BENOMAR 239
Chapitre 5 LES INTERFACES GRAPHIQUES
La liste des polices de la JVM est retourne par la mthode
getFontList() de la classe java.awt.Toolkit.

Exemple daffichage des polices disponibles


import java.awt.*;
public class ListePolices extends Frame
{
ListePolices (String titre)
{ super(titre); }
public void paint (Graphics g)
{ int x=20;
int y=20;
String polices[ ] = getToolkit().getFontList();
for (int i=0 ; i<polices.length; i++)
{ g.drawString(polices[i], x, y) ;
y+=20 ; }
} // fin de paint
_____________________________________________________________________________________________________
Mme A. BENOMAR 240
Chapitre 5 LES INTERFACES GRAPHIQUES

2-3 La classe java.awt.Font

Exemple daffichage des polices disponibles

public static void main (String[ ] argv)


{ ListePolice maListe= new ListePolice("polices");
maListe.setSize(400,400);
maListe.setVisible(true);
} // fin de main
} // fin de la classe ListePolices

_____________________________________________________________________________________________________
Mme A. BENOMAR 241
Chapitre 5 LES INTERFACES GRAPHIQUES

* Pour attribuer un font un texte on utilise la mthode :


public void setFont(Font font) de la classe java.awt.Graphics

Exemple dutilisation de la classe Font

import java.awt.*;
public class UtiliseFont extends Frame
{ UtiliseFont(String titre)
{ super(titre); }
public void paint (Graphics g)
{
Font ft= new Font("Serif",Font.BOLD,20);
g.setFont(ft);
g.setColor(Color.red);
g.drawString("ATTENTION DANGER",100,100);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 242
Chapitre 5 LES INTERFACES GRAPHIQUES

2-2 La classe java.awt.Font

public static void main (String[] argv)


{ UtiliseFont monTexte= new UtiliseFont("Les Fonts");
monTexte.setSize(400,400);
monTexte.setVisible(true);
} // fin de main
} // fin de la classe

_____________________________________________________________________________________________________
Mme A. BENOMAR 243
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE

En java, les lments de linterface utilisateur sont des


composants. Ce sont des objets drivant de la classe
java.awt.Component.

Chaque type d'objet de l'interface graphique (bouton, case


cocher, liste, menu) est une classe drive de Component.

La classe java.awt.Container , qui hrite de Component est un


espace capable de contenir plusieurs objets de la classe Component .
Par exemple une fentre (Frame) ou une applet

_____________________________________________________________________________________________________
Mme A. BENOMAR 244
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Voici une partie de la hirarchie de la classe java.awt.Compenent
java.awt.Compenent
Button (bouton)
Canvas(surface de dessin)
Checkbox (case cocher)
Container
Panel (conteneur simple)
Applet
Window (fentre sans cadre ni titre)
Dialog (fentre de dialogue)
Frame (fentre avec cadre et titre)
Label (tiquette)
Ce diagramme dfinie les relations dhritage des classes
_____________________________________________________________________________________________________
Mme A. BENOMAR 245
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE

Pour utiliser des composants , il faut

- Crer un espace conteneur (Frame, Panel, Window, ..),


- Crer des composants (Bouton, CheckBox, )
- Utiliser une mise en page pour ces composants,
- Insrer les composants dans lespace

Pour insrer des composants dans un conteneur on utilise la


mthode add() de la classe java.awt.Component

_____________________________________________________________________________________________________
Mme A. BENOMAR 246
Chapitre 5 LES INTERFACES GRAPHIQUES

3-1 Les boutons

Les boutons sont les contrles de tout cran dinterface, ils


permettent de dclencher des vnements. En java.awt un bouton est
reprsent par un objet de la classe java.awt.Button
Exemple dutilisation de boutons dans une applet:
// Fichier DemoBouton.java
import java.awt.*;
public class DemoBouton extends java.applet.Applet
{
Button monBouton1;
Button monBouton2;
_____________________________________________________________________________________________________
Mme A. BENOMAR 247
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-1 Les boutons

public void init ()


{
monBouton1 = new Button();
monBouton2 = new Button();
monBouton1.setLabel("bouton 1 ");
monBouton2.setLabel("bouton 2");
add(monBouton1) ; // pour insrer le bouton dans lapplet
add(monBouton2) ;
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 248
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE

3-1 Les boutons

<! Fichier DemoBouton.htm>


<HTML>
<applet code = " DemoBouton.class" width=200 height=200>
</applet>
</HTML>

_____________________________________________________________________________________________________
Mme A. BENOMAR 249
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-2 Les tiquettes

Une tiquette (label) est une chane de caractres qui ne


dpasse pas une ligne et qui permet dafficher un texte qui nest pas
interactif. Son rle consiste donner des informations sur les autres
contrles , notamment les zones de saisie.
Pour accder une tiquette, il faut dabord dclarer un objet
de la classe java.awt.Label
Label l = new Label ( Je suis une tiquette ) ;
add(l) ; // Affichage de ltiquette sur la fentre
On peut modifier le texte dun label en appelant sa mthode setText()
l.setText( le nouveau texte ) ;
_____________________________________________________________________________________________________
Mme A. BENOMAR 250
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-3 les botes de dialogues
Les cases cocher
Un composant. Checkbox est une case place ct dune
ligne de texte et qui peut tre coche par lutilisateur.
Les cases cocher sont trs utilises dans les programmes
dinstallation, les fentres de configuration ou dune manire gnrale
dans les botes de dialogue
Chaque case cocher ( Checkbox )reprsente un tat boolen, vrai ou
faux selon quelle est coche ou non.
Pour grer les cases cocher, on utilise la classe java.awt.Checkbox
Checkbox cb= new Checkbox() ; // cre une case cocher
Checkbox cb= new Checkbox(String) ; // cre une case
cocher affiche le texte en argument ct de la case cocher
_____________________________________________________________________________________________________
Mme A. BENOMAR 251
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-3 les botes de dialogues
Les cases cocher
Ltat dune case cocher

cb.setState(boolean) ; // true pour cocher, false pour dcocher

boolean etat=cb.getState() ; //retourne true si active, false sinon

cb.getLabel() retourne la chane de caractres correspondant


ltiquette de la case cocher
_____________________________________________________________________________________________________
Mme A. BENOMAR 252
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Pour savoir si une action a t dclenche par
lutilisateur( pression dun bouton, coche dune case,.), il faut
appeler une mthode couteur (Listener) par exemple la mthode
action :

public boolean action(Event e , Object arg) de la classe


java.awt.Component est appele automatiquement lorsquune action
est dclenche par lutilisateur et traite les vnements survenus
pendant lexcution de lapplication ou de lapplet.

_____________________________________________________________________________________________________
Mme A. BENOMAR 253
Chapitre 5 LES INTERFACES GRAPHIQUES
3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE
Exemple: Lapplication suivante permet dafficher une case cocher
de nom Test . Si lutilisateur active cette case le message Case active
sera affiche, sinon le message Case dsactive sera affiche

import java.awt.*;
class DemoCheckbox extends Frame
{
static boolean etat = false;
Checkbox test;
DemoCheckBox(String titre)
{ super (titre);
FlowLayout fl=new FlowLayout(); // gestionnaire de mise en page
setLayout(fl);
test=new Checkbox("TEST");
add(test);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 254
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


public boolean action(Event e,Object arg)
{
if (test.getState())
etat=true;
else
etat=false;
repaint(); // force la mthode paint()
return (true);
}
public void paint(Graphics g)
{ g.setColor(Color.red);
g.setFont(new Font("Helevetica",Font.BOLD,20));
if (etat==true)
g.drawString("Case active",50,300);
else
g.drawString("Case dsactive",50,300); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 255
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


public static void main(String[] argv)
{
DemoCheckBox maCase = new DemoCheckBox("Case cocher");
maCase.setSize(400, 400);
maCase.setVisible(true);
} // fin de main
} // fin de la classe

A lexcution, on aura

_____________________________________________________________________________________________________
Mme A. BENOMAR 256
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les Boutons radio
Une case cocher peut tre affiche individuellement ou dans un groupe.
Les boutons radio sont des cases cocher rassembles dans un groupe. A
lintrieur du groupe, on ne peut activer quune seule case la fois. La classe
java.awt.CheckboxGroup permet de crer des groupes de boutons radio
CheckboxGroup br ; // dclaration dun groupe de boutons radio
Checkbox b1= new Checkbox( tiquette1 , tat1, br) ;
Checkbox b2= new Checkbox( tiquette2 , tat2, br) ;
:
:
Checkbox bn= new Checkbox( tiquetten , tatn, br) ;
- tiquetten est ltiquette du bouton radio
- etatn est ltat du bouton : true ou false
- br est le nom du groupe des boutons radio
_____________________________________________________________________________________________________
Mme A. BENOMAR 257
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE

Les Boutons radio

Exemple : Ecrire une application en java qui permet dafficher cinq


boutons radio correspondant au statut possible dune personne
(clibataire, mari, divorc, veuf, autre)
import java.awt.*;

class DemoCheckboxGroup extends Frame


{
CheckboxGroup status;
Checkbox celibataire,marie,divorce,veuf,autre;

_____________________________________________________________________________________________________
Mme A. BENOMAR 258
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les Boutons radio
DemoCheckboxGroup(String titre)
{ super (titre);
FlowLayout fl=new FlowLayout();
setLayout(fl);
status = new CheckboxGroup();
celibataire=new Checkbox("Clibataire",true,status);
add(celibataire);
marie =new Checkbox("Mari(e)",false,status);
add(marie);
divorce=new Checkbox("Divorc(e)",false,status);
add(divorce);
veuf=new Checkbox("Veuf(ve)",false,status);
add(veuf);
autre=new Checkbox("Autre",false,status);
add(autre); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 259
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


public static void main(String[] argv)
{ DemoCheckboxGroup monStatus = new
DemoCheckboxGroup("Status");
monStatus.setSize(400, 400);
monStatus.setVisible(true);
}
} cette application cre cinq boutons radio . Le bouton
clibataire est coch initialement , mais si lutilisateur coche une autre
bouton du groupe status, la coche de clibataire sera
automatiquement supprim (dans un CheckboxGroup un seul bouton
doit tre coch la la fois)
- La mthode getCurrent() de la classe CheckboxGroup retourne
lobjet Checkbox correspondant la rponse selctionne

_____________________________________________________________________________________________________
Mme A. BENOMAR 260
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-4 Les listes droulantes
Les listes droulantes sont des composants qui permettent de
slectionner des lments dans une liste

Les listes choix unique


Java permet de crer une liste droulante choix unique par
lintermdiaire de la classe java.awt.Choice
Lobjet Choice permet lutilisateur de choisir une valeur unique parmi
une liste. La syntaxe est la suivante :
Choice maListe = new Choice() ;
maListe.addItem(choix 1) ;
maListe.addItem(choix 2) ;
:
:
maListe.addItem( choix n ) ;
_____________________________________________________________________________________________________
Mme A. BENOMAR 261
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix unique
Gestion des slections
maListe.select(indice) ;// slectionne un lment par son indice
lindice est un entier correspondant lordre de llment dans la liste. 0 est
lindice du premier lment
maListe.select(lement) ;// slectionne un lment par son contenu
maListe.countItems() // retourne le nombre dlments de la liste
maListe.getItem(n) // retourne le contenu de llment n
maListe.getSelectedItem() //retourne le contenu de llment
slectionn
maListe.getSelectedIndex() // retourne lindice de llment slectionn
_____________________________________________________________________________________________________
Mme A. BENOMAR 262
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Exemple : Une application java qui cre une liste droulante de trois
lments (JAUNE, ROSE, BLEU). La couleur slectionne est
applique larrire plan de la fentre
import java.awt.*;
public class DemoChoice extends Frame
{
String str; // str contiendra la couleur choisit
Choice choix= new Choice(); // cration d'une liste de choix
DemoChoice(String titre) // constructeur
{ super (titre);
choix.addItem("JAUNE");
choix.addItem("ROSE");
choix.addItem("BLEU");
add(choix);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 263
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


public boolean action(Event e,Object arg)
{
str= choix.getSelectedItem();
repaint();
return (true);
}
public void paint(Graphics g)
{
if (str=="JAUNE")setBackground(Color.yellow);
else
if (str=="ROSE")setBackground(Color.pink);
else
if (str=="BLEU")setBackground(Color.blue);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 264
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE

public static void main(String[] argv)


{
DemoChoice monChoix = new DemoChoice("Couleur de l'arrire
plan");
monChoix.setSize(400, 400);
monChoix.setVisible(true); }
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 265
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple

Une liste choix multiple permet dafficher une liste de choix


dans un cadre. Elle permet dafficher plusieurs lignes et la slection de
plusieurs lments.
Pour grer une liste choix multiple, on doit faire appel la
classe java.awt.List
La classe List contient plusieurs constructeurs, le
constructeur le plus intressant est List ( int i, boolean valeur). Le
premier paramtre i dfinit le nombre de lignes qui seront affiches, et
la valeur indique si lon autorise la slection multiple (true) ou non.

_____________________________________________________________________________________________________
Mme A. BENOMAR 266
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple

Une fois linstance cre, on ajoute des propositions avec


addItem(String)
La classe List dispose dun grand nombre de fonctions pour grer
et consulter les informations mmorises

List li = new List(nbligne, multiSelect) ; // Dclare et initialise une liste


li.addItem(String s) ; // ajoute llment s la fin de la liste li
li.addItem(String s, int indice) ; // insre llment s la position
indice, le premier lment de la liste a pour indice 0
_____________________________________________________________________________________________________
Mme A. BENOMAR 267
Chapitre 5 LES INTERFACES GRAPHIQUES
3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE
Les listes choix multiple

li.delItem(int indice) ; // supprime llment qui est la position indice


li.delItems(int indice1, int indice2) ;
// supprime les lments qui sont entre les positions indice1 et //indice2
li.clear() ; // efface compltement le contenu de la liste
li.countItems() ; // retourne un entier correspondant au nombre
dlments de la liste

li.getItem(indice) ; // retourne une chane de caractres qui est le


//contenu de llment dindice indice

_____________________________________________________________________________________________________
Mme A. BENOMAR 268
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple
li.select(indice) ; // slectionne llment dindice indice
li.setMultipleSelections() ; // est un boolen qui retourne true si la
slection multiple est autorise, false sinon

li.deselect(indice) ; // dslectionne llment dindice indice


li.getSelectedIndex();//renvoie lindice de llment slectionn en
cas de slection simple. En absence de slection, le rsultat est -1

li.getSelectedIndexes () ; // renvoie un tableau de type int qui


contient les indices de tous les lments slectionns en cas de
slection multiple
_____________________________________________________________________________________________________
Mme A. BENOMAR 269
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple
li.getSelectedItem () ;// sutilise dans le cas dune slection simple,
renvoie une chane de caractres qui contient le texte de llment
slectionn , ou null en absence de slection

li.getSelectedItems () ;// sutilise dans le cas dune slection


multiple, renvoie un tableau de strings qui contient les textes de tous
les lments slectionns , ou null en absence de slection

li.isSelected(int indice) ; // retourne true si llment dindice


indice est slectionn, false sinon.

Exemple : Il sagit dcrire un programme qui crit une liste


de 10 lignes qui autorise la slection multiple. Il installe
deux boutons pour ajouter et supprimer des lments
_____________________________________________________________________________________________________
Mme A. BENOMAR 270
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple
import java.awt.*;
class DemoList extends Frame
{ List li = new List(10,true);
Button b1 = new Button("Ajouter");
Button b2 = new Button("Supprimer");
DemoList(String titre)
{ super (titre);
FlowLayout fl=new FlowLayout();
setLayout(fl);
add(b1); add(b2);
li.addItem("Element 1"); li.addItem("Element 2");
li.addItem("Element 3"); li.addItem("Element 4");
add(li);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 271
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple
public boolean action (Event e,Object o)
{
if (e.target==b1) // si le bouton b est press ("ajouter")
li.addItem("autre lment ajout");
else if (e.target==b2)// si le bouton b2 est press ("supprimer")
{
int indice[]=li.getSelectedIndexes();
for (int i=0;i<indice.length-1;i++)
{ li.delItem(indice[i]);
indice[i+1]--;
}
li.delItem(indice[indice.length-1]);
}
return true;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 272
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple
(autre algorithme)
public boolean action (Event e,Object o)
{
if (e.target==b1) // si le bouton b est press ("ajouter")
li.addItem("autre lment ajout");
else if (e.target==b2)// si le bouton b2 est press ("supprimer")
{
int indice[ ]=li.getSelectedIndexes();
for (int i=indice.length-1;i>=0;i--)
li.delItem(indice[i]);
}
return true;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 273
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Les listes choix multiple

public static void main(String[] argv)


{ DemoList maListe = new DemoList("Liste d'lments");
maListe.setSize(400, 400);
maListe.setVisible(true);
}
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 274
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-5 Les zones de saisie
Pour recueillir les saisies de lutilisateur dans une fentre
graphique, le package awt propose la classe TextField. Par dfinition, le
champ de texte se limite une seule ligne. Il est gnralement associ
un bouton qui sert confirmer la saisie et transmettre au programme
les caractres taps
Les quatre constructeurs disponibles sont :
TextField() : dclare un objet de la classe TextField
TextField(int) : dclare un objet TextField et fixe le nombre
maximum de caractres saisir
TextField(String) : dclare un objet TextField et fixe un texte
par dfaut
TextField(String, int) :dclare un objet TextField et fixe un texte
par dfaut et le nombre max de caractres saisir
_____________________________________________________________________________________________________
Mme A. BENOMAR 275
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-5 Les zones de saisie
Lecture dun champ de texte
La mthode getText() applique un objet TextField retourne
une chane de caractres qui est la chane saisie
Pour lire le nombre de caractres prdfinie, on applique a
mthode getColumns() un objet TextField.
Un champ de texte peut servir entre autres entrer une
information confidentielle (mot de passe par exemple). Cette
information ne doit pas apparatre directement sur lcran pendant
quelle est tape. A la place, on affiche un caractre symbolique ou
caractre dcho. La mthode utilise est setEchoChar(char)
TextField tF= new TextField (n) ;
TF.setEchoChar(*) ;
_____________________________________________________________________________________________________
Mme A. BENOMAR 276
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


3-5 Les zones de saisie
Exemple : Une applet qui permet de saisir un nom et un mot de passe
import java.awt.* ;
import java.applet.* ;
public class DemoTextField extends Applet
{
TextField nom , motPasse ;
public void init()
{ add(new Label( Nom : )) ;
nom=new TextField (10) ;
add(nom); add(new Label( Mot de passe : )) ;
motPasse=new TextField (10) ;
motPasse.setEchoChar(*) ;
add(motPasse); }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 277
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Zones de textes pour saisie multiligne
La classe TextField est limite la saisie dune seule
ligne. Pour permettre la saisie de plusieurs lignes, il faut
recourir la classe java.awt.TextArea
Les quatre constructeurs disponibles sont :
TextArea() : dclare un objet de la classe TextArea
TextArea(int nbLignes, int nbColonnes) : dclare un objet
TextArea et initialise le nombre de lignes et de colonnes
TextArea(String) : dclare un objet TextField et initialise le
contenu
TextArea(String, nbLignes, nbColonnes) :dclare un objet
TextArea et initialise le contenu, le nombre de lignes et le
nombre de colonnes
_____________________________________________________________________________________________________
Mme A. BENOMAR 278
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Lecture et modification du contenu dune zone texte
* La mthode getText() applique un objet TextArea retourne une
chane de caractres qui est le contenu intgral de la zone de texte
* Pour lire une partie du texte slectionne, on applique la mthod
getSelectedText() un objet TextArea
* Pour dterminer le nombre de colonnes, on utilise la mthode
getColumns() un objet TextArea
* Pour dterminer le nombre de lignes, on utilise la mthode
getRows() un objet TextArea
* Pour insrer une chane de caractres partir dune position
donne, on utilise la mthode insertText(Text, n). Cette mthode insre la
chane Text partir du nme caractre.
_____________________________________________________________________________________________________
Mme A. BENOMAR 279
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Exemple dutilisation de TextArea pour recueillir des commentaires
import java.awt.* ;
import java.applet.* ;
public class DemoTextArea extends Applet
{
TextArea texte ;
public void init()
{ add(new Label(" Tapez vos commentaires : ")) ;
texte = new TextArea ("Pas de commentaires",5,10) ;
add(texte);
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 280
Chapitre 5 LES INTERFACES GRAPHIQUES

3 LES COMPOSANTS DE LINTERFACE GRAPHIQUE


Exemple dutilisation de TextArea pour recueillir des commentaires
import java.awt.* ;
import java.applet.* ;
public class DemoTextArea extends Applet
{ TextArea texte ;
public void init()
{ add(new Label(" Tapez vos commentaires : ")) ;
texte = new TextArea ("Pas de commentaires",5,10) ;
add(texte);
}
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 281
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


Lorsquon place des composants dans une applet ou dans
une fentre graphique, leur emplacement lcran se fait de
manire automatique et dune faon variable
La disposition des diffrents composants dpend de:
La taille de la fentre ;
La taille des autres composants ajouter
On peut changer la disposition des diffrents composants en
utilisant un gestionnaire de mise en page spcifi
Il existe plusieurs gestionnaires de mise en page, chacun
positionnant diffremment les lments graphiques, selon un
algorithme qui leur est propre.
_____________________________________________________________________________________________________
Mme A. BENOMAR 282
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


Tous les gestionnaires de mise en page implmentent
linterface java.awt.LayoutManager. Pour slectionner un
gestionnaire de mise en page, on utilise la mthode
setLayout(LayoutManager) de la classe Container. Les
gestionnaires de mise en page les plus utiliss sont :

4-1 FlowLayout :
La classe FlowLayout (mise en page flot) place les
composants ligne par ligne de gauche droite.

_____________________________________________________________________________________________________
Mme A. BENOMAR 283
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


Tous les gestionnaires de mise en page implmentent
linterface java.awt.LayoutManager. Pour slectionner un
gestionnaire de mise en page, on utilise la mthode
setLayout(LayoutManager) de la classe Container. Les
gestionnaires de mise en page les plus utiliss sont :

4-1 FlowLayout :
La classe FlowLayout (mise en page flot) place les
composants ligne par ligne de gauche droite.
Cest la disposition par dfaut, celle qui sera utilise si lon
ne choisit pas un autre gestionnaire. Le principe est trs simple :
tous les lments sont mis cte cte, de gauche droite.
Lorsquil ny a plus assez de place pour ajouter un lment, on
passe la ligne suivante. Chaque ligne est centre par dfaut
_____________________________________________________________________________________________________
Mme A. BENOMAR 284
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-1 FlowLayout :
- Dclaration dun objet de la classe FlowLayout
FlowLayout fl1 = new FlowLayout();
FlowLayout fl2 = new FlowLayout( int );
/* lentier dfinit lorientation des lments . On utilise cet
effet les variables prdfinies CENTER, LEFT et RIGHT*/
FlowLayout fl2 = new FlowLayout(int, int, int);
/* le premier argument dfinit lorientation, le deuxime
argument dfinit lespacement horizontal et le troisime
dfinit lespacement vertical entre les composants */
_____________________________________________________________________________________________________
Mme A. BENOMAR 285
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-1 FlowLayout :
* Pour quune nouvelle mise en page soit effective, il faut
linstaller avec la mthode setLayout() de la classe Container
Exemple de mise en page avec FlowLayout
// Fichier DemoFlowLayout.java
import java.awt.*;
import java.applet.*;
public class DemoFlowLayout extends Applet
{
Button monBouton1;
Button monBouton2;
_____________________________________________________________________________________________________
Mme A. BENOMAR 286
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-1 FlowLayout :
public void init ()
{
FlowLayout fl = new FlowLayout(FlowLayout.CENTER,60,0);
setLayout(fl);
monBouton1 = new Button();
monBouton2 = new Button();
monBouton1.setLabel("bouton 1");
monBouton2.setLabel("bouton 2");
add(monBouton1) ;
add(monBouton2) ;
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 287
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-1 FlowLayout :

<! Fichier DemoFlowLayout.htm>


<HTML>
<applet code = " DemoFlowLayout.class" width=300 height=80>
</applet>
</HTML>
A lexcution de lapplet :

Lespacement horizontal entre les 2 boutons est de 60 pixels, et


lespacement vertical est de 0

_____________________________________________________________________________________________________
Mme A. BENOMAR 288
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE

4-2 BorderLayout :

Lorsquon utilise BorderLayout, on peut placer les lments


dans 5 zones diffrentes : North , South , East , West et
Center (nord, sud, est, ouest et center)

Dclaration dun objet de la classe BorderLayout


BordreLayout bl1 = new BorderLayout();

BorderLayout bl2 = new BorderLayout(int, int);


/* le premier argument dfinit lespacement horizontal et le
deuxime dfinit lespacement vertical entre les composants
_____________________________________________________________________________________________________
Mme A. BENOMAR 289
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE

4-2 BorderLayout :

Remarque : Contrairement ce qui se passe pour la mise en page flot,


lespacement na pas dinfluence sur la distance qui spare les composants
du bord de lapplet */
Exemple de mise en page avec BorderLayout
// Fichier DemoBorderLayout.java
import java.awt.*;
import java.applet.*;
public class DemoBorderLayout extends Applet
{
public void init ()
{ BorderLayout bl = new BorderLayout(25,25);
setLayout(bl);
_____________________________________________________________________________________________________
Mme A. BENOMAR 290
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-2 BorderLayout :
add("North",new Button("Bouton nord")) ;
add("South",new Button("Bouton sud")) ;
add("Center",new Button("Bouton Centre")) ;
add("East",new Button("Bouton est")) ;
add("West",new Button("Bouton ouest")) ;
}
}
<HTML>
<applet code = " DemoBorderLayout.class" width=400 height=120>
</applet>
</HTML>
A lexcution, on aura :
_____________________________________________________________________________________________________
Mme A. BENOMAR 291
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE

4-3 GridLayout :
La classe GridLayout organise tous les composants dun
conteneur en grille (lignes et colonnes). Le mme espace est affect
tous les composants. Lorsquon instancie GridLayout, on doit spcifier le
nombre de lignes et de colonnes. Les lments sont ajouts dans la grille
de gauche droite, de haut en bas.
Dclaration dun objet de la classe GridLayout
GridLayout gl = new GridLayout (int nb_lignes, int nb_colonnes);
/* On spcifie le nombre de lignes ou le nombre de colonnes souhait. L'une
des deux valeurs doit tre nulle sinon seul le nombre de lignes est pris en
compte. Par exemple GridLayout(5,4) est identique GridLayout(5,0) */

_____________________________________________________________________________________________________
Mme A. BENOMAR 292
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-3 GridLayout :
GridLayout gl = new GridLayout (int ligne, int colonne ,int h, int v);
/* les deux derniers arguments spcifient l'espacement horizontal et vertical
des composants */

Exemple : Affichage de l'applet suivante qui est compose de 4


boutons et une liste de 5 lments . Ces composants sont disposs en
trois colonnes comme suit :

_____________________________________________________________________________________________________
Mme A. BENOMAR 293
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-3 GridLayout :
public class DemoGridLayout extends Applet
{ List l=new List(1,false); // cration d'une liste droulante
public void init()
{
l.addItem("Premier");
l.addItem("Deuxime");
l.addItem("Troisime");
l.addItem("Quatrime");
l.addItem("Cinquime");
setLayout(new GridLayout(0,3,20,20));
/* mise en page grille de 3 colonnes, l'espacement horizontal
et vertical des composants et fix 20 pixels */
add(new Button(" Bouton 1 ")) ; //(1re ligne et 1re colonne)
_____________________________________________________________________________________________________
Mme A. BENOMAR 294
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-3 GridLayout :

add(new Button(" Bouton 2 ")) ;// (1re ligne et 2me colonne)


add(l); // insrtion de la liste (1re ligne et 3me colonne)
add(new Button(" Bouton 3 ")) ; //(2me ligne et 1re colonne)
add(new Button(" Bouton 4 ")) ; //(2me ligne et 2me colonne)
}
}
<HTML>
<applet code = "DemoGridLayout.class" width=280 height=120>
</applet>
</HTML>

_____________________________________________________________________________________________________
Mme A. BENOMAR 295
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


4-4 GridBagLayout :
Le dernier gestionnaire de mise en page prsent
correspond la classe GridBagLayout (grille tendue). Cette classe
est la plus puissante des gestionnaires de mise en page, mais elle
est galement la plus difficile utiliser . la grille est divise en
cellules gales. Mais pour faciliter les ajustements, un composant
peut occuper plusieurs cellules de la grille. On introduit par ailleurs
un objet de la classe GridBagConstraints qui donne des indications
de positionnement et de dimension l'objet GridBagLayout

_____________________________________________________________________________________________________
Mme A. BENOMAR 296
Chapitre 5 LES INTERFACES GRAPHIQUES

4 LES GESTIONNAIRES DE MISE EN PAGE


Variables d'instance pour manipuler un objet GridBagLayout
gridx et gridy : ces variables contiennent les coordonnes de
l'origine de la grille (0,0)
gridwidth, gridheight : ces variables dfinissent combien de
cellules (en hauteur et largeur) va occuper un composant. Par
dfaut leur valeur est 1
GridBagConstraints.REMAINDER spcifie que le prochain
composant insr va tre le dernier de la ligne ou de la colonne
courante
GridBagConstraints.RELATIVE est utilis pour placer un composant
aprs le dernier composant d'une ligne ou d'une colonne

_____________________________________________________________________________________________________
Mme A. BENOMAR 297
Chapitre 5 LES INTERFACES GRAPHIQUES

5 LES CONTENEURS
Pour mettre en service les diffrents composants dj vus
(boutons, listes, cases cocher, ) , il faut toujours les incorporer
dans un objet d'une classe drive de la classe abstraite Container
(conteneur). Les conteneurs les plus utiliss sont :

Panel : Conteneur qui n'a pas de fentre propre sert surtout


ordonner les contrles. La classe java.applet.Applet est drive de
la classe Panel

Window : cre une fentre principale sans cadre ni menu


Frame (drivant de Window) : il s'agit d'une classe de fentre avec
barre de titre

_____________________________________________________________________________________________________
Mme A. BENOMAR 298
Chapitre 5 LES INTERFACES GRAPHIQUES

5 LES CONTENEURS
5-1 Le conteneur Panel

Le conteneur Panel est un panneau qui sert essentiellement


ranger les composants. La classe Panel est trs simple, elle ne
contient qu'un seul constructeur et une seule mthode add()
Panel p = new Panel() ; // dfinit un nouveau panneau
add(p); : intgre le panneau p dans un autre conteneur (une
applet par exemple)
Un panneau peut lui mme contenir d'autres conteneurs. Ainsi des
panneaux peuvent tre embots

_____________________________________________________________________________________________________
Mme A. BENOMAR 299
Chapitre 5 LES INTERFACES GRAPHIQUES
5 LES CONTENEURS
Exemple : Utiliser dans une applet deux panneaux
import java.awt.* ;
import java.applet.* ;
public class DemoPanel extends Applet
{ public void init()
{ FlowLayout fl=new FlowLayout();
setLayout(fl);
Panel p1= new Panel();
Button b1=new Button("Premier");
Button b2=new Button("Deuxime");
p1.add(b1);
p1.add(b2);
add(p1);
FlowLayout fl2=new FlowLayout(FlowLayout.LEFT,40,20);
setLayout(fl2);
Panel p2= new Panel();
Button b3=new Button("Troisime");
Button b4=new Button("Quatrime");
p2.add(b3);
p2.add(b4);
add(p2); }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 300
Chapitre 5 LES INTERFACES GRAPHIQUES

5 LES CONTENEURS
5-2 Le conteneur Frame

Une frame ou encadrement permet de crer une fentre


l'extrieur de l'applet qui s'excute comme une application
indpendante

La classe Frame contient deux constructeurs :

Frame f = new Frame();


// cration d'une fentre d'encadrement invisible

Frame f = new Frame(String);


// cration d'une fentre d'encadrement invisible avec un nom de la
fentre.
_____________________________________________________________________________________________________
Mme A. BENOMAR 301
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Les interactions de l'utilisateur avec l'interface (par


exemple cliquer sur la souris, taper sur une touche du
clavier, presser un bouton , ) sont appels vnements.
On dit que l'on "traite un vnement" lorsqu'on prend en
compte celui ci et que l'on excute des actions en
consquence . La mthode qui traite l'vnement est
galement appele gestionnaire d'vnement
La classe java.awt.Event est capable de mmoriser
tous les paramtres relatifs un vnement
_____________________________________________________________________________________________________
Mme A. BENOMAR 302
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

Des programmes l'coute


Les ractions aux vnements utilisateur dans un
programme java sont grs par des programme l'coute
(listener). Ces programmes doivent implmenter l'interface
EventListener (auditeurs d'vnements) ou des interfaces qui
hritent de EventListener ( par exemple ActionListener). On
appellera "adaptateur" toute instance d'une classe implmentant
une interface hrite de EventListener.
L'interface ActionListener dclare une seule mthode :

public void actionPerformed(ActionEvent)


_____________________________________________________________________________________________________
Mme A. BENOMAR 303
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS

L'ajout d'un programme l'coute impose deux instructions :


- La classe doit importer le package java.awt.event qui
contient les classes d'coute
import java.awt.event.*;
- La classe doit utiliser l'instruction implements pour
dclarer qu'elle utilisera une ou plusieurs interfaces d'coute. Par
exemple :
public class Evenement extends java.applet.Applet implements
ActionListener
_____________________________________________________________________________________________________
Mme A. BENOMAR 304
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Les interfaces EventListener permettent un composant
d'interface graphique utilisateur de gnrer des vnements
utilisateur. Aucun composant ne pourra tre entendu par les
autres lments d'un programme sans la prsence d'au moins un
des auditeurs. Un programme doit contenir une interface
d'auditeur pour chaque type de composant
Un objet peut dlguer la gestion de ses vnements
plusieurs Listeners. Chacun des Listener ragira aux vnements
de lobjet.
Un Listener peut couter plusieurs objets .
Pour quun objet puisse dlguer la gestion on doit spcifier qui sen
chargera par une mthode du type : add<Typedvnement>Listener.
_____________________________________________________________________________________________________
Mme A. BENOMAR 305
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS

Tableau synthtique des vnements et des listeners


Le tableau ci-dessous indique :
-En premire colonne : un type dvnement
-En deuxime colonne, les types de composants graphiques pouvant
recevoir lvnement indiqu
-En troisime colonne, linterface Listener quon peut
implmenter pour traiter lvnement indiqu, et la classe que lon
peut tendre pour servir dadptateur, lorsquune telle classe existe
-En dernire colonne , les mthodes dclares par le listener

_____________________________________________________________________________________________________
Mme A. BENOMAR 306
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS

_____________________________________________________________________________________________________
Mme A. BENOMAR 307
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS

_____________________________________________________________________________________________________
Mme A. BENOMAR 308
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple : Il sagit de construire une interface graphique qui
permet de tracer un cercle rouge si on clique sur le bouton trace et
deffacer ce cercle si on clique sur le bouton efface
import java.awt.*;
import java.awt.event.*;
class EssaiBouton extends Frame implements ActionListener
{
Button trace = new Button("trace");
Button efface = new Button("efface");
EssaiBouton()
{
setLayout(new FlowLayout(FlowLayout.CENTER,5,5));

_____________________________________________________________________________________________________
Mme A. BENOMAR 309
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple :
add(trace);
add(efface);
trace.addActionListener(this);
efface.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{ Graphics g=getGraphics();
if (e.getSource()==trace)
{ g.setColor(Color.red);
g.drawOval(50,50,100,100); }
else if (e.getSource()==efface)
{ g.setColor(getBackground());
g.drawOval(50,50,100,100); }
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 310
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS

Exemple :

public static void main(String[] argv)


{
EssaiBouton monCadre=new EssaiBouton();
monCadre.setSize(300,300);
monCadre.setVisible(true);
}
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 311
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS


* Linterface MouseListener

Les prototypes de mthodes dfinies dans MouseListener


void mouseClicked(MouseEvent e) la souris a t ciqu
(presse et relache)
void mouseEntered(MouseEvent e) : la souris entre dans le
composant
void mouseExited(MouseEvent e) : La souris sort du
composant
void mousePressed(MouseEvent e) : La souris est press
void mouseReleased(MouseEvent e) : la souris relache. */
_____________________________________________________________________________________________________
Mme A. BENOMAR 312
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des vnements de la souris
public class Souris extends Frame implements MouseListener
{ TextField text1;

Souris(String titre)
{ super(titre);
text1 = new TextField(30);
FlowLayout fl=new FlowLayout();
setLayout(fl);
add(text1);
addMouseListener(this);

}
_____________________________________________________________________________________________________
Mme A. BENOMAR 313
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS


* Exemple : utilisation des vnements de la souris
public void mouseClicked(MouseEvent e)
{
text1.setText("Vous avez cliqu sur la souris " + e.getX()
+","+e.getY()); }
public void mouseEntered(MouseEvent e)
{text1.setText("La souris est entre.");}
public void mouseExited(MouseEvent e)
{text1.setText("La souris est sortie.");}
public void mousePressed(MouseEvent e)
{text1.setText("La souris est enfonce ");}
public void mouseReleased(MouseEvent e)
{text1.setText("La souris est relache ");}
_____________________________________________________________________________________________________
Mme A. BENOMAR 314
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS


* Exemple : utilisation des vnements de la souris
public void mousePressed(MouseEvent e)
{ text1.setText("La souris est enfonce "); }
public void mouseReleased(MouseEvent e)
{text1.setText("La souris est relache ");}
public static void main(String[] arg)
{Souris maSouris = new Souris("Gestion de la souris");
maSouris.setSize(300,300);
maSouris.setVisible(true);
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 315
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS


* Exemple : utilisation des vnements du clavier

* Les mthodes de l'interface KeyListener

void keyPressed(KeyEvent e) : touche presse

void keyReleased(KeyEvent e) : touche relache

void keyTyped(KeyEvent e) :touche tape

_____________________________________________________________________________________________________
Mme A. BENOMAR 316
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS


* Exemple : utilisation des vnements du clavier

public class Touche extends Frame implements KeyListener

{ String text="";
Touche(String titre)
{
super(titre);
addKeyListener(this);
}

public void paint(Graphics g)


{ g.drawString(text,10, 100); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 317
Chapitre 5 LES INTERFACES GRAPHIQUES

6- LES EVENEMENTS ET LES ACTIONS


* Exemple : utilisation des vnements du clavier
public void keyTyped(KeyEvent e)
{ text = text + e.getKeyChar();
//getKeyChar() retourne le caractre presse
repaint(); }
public void keyPressed(KeyEvent e)
{ }
public void keyReleased(KeyEvent e)
{ }
public static void main(String[] arg)
{Touche maTouche = new Touche("Gestion du clavier");
maTouche.setSize(300,300);
maTouche.setVisible(true); } }
_____________________________________________________________________________________________________
Mme A. BENOMAR 318
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swing
Exemple 1
import javax.swing.*;
import java.awt.*;
class TestJFrame extends JFrame
{ TestJFrame()
{ super("une application");
Container cp = getContentPane();
// public Container getContentPane() de la classe JFrame
// Retourne un objet de type Container de cette fentre
JLabel label = new JLabel("Hello",SwingConstants.CENTER);
cp.add(label, BorderLayout.CENTER);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 319
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swing

Exemple 1

public static void main(String args[])


{ JFrame f = new TestJFrame();
f.setBounds(200,200, 150, 100);
f.setVisible(true);
}
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 320
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swing

Exemple2

import javax.swing.*;
import java.awt.event.*;
public class SwingDemo extends JFrame
{ Icon image = new ImageIcon("smallbabies.jpeg");
//JLabel label = new JLabel(image);
JButton SwingButton = new JButton(image);
public SwingDemo(String WindowTitle)
{super(WindowTitle);
getContentPane().add(SwingButton);
// getContentPane().add(label); }
_____________________________________________________________________________________________________
Mme A. BENOMAR 321
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swing

Exemple2

public static void main(String args[])


{ JFrame frame = new SwingDemo("Swing Demo Window");
frame.setSize(400, 400);
frame.setVisible(true);
}
}

_____________________________________________________________________________________________________
Mme A. BENOMAR 322
Chapitre 6 LES EXCEPTIONS

1- INTRODUCTION

2- DEFINITION D'UNE EXCEPTION

3- UN PREMIER EXEMPLE D'UNE


EXCEPTION

4- ATTRAPER UNE EXCEPTION


4-1 Les blocs try et catch
4-2 Le mot cl throws
4-3 Le bloc finally
4-4 Quelques classes d'exceptions

5- DEFINIR SA PROPRE EXCEPTION


_____________________________________________________________________________________________________
Mme A. BENOMAR 323
LES EXCEPTIONS

1- Introduction
Un programme ne se droule pas toujours comme
prvu. Plusieurs cas d'erreurs peuvent venir perturber son
bon droulement : division par zro, dpassement des
bornes d'un tableau, fichier inexistant,
Dans tout programme, le traitement des erreurs
reprsente une tche importante, souvent nglige par les
programmeurs.
Java dispose d'un mcanisme trs efficace appel le
mcanisme d'exceptions pour obliger les programmeurs
prendre en compte les erreurs. Ce mcanisme admet deux
principes fondamentaux :
_____________________________________________________________________________________________________
Mme A. BENOMAR 324
LES EXCEPTIONS

1- Introduction
- La plus grande partie des erreurs qui pourraient
survenir doit tre dtecte par le compilateur, de faon
limiter autant que possible les occasions de les voir se
produire pendant l'utilisation des programmes

- Le traitement des erreurs doit tre spar du reste


du code, de faon que celui-ci reste lisible.

_____________________________________________________________________________________________________
Mme A. BENOMAR 325
LES EXCEPTIONS
2- Dfinition dune exception
Une exception est une interruption de l'excution d'un
programme suite une erreur. Par exemple, une division par
zro provoque une exception de type ArithmeticException
Les exceptions en java sont des instances de sous-classes
des classes :
java.lang.Error (pour des erreurs graves, qui devront
gnralement conduire l'arrt du programme)
ou
java.lang.Exception (pour des vnements inattendus,
qui seront souvent traits de sorte qu'elle ne provoquent
pas l'arrt du programme).
_____________________________________________________________________________________________________
Mme A. BENOMAR 326
LES EXCEPTIONS
3- Un premier exemple d' une exception

Avant de voir comment traiter les exceptions , regardons


quoi elles correspondent en prenant un exemple trs simple
de division par zro :

class DivParZero
{
public static void main(String[] argv)
{
int zero = 0 ;
zero = 2000 / zero ;
}
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 327
LES EXCEPTIONS
3- Un premier exemple d' une exception
A l'excution du programme, on obtient l'affichage suivant :

Exception in thread "main"


java.lang.ArithmeticException: / by zero at
DivParZero.main(DivParZero.java:6)
On distingue :
- Le nom complet de l'exception qui a t leve :
java.lang.ArithmeticException
- Un message prcisant la cause de cette erreur : / by zero
- L'indication de la classe, de la mthode et du numro de ligne o s'est
produite cette exception : at DivParZero.main(DivParZero.java:6)
_____________________________________________________________________________________________________
Mme A. BENOMAR 328
LES EXCEPTIONS
3- Un premier exemple d' une exception
Si on dsire ne pas avoir d'interruptions dans notre programme, on grer
l'erreur en utilisant les blocs try et catch de la faon suivante :
class DivParZero
{
public static void main(String[] argv)
{
int zero = 0 ;
try
{ zero = 2000/zero ; }
catch (ArithmeticException e)
{ System.out.println("Une exception arithmtique a t leve");
System.out.println("Message : "+e.getMessage()); }
}
A l'excution, on obtient :
Une exception arithmtique a t leve
Message : / by zero
_____________________________________________________________________________________________________
Mme A. BENOMAR 329
LES EXCEPTIONS

4- Attraper une exception


Pour pouvoir attraper une exception ( ne pas la laisser
arrter le programme), il faut entourer le code susceptible de la
lancer dans un bloc prcd de l'instruction try. L'exception
lance dans le bloc peut tre attrape par une sorte de mthode
d'un type particulier dsigne par le mot cl catch et prenant
pour paramtre un objet du type de l'exception lance ou du
type d'une classe parente.

_____________________________________________________________________________________________________
Mme A. BENOMAR 330
LES EXCEPTIONS

4-1 Les blocs try et catch


Si on dcide de traiter une exception, on dit qu'on attrape
l'exception et il faut utiliser dans ce cas les mots cl try et
catch
Le mot cl try permet de spcifier un bloc de code sur le
quel on s'attend qu'une exception soit leve ( c d possibilit
d'avoir une erreur)
Le bloc de l'instruction try doit tre suivi d'une instructions
catch
Le mot cl catch sert spcifier le code excuter pour
une exception donne. Il faut faire suivre le mot catch d'une
parenthse ouvrante, d'un type exception (une classe), du nom
qu'on lui donne , d'une parenthse fermante et du code associ
plac entre accolade
_____________________________________________________________________________________________________
Mme A. BENOMAR 331
LES EXCEPTIONS

4-1 Les blocs try et catch

Donc les blocs try et catch sont utiliss comme suit :


try
{
// zone contenant des instructions pouvant gnrer des
erreurs
(lever des exceptions)
}
catch (NomException e)
{
// Traitement faire dans le cas de l'exception e
( erreur e a t rencontr dans le bloc try)
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 332
LES EXCEPTIONS

4-1 Les blocs try et catch


Un bloc try peut tre suivi de plusieurs blocs catch chacun
spcifiant un type d'exception diffrent :
try
{
opration _dangereuse1;
opration_dangeureuse2;
opration_dangeureuse3;
catch (Exception1 e1)
{
}
catch (Exception2 e2)
{
}
catch (Exception3 e3)
{
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 333
LES EXCEPTIONS

4-2 Mcanisme de lancement d'une exception


On suppose qu'une instruction i d'une mthode de nom
uneMethode gnre une erreur (ou lance une une exception) :
* Si l'instruction i se trouve dans un bloc de uneMethode prcd
du mot rserv try, et suivi d'un bloc prcd du mot rserv catch
assorti d'un argument de la classe ou d'une super-classe de l'exception
lance. Alors :
** les instructions qui suivent le lancement de l'exception et
intrieures au bloc try sont ignores
** les instructions du bloc catch sont effectues
** Le programme reprend normalement avec l'instruction qui suit
le bloc catch.

_____________________________________________________________________________________________________
Mme A. BENOMAR 334
LES EXCEPTIONS

4-2 Mcanisme de lancement d'une exception


* Si l'instruction i n'est pas situe dans un bloc try ,
Alors :
** Si uneMethode est la mthode main, le programme se termine et
l'exception n'a pas t attrape.
** Sinon, on se retrouve dans la mthode qui a appele
uneMethode, au niveau de l'instruction j qui a fait appel uneMethode.
L'instruction j lance son tour l'exception.
Si une exception est lance et pas attrape, et donc qu'elle
provoque la terminaison du programme, la pile des mthodes
traverses par l'exception est indique l'utilisateur. On dit qu'il ya
propagation de l'exception

_____________________________________________________________________________________________________
Mme A. BENOMAR 335
LES EXCEPTIONS
Exemple : Calcul d'une moyenne (entire) de notes entires envoyes en
arguments par la ligne de commande .Les arguments non entiers doivent tre
ignors et signals l'utilisateur
class ExceptionCatch
{
static int moyenne(String[] liste)
{
int somme = 0,entier, nbNotes = 0;
for (int i = 0; i < liste.length; i++)
{
try {
entier = Integer.parseInt(liste[i]);
somme += entier;
nbNotes++; }
catch (NumberFormatException e)
{System.out.println("la "+ (i+1) +"me note n'est pas entire");}
}
return (somme/nbNotes);
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 336
LES EXCEPTIONS
public static void main(String[] argv)
{
System.out.println("La moyenne
est"+moyenne(argv));
}
}
A l'excution : java ExceptionCatch 12 a 15
La 2 me note n'est pas entire
La moyenne est 13

Si on donne en excution : java ExceptionCatch 12.5 d


La 1 me note n'est pas entire
La 2 me note n'est pas entire
Exception in thread "main" java.lang.ArithmeticException: / by zero)
at ExceptionCatch.moyenne(Compiled Code)at
ExceptionCatch.main(ExceptionCatch.java:23
La division par zro n'est pas attrape
_____________________________________________________________________________________________________
Mme A. BENOMAR 337
LES EXCEPTIONS
4-3 Le mot cl throws
Une mthode susceptible de lancer une exception sans l'attraper
(c'est--dire contenant une instruction susceptible de gnrer une erreur
sans que celle-ci soit traite l'intrieur de la mthode) doit l'indiquer dans
son en-tte par le mot cl throws.
Ce mot cl permet d'avertir le systme qu'une certaine catgorie
d'exceptions ne seront pas traites.
Dans la dclaration d'une mthode, throws permet de dclarer la
liste des classes d'exceptions que la mthode est susceptible de
dclencher :
Syntaxe :
Entte mthode throws ClasseException

_____________________________________________________________________________________________________
Mme A. BENOMAR 338
LES EXCEPTIONS

4-3 Le mot cl throws


Exemple :
void fonction() throws IOException
La mthode fonction est susceptible de lancer des exceptions
de type entre/sortie
Remarque : Il est obligatoire d'indiquer par le mot cl throws les
exceptions susceptibles d'tre lances et non attrapes (sauf pour les
exceptions les plus courantes de l'API). Sinon il y 'aura erreur de
compilation

_____________________________________________________________________________________________________
Mme A. BENOMAR 339
LES EXCEPTIONS
4-4 Bloc Finally
Un bloc finally est un bloc d'instructions prcd du mot cl
finally. Ce bloc sera toujours excut aprs le traitement d'exception. Il
est en gnral utilis pour fermer des fichiers, librer des ressources,
Un bloc finally suit Un bloc try ou un bloc catch
Exemple d'utilisation d'un bloc finally
class UtiliseFinally
{
static int moyenne(String[] liste)
{
int somme=0, entier, nbNotes=0, i=0;
for ( i=0;i<liste.length;i++)
{ try
{ entier=Integer.parseInt(liste[i]);
somme +=entier;
nbNotes++; }
_____________________________________________________________________________________________________
Mme A. BENOMAR 340
LES EXCEPTIONS
4-4 Bloc Finally
finally
{ System.out.println("donne traite :"+liste[i]); }
}
return somme/nbNotes;
}
public static void main(String[] argv)
{
try
{ System.out.println("La moyenne est "+moyenne(argv)); }
catch (NumberFormatException e)
{ System.out.println("Erreur sur vos entiers"); }
}
}
A l'excution de : java UtiliseFinally 20 xy
On aura : donne traite : 20
donne traite : xy
Erreur sur vos entiers
_____________________________________________________________________________________________________
Mme A. BENOMAR 341
LES EXCEPTIONS
4-5 Quelques classes d'exceptions
Exception Type d'exception
IOException Entre Sortie
Exemples : lecture sur un
fichier inexistant
ArithmticException Arithmtique
Exemple : Division par zro
ArrayIndexOutOfBoundsExcepti Dpassement des bornes d'un
on tableau
NumberFormatException Format du nombre n'est pas
respecte
Exemple : un int reprsente en
float
OutOfMemoryException Dpassement de mmoire
_____________________________________________________________________________________________________
Mme A. BENOMAR 342
LES EXCEPTIONS
5- Dfinir sa propre exception
Si on veut pouvoir signaler un vnement exceptionnel d'un
type non prvu par l'API, il faut tendre la classe java.lang.Exception.

En gnral la classe tendue ne contient qu'un ou plusieurs


constructeurs et ventuellement une redfinition de la mthode
toString

Lors du lancement de l'exception, ( l'aide du mot rserv throw) ,


on cre une instance de la classe dfinie

_____________________________________________________________________________________________________
Mme A. BENOMAR 343
LES EXCEPTIONS
5- Dfinir sa propre exception
Exemple :
class ExceptionRien extends Exception
{ public String toString()
{ return "Aucune note n'est valide " ; }
}
//Cette classe peut tre utilise comme exception dans une autre classe :
class ExceptionThrow
{
static int moyenne(String[] liste) throws ExceptionRien
{ int somme = 0,entier, nbNotes = 0;
for (int i = 0; i < liste.length;i++)
{
try
{entier = Integer.parseInt(liste[i]);
somme += entier;
nbNotes++;
}
_____________________________________________________________________________________________________
Mme A. BENOMAR 344