Upload
alberi-rigaud
View
106
Download
0
Embed Size (px)
Citation preview
1
______________________________________________________________________________
PREMIERS PAS VERS JAVA
Les Journées Informatiques des Classes Préparatoiresaux Grandes Ecoles
Rabat, 29 Octobre-2 Novembre 2009
Mme A. BENOMARProfesseur à l’Institut National des Postes et Télécommunications
_____________________________________________________________________________________________________Mme A. BENOMAR
2
Chapitre 1 GENERALITES SUR LE LANGAGE JAVA
Chapitre 2 OUTILS ELEMENTAIRES POUR LA PROGRAMMATION JAVA
Chapitre 3 HERITAGE ET INTERFACES EN JAVA
SOMMAIRE
_____________________________________________________________________________________________________Mme A. BENOMAR
3
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
4
Chapitre 1 INTRODUCTION A JAVA
1- CARACTERISTIQUES DE BASES DE LA P.O.O
1 - 1 Notion de classe et d’objet
Objet = Données + Traitements
La classe : Abstraction d’un ensemble d’objets qui ont les mêmes caractéristiques ( attributs) et les mêmes comportements ( méthodes)
objet est une instance d’une classe.
Exemple : Une classe de nom Individu Attributs : numeroCin, nom, prenom, dateNaissance, adresseMéthodes : changeAdresse(), calculSalaire(),dateRetraite().. Objets : Mohammed, Nadia, …
_____________________________________________________________________________________________________Mme A. BENOMAR
5
1 – 2 L’encapsulation des données :- Les données sont protégées à l’intérieur de chaque objet.- Les données (publiques ,secrètes)
1- 3 L’Héritage
Une classe dérivée hérite des propriétés d’une classe de base.- Economie de code- Amélioration de la fiabilité- Amélioration de la lisibilitéExemple : Un rectangle peut hériter d’un polygone 1- 4 Le Polymorphisme
Le polymorphisme permet la redéfinition d’une méthode
1 - 5 Le Multithreading
THREADS : processus qui s’exécutent simultanément à l’intérieur d’un unique programme
_____________________________________________________________________________________________________Mme A. BENOMAR
6
2-NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 1 Caractéristiques de JAVA
- JAVA est un langage de programmation orientée objets proche de C++.
- JAVA fonctionne comme une machine virtuelle ( indépendant de toute plate forme)
- JAVA est simple (pas de pointeur, pas d’héritage multiple)
- JAVA autorise le multitâche (multithreading)-
_____________________________________________________________________________________________________Mme A. BENOMAR
7
2- NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 1 Caractéristiques de JAVA
- JAVA peut être utilisé sur INTERNET
- JAVA est gratuit
-JAVA contient une très riche bibliothèque de classes (Packages) qui permettent de :
- Créer des interfaces graphiques
- Utiliser les données multimédia
- Communiquer à travers les réseaux
_____________________________________________________________________________________________________Mme A. BENOMAR
8
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 création du l.o.o OAK
- En 1994 conversion du langage Oak pour l’adapter aux
technologies des réseaux informatiques tels que
INTERNET. C’est la naissance de JAVA
_____________________________________________________________________________________________________Mme A. BENOMAR
9
2- NAISSANCE ET DEVELOPPEMENT DE JAVA
2- 2 Historique de JAVA
Des éditeurs de grande réputation 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 décembre 1995)
- Adobe Systems ( 6 décembre 1995)
- Symantec (13 decembre 1995)
- Microsoft (12 mars 1996)
- Novell ( 21 mars 1996)
_____________________________________________________________________________________________________Mme A. BENOMAR
10
3- ENVIRONNEMENT DE JAVA
3- 1 Java Developer’s Kit (JDK)Sun fourni gratuitement un ensemble d'outils et d'API pour permettre le développement de programmes avec Java. Ce kit, nommé JDK, est librement téléchargeable sur le site web de Sun http://java.sun.com
Le kit java contient : * le compilateur (javac),* l’interpréteur (java), * l’appletviewer ou inspecteur d’applet
- Le JDK contient par ailleurs l’API de java (Application Programmers Interface) qui correspond à la bibliothèque de java- Le kit JDK ne comporte pas d’éditeur.
_____________________________________________________________________________________________________Mme A. BENOMAR
11
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de JavaJava évolue au fil des années. En plus de faire évoluer les
numéros de versions, le nom complet de chaque version a parfois été changé. Les principaux événements de la vie de Java sont les
suivants : Année Evénements
1995 mai : premier lancement commercial
1996 janvier : JDK 1.0.1
1997 février : JDK 1.1
1998 décembre : lancement de J2SE 1.2
1999 décembre : lancement J2EE
2000 mai : J2SE 1.3
2002 février : J2SE 1.4
2004 septembre : J2SE 5.0
2006 mai : Java EE 5 décembre : Java SE 6.0
_____________________________________________________________________________________________________Mme A. BENOMAR
12
3- ENVIRONNEMENT DE JAVA
3- 2 Versions de Java
Depuis sa version 1.2, Java a été renommé Java 2. Les numéros de version 1.2 et 2 désignent donc la même version. Le JDK a été renommé J2SDK (Java 2 Software Development Kit) mais la dénomination JDK reste encore largement utilisée, à tel point que la dénomination JDK est reprise dans la version 5.0. En outre, Java 2 désigne 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 développement (sera fini au cours de 2010)
Compatibilité de versionJava assure une compatibilité binaire ascendante (les programmes compilés avec une ancienne version peuvent s'exécuter avec une plate-forme plus récente).
_____________________________________________________________________________________________________Mme A. BENOMAR
13
3- ENVIRONNEMENT DE JAVA
3-3 Editions de la plate-forme JavaLa plate-forme Java 2 est disponible dans plusieurs éditions utilisées à
des fins diverses.
Java 2 Standard Edition (J2SE), Contient les classes qui forment le cœur du langage Java
Java 2 Entreprise Edition (J2EE) pour le développement d’applications d’entreprise . Elle contient les classes J2SE plus
d’autres
classes pour le développement d’applications d’entreprise.
Java 2 Micro Edition (J2ME). pour les produitsd’électronique grand public (téléphones portables,..) dans ce cas seule une petite partie du langage est utilisée.
Chaque édition contient un kit de développement Java 2 (SDK) pourdévelopper des applications et un environnement d’exécution Java 2 (JRE)pour les exécuter.
_____________________________________________________________________________________________________Mme A. BENOMAR
14
3- 4 Le code source
- Une application java est généralement composée de plusieurs fichiers source. Les fichiers source de java ont l’extension .java.
- Un fichier .java peut contenir plusieurs classes. - Le nom du fichier source java doit être le même que celui
de la classe publique que ce fichier renferme (Un fichier java ne peut pas contenir plus d’une classe publique)
3- 5La compilation* Le byte code - La compilation va transformer le code source en J-code ou byte-
code Java indépendant de toute plate forme- La commande qui permet la compilation est la suivante :
Javac nom_fich.javaCréation d’un ou plusieurs fichiers .class.
_____________________________________________________________________________________________________Mme A. BENOMAR
15
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 exécutée sur tout ordinateur pour lequel une machine virtuelle est disponible.
- Une application sera exécutée par l’interpréteur de java
Java nom_fich
3- 2- 4 Quelques environnements d’utilisation de java
- PCGRASP , JGRASP
- JBUILDER
- ECLIPSE
- NETBEANS
-….
_____________________________________________________________________________________________________Mme A. BENOMAR
16
-Les fichiers jar
Les fichiers .jar sont des fichiers java compressés comme les
fichiers .zip selon un algorithme particulier devenu un standard de fait
dans le monde des PC.
Ils sont parfois appelés 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
compressés avec l'indication de leur chemin d'accès.
Un fichier .jar peut ainsi être exécuté directement dans tout
environnement possédant une machine virtuelle
_____________________________________________________________________________________________________Mme A. BENOMAR
17
4- LES PAQUETAGES (les packages)* Organisation hiérarchique des classes en packages* Regrouper plusieurs classes qui collaborent entre elles dans une application* Définir un certain niveau de protection
4- 1 Construction de package- Pour ranger une classe dans un package, il faut insérer la ligne suivante
au début du fichier source:package nomDuPaquetage ;
- Un paquetage qui doit contenir des classes et donc des fichiers est un répertoire. le paquetage a le même nom que le répertoire qui le contient.
4- 2 Utilisation des classes d’un paquetageOn peut importer les packages de deux manières différentes :
1 - import nomDuPackage.* ; 2 - import nomDuPackage.nomDeLaclasse;
Exemple import liste.* ; // importer toutes les classes du package listeimport liste.A ; // importer la classe A du package liste
_____________________________________________________________________________________________________Mme A. BENOMAR
18
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 défaut.
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.Graphicsjava.awt.Color
_____________________________________________________________________________________________________Mme A. BENOMAR
19
4- 3 API de JAVA
-Javax.swing contient les classes pour les interfaces graphiques évolués
-java.applet : utile pour faire des applets qui sont des applications utilisables à travers le web
-java.io: contient les classes nécessaires aux E/S
-java.net : accés aux réseaux
-java.util : classes d’utilitaires (Random, Date, ...)
19
_____________________________________________________________________________________________________Mme A. BENOMAR
20
5 - LES CLASSES JAVA
Une classe définit des attributs et des méthodes
5 - 1 Architecture d'une classe JAVA
Une classe se compose de deux parties :
* l’en-tête
* le corps
_____________________________________________________________________________________________________Mme A. BENOMAR
21
5- LES CLASSES JAVA
5 - 1 Architecture d'une classe JAVA
Entête d’une classe
[modificateur] class <NomClasse>[extends <superclass>]
[implements <Interface>]
[ ] : optionnel
< > : obligatoire
gras : mot clé
Corps d’une classe Le corps de la classe donne sa définition. Il contient
les déclarations des attributs et des méthodes.
_____________________________________________________________________________________________________Mme A. BENOMAR
22
5 - 2 Les modificateurs de classe
Modificateur Définition
public La classe est accessible par toutes les autres classes des autres packages. Elle est visible partout
private La classe n’est accessible qu’à partir du fichier où elle est définie
final Les classes finales ne peuvent pas être héritables
friendly l'accès est garanti à toute classe dans le package.
abstract Aucun objet ne peut instancier cette classe. Seules les classes abstraites peuvent déclarer des méthodes abstraites. Cette classe sert pour l’héritage
_____________________________________________________________________________________________________Mme A. BENOMAR
23
5 - 3 Conventions d’écriture en JAVA
Type Convention Exemple
Nom d’une classe
Débute par une majuscule
class Polygone
Nom d’un objet
Débute par une minusculePeut s’étaler sur plusieurs mots Chaque mot commence par une majuscule sauf le premier
premierObjet
Nom de méthode
Débute par une minusculeSauf pour le constructeur
void ecrire()
Constante S’écrit en majuscules A_CONSTANT
_____________________________________________________________________________________________________Mme A. BENOMAR
24
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 : méthode de classe
System.out.println : La méthode println écrit sur l’écran la chaine de caractères passée en paramètres à cette méthode
_____________________________________________________________________________________________________Mme A. BENOMAR
25
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 crée un fichier Premier.class - Le fichier est exécuté par la commande java Premier
- On obtient à l’exécution : bravo
_____________________________________________________________________________________________________Mme A. BENOMAR
26
6- UTILISATION DES CLASSES
Pour utiliser une classe, elle doit être instanciée . Il y aura alors création d’un objet. Mais avant de créer un objet , il faut le déclarer
6 - 1 Déclaration d’un objet
NomClasse objet ; Cette instruction déclare un objet de la classe NomClasse mais ne le crée pas.
6- 2 Création d’un objet
Objet = new NomClasse( ) ; La déclaration et la création d’un objet peuvent être regroupées :
NomClasse objet = new NomClasse( ) On accéde aux méthodes et aux attributs de la classe comme suit :
NomObjet.méthode(arguments de la méthodes)
NomObjet.attribut
_____________________________________________________________________________________________________Mme A. BENOMAR
27
6- 3 Exemple d’utilisation d’objetIl s’agit d’écrire une application en java qui permet de calculer le salaire hebdomadaire d’un employé en fonction du taux horaire et du nombre d’heures
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 d’heures { float s; s=(taux_h*nb_h); return s; }
_____________________________________________________________________________________________________Mme A. BENOMAR
28
6- 3 Exemple d’utilisation d’objetpublic static void main(String[] arg) { float s1,s2; // les salaires de 2 employés Employe emp1,emp2; // 2 objets modélisant 2 employés
emp1=new Employe(); emp2=new Employe();
emp1.nom= " Mohammed"; // le nom de l’employé 1 emp1.nb_h= 35; // le nombre d’heures de l’employé 1 emp2.nom="Nadia"; // le nom de l’employé 2 emp2.nb_h=38 ; // le nombre d’heures de l’employé 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 l’éxecution , on aura : Le salaire de Mohammed est 1750.0 dhLe salaire de Nadia est 1900.0 dh
_____________________________________________________________________________________________________Mme A. BENOMAR
29
7- LES CONSTRUCTEURS
7 - 1 Définition
- Le constructeur est une méthode qui est effectuée au moment de la création d’un objet. Il sert à initialiser les variables contenues dans les objets.
- Le constructeur porte le même nom que sa classe. Il ne retourne pas de
valeur et ne mentionne pas void au début de sa déclaration - Toute classe possède au moins un constructeur. Si une classe ne déclare
pas de constructeur, un constructeur vide est crée automatiquement par défaut
Un constructeur est une fonction qui est appelée par le biais de l’opérateur new
monObjet = new Constructeur(arguments) ;
29
_____________________________________________________________________________________________________Mme A. BENOMAR
30
Exemple d’utilisation 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 d’heures { float s; s=(taux_h*nb_h); return s; }
_____________________________________________________________________________________________________Mme A. BENOMAR
31
Exemple d’utilisation 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");/* Dès la création d’un objet on doit spécifier la valeur du nom*/ emp1.nb_h= 35; // le nombre d’heures de l’employé 1 emp2.nb_h=38 ; // le nombre d’heures de l’employé 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
32
7 – 2 La variable this
La variable this sert à référencer dans une méthode
l’instance de l’objet en cours d’utilisation. Son emploi peut s’avérer utile dans les constructeurs avec des paramètres lorsque les variables de la classe et celles du constructeur portent
exactement le même 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
33
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 d’heures de l’employé 1
emp2.nb_h=38 ; // le nombre d’heures de l’employé 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
34
8- UTILISATION DES ARGUMENTS DE MAIN
Les arguments de la méthodes main permettent de récupérer des chaînes de caractères fournies depuis la ligne de commande
Exemple 1 d’utilisation des arguments de main : Les noms des employés sont considérés des arguments de la méthode 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
35
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 d’heures de l’employé 1 emp2.nb_h=38 ; // le nombre d’heures de l’employé 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 classeAprès compilation du fichier Arguments_main.java , il faut l’exécuter en donnant 2 chaînes de caractères pour les noms des 2 employés.Exemple d’exécution : java Arguments_main Ali Sanae
_____________________________________________________________________________________________________Mme A. BENOMAR
36
8- UTILISATION DES ARGUMENTS DE MAIN Exemple 2 : Utilisation d’un nombre entier comme argument
Il s’agit de considérer le nombre d’heures travaillées comme argument de main aussi pour pouvoir donner leurs valeurs à l’exécutionpublic 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
37
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 classeil faut exécuter cette classe en donnant 2 chaînes de caractères pour les noms des 2 employés et leurs nombres d’heures travailléesExemple d’exécution : java Arguments_entier Ali 30 Sanae 28
_____________________________________________________________________________________________________Mme A. BENOMAR
38
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
39
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
40
Chapitre 2 TECHNIQUES DE BASE DE LA PROGRAMMATION JAVA
2– Types élémentaires en java
JAVA dispose des 8 types élémentaires suivants, ces types sont appelés 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 Caractère 16 bits
_____________________________________________________________________________________________________Mme A. BENOMAR
41
Chapitre 2 TECHNIQUES DE BASE DE LA PROGRAMMATION JAVA
2– Types élémentaires en java
int Entier signé 32 bits
float Virgule flottante 32 bits
double Double précision 64 bits
long Entier long 64 bits
_____________________________________________________________________________________________________Mme A. BENOMAR
42
Java dispose également des classes suivantes pour gérer ces primitives :
Classe Primitive______________________________Character charByte byteShort shortInteger intLong longFloat floatDouble doubleBoolean boolean
_____________________________________________________________________________________________________Mme A. BENOMAR
43
3- LES PROPRIETES DES ATTRIBUTS
3 - 1 Déclaration
Un attribut correspond à une variable ou une constante
pouvant prendre une valeur différente pour chaque objet instance de la
classe.
Tous les objets d’une même classe ont les mêmes attributs,
mais chaque objet associe à ces attributs des valeurs qui lui sont
propres.
Avant d’utiliser un attribut, il doit être déclarée comme suit :
<modificateur> type_elementaire identificateur
_____________________________________________________________________________________________________Mme A. BENOMAR
44
3- LES PROPRIETES DES ATTRIBUTS
3 - 1 Déclaration
Modificateur Définition
final - Un attribut constant.
private - Un attribut privée ne peut être utilisée que dans les méthodes de la même classe
public - Attribut visible par toutes les autres méthodes
static - Attribut de classe indépendant des objets
_____________________________________________________________________________________________________Mme A. BENOMAR
45
33-2 IdentificateursA Chaque objet , classe, programme ou variable est associé un identificateur. Les
identificateurs Java sont formés d'un nombre quelconque de caractères. Ils doivent
respecter les règles suivantes :
- Les majuscules et les minuscules sont distinguées.
- Le premier caractère ne doit pas être un chiffre
- L’ identificateur ne doit pas être un mot clé de Java.
En plus des règles ci-dessus, il est conseillé de respecter les directives
suivantes :
_ - Evitez les caractères accentués dans les noms de classes.
- - Evitez de donner le même nom à des identificateurs d'éléments différents
_____________________________________________________________________________________________________Mme A. BENOMAR
46
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
47
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 indépendant des objets
- Un attribut statique existe dès que sa classe est chargée en
mémoire alors qu’un attribut d’instance existe lors de l’instanciation de
la classe
Pour utiliser un attribut ou une méthode statique, on écrit :
NomClasse.nomAttributStatique
Cependant JAVA permet également d’utiliser :
nomObjet.nomAttributStatique où nomObjet est une
instanciation de la classe qui contient l’attribut ou la méthode statique
_____________________________________________________________________________________________________Mme A. BENOMAR
48
Exemple1 : attribut statiqueclass 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
49
Exemple2 : Calcul des moyennes des élèves ainsi que la moyenne de la classe
class Moyenne { static int nb_eleves ; // nombre d’élèves float note1,note2,note3; // notes des élèves int num; // numéro de l'élève String nom; // nom de l'élève 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
50
Exemple2 : Calcul des moyennes des élèves 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
51
System.out.println("Eleve : numéro : "+eleve1.num);
System.out.println("Nom : "+eleve1.nom+" Moyenne : "+moy1);
System.out.println("Eleve : numéro : "+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'exécution on aura :Eleve 1 Nom : Adnane Moyenne : 14.3333Eleve 2 Nom : Amal Moyenne : 15.3333La moyenne de la classe est : 14.833
_____________________________________________________________________________________________________Mme A. BENOMAR
52
-3-5 Les opérateurs de java
* Multiplication
/ division
% modulo
+ addition
- soustraction
= affectation
== identité
!= différent de
&& et logique
|| ou logique
++ incrémentation
+= - = *= /=
_____________________________________________________________________________________________________Mme A. BENOMAR
53
3-6 – Les initialiseurs
Les initialiseurs d’attributs permettent d’affecter à
un attribut une valeur initiale. Si on déclare un attribut non
static dans une méthode, cet attribut n’a pas de valeur.
Toute tentative d’y faire référence produit une erreur de
compilation.
En revanche , s’il s’agit d’une variable globale, càd
si cette déclaration se trouve en dehors de toute méthode,
JAVA l’initialise automatiquement avec une valeur par
défaut .
_____________________________________________________________________________________________________Mme A. BENOMAR
54
Exemple : class Initialiseur { int a1; static int a2; void m1() { int a3; System.out.println(a3) ; //erreur car a3 non initialisée } 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
55
Pour des initialisations plus complexes, on peut utiliser un
bloc placé à l’extérieur de toute méthode ou constructeur
Par exemple, float e
{
if (b != 0 )
{ e = (float) a /b ; }
}
_____________________________________________________________________________________________________Mme A. BENOMAR
56
3-7 Les attributs constants
- Une constante est un attribut qui ne peut plus être
modifié une fois qu’il a été initialisé.
- Une constante est initialisée une seule fois soit au
moment de sa déclaration, soit dans le constructeur de la
classe
-Pour déclarer un attribut constant , on le muni du
modificateur final
Si on déclare 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 déclare un attribut final dans le
constructeur . Il y en aura un exemplaire par instance créée.
_____________________________________________________________________________________________________Mme A. BENOMAR
57
Exemple de définition et d’utilisation de constantes
class Constantes{ final int C ; /* déclare une constante d’instance qui peut être initialisée dans le constructeur */
final static int D= 100 ; /* déclare une constante de classe qui doit être initialisée au moment de sa définition */
Constantes (int i ) // Constructeur de la classe Constantes
{C = i ; // initialisation de la constante d’instance C// C= D ; interdit car C doit être définit une seule fois// D = 10 ; interdit car D est une constante de classe
}}
_____________________________________________________________________________________________________Mme A. BENOMAR
58
public class EssaiConstantes{public static void main (String[] arg)
{ System.out.println ( ( new Constantes (2)).C ) ;
System.out.println (Constantes.D ) ; }
}
On obtient à l’exécution : 2
100
_____________________________________________________________________________________________________Mme A. BENOMAR
59
4- Les structures de contrôle
Les structures de contrôle de java sont similaires à celles de C
Les instructions conditionnelles
a – L’instruction ifif (expression)
InstructionSiVrai ;else
InstructionSiFaux
b- L’opérateur ?condition ? siVrai : siFaux
Exemple : int a, b ;int min = a<b ? a : b
_____________________________________________________________________________________________________Mme A. BENOMAR
60
c- L’instruction switch switch (variable){ case cas1 : instruc11 ;
instruc12 ;.
break ; case cas2 : instruc21 ;
instruc22 ;.
break ;.
default : instrDefault ;}
_____________________________________________________________________________________________________Mme A. BENOMAR
61
Les instructions de répétitiona – L’instruction while
while (condition)instruction ;
b – L’instruction dodo
instr ;while (condition)
c – L’instruction forfor ( initialisation, ; test ; incrementation)
La boucle for en java autorise plusieurs expressions séparées par une virgule à apparaître dans la partie initialisation et incrémentation mais pas dans la partie test
Exemple : for (i=1, j=10; (k<15);i++,j--)
_____________________________________________________________________________________________________Mme A. BENOMAR
62
5- Les propriétés des méthodes
5 - 1 Signature d’une méthode
les méthodes sont les fonctions qu’on peut appliquer aux objets.
Elles permettent de changer l’état des objets ou de calculer des valeurs
Plusieurs méthodes d’une même classe peuvent avoir le même
nom, mais des paramètres différents ( surcharge) .
Le nom et le type des paramètres constituent la signature de la
méthode. Une méthode peut elle aussi posséder des modificateurs.
_____________________________________________________________________________________________________Mme A. BENOMAR
63
Modificateur
abstract
Définition
Prototype de méthode
final
Une méthode qui ne peut pas être redéfinie.
protected
Méthode ne peut être invoquée que par des sous classes.
private
une méthode privée ne peut être utilisée que dans les méthodes de la même classe
public
méthode visible par toutes les autres méthodes
static
Méthode de classe indépendant des objets
_____________________________________________________________________________________________________Mme A. BENOMAR
64
5 -2 Les méthodes statiques
Comme pour les attributs statiques , les méthodes statiques ont le modificateur static et sont indépendantes des instances
- Une méthode statique ne peut pas être redéfinie. Elle est automatiquement finale
Pour utiliser une méthode statique, on écrit :
NomClasse.nomMethodeStatique(arguments)
Cependant JAVA permet également d’utiliser :
nomObjet.nomMethodeStatique(arguments)
nomObjet étant une instanciation de la classe qui contient l’attribut ou la méthode statique
_____________________________________________________________________________________________________Mme A. BENOMAR
65
5-3 – La surcharge
Si plusieurs méthodes possèdent le même nom mais
différent par l’ensemble des types de leurs arguments, ou par
l’ordre des types de leurs arguments, on dit qu’il y a
surcharge. Lorsqu’une méthode surchargée est invoquée , la
bonne méthode est choisie pour qu’il y ait correspondance
sur les paramètres de l’appel et les arguments de la méthode
_____________________________________________________________________________________________________Mme A. BENOMAR
66
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
67
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
68
remarque :
si on ajoute l’instruction : (surcharge.operation (4 , 5)) ; il
y’aura erreur de compilation car ambiguité .Par contre s’il
n’y avait pas de surcharge (une seule méthode double
operation (double y , int p) ) cette même instruction ne
génerera pas d’erreur car transtypage automatique
_____________________________________________________________________________________________________Mme A. BENOMAR
69
6 – Les tableauxLes tableaux en java sont des structures pouvant contenir un nombre fixe d ’éléments de
même nature. Chaque élément est accessible grâce à un indice correspondant à sa position dans le tableau.
6-1 Déclaration d ’un tableau
Les tableaux doivent être déclarés comme tous les objets. Java dispose de deux syntaxes équivalentes pour la déclaration des tableaux,
type_elements[ ] tableau;ou
type_elements tableau[ ] ; Exemple : int [] tab1
int tab2[] 6-2 Création d’un tableau Comme tout objet java un tableau doit être crée après sa déclaration. Les tableaux java sont
de taille fixe.La création doit indiquer leur taille. La syntaxe à utiliser est la suivante :
x = new type[ dimension];dimension est le nombre d'éléments que le tableau pourra contenir.
69
_____________________________________________________________________________________________________Mme A. BENOMAR
70
Exemple : class TableauA{ public static void main(String[] arg){int[] tableau ; tableau = new int[2];tableau[0]=-5;tableau[1]= 8for(int i=0 ;i<2 ;i++) System.out.println(tableau[i]); }}Autre façon de définir un tableau : On peut définir un tableau avec un tableau littéral au moment de sa déclaration.
Exemple: boolean tableau[ ] = {true,false,true}; int t[ ]={0, 5, 9, -45}
_____________________________________________________________________________________________________Mme A. BENOMAR
71
6- 3 Longueur d’un tableau
On peut connaître 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 dépasser sa longueur (Tableau.length) sinon il y’aura une erreur à l’exécution.
Exemple : for (int i= 0 ; i <= Tableau.length; i++)générera une erreur
_____________________________________________________________________________________________________Mme A. BENOMAR
72
6- 4 Tableau d’objets
Avec java, on peut aussi manipuler des tableaux d’objets 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 l’attribut i System.out.println(‘’ La somme des entiers est ‘’+somme) ; }
}
_____________________________________________________________________________________________________Mme A. BENOMAR
73
6-5 Tableau multidimensionnel :
Les tableaux de java peuvent comporter plusieurs dimensions. Pour
déclarer un tableau multidimensionnel, on doit utiliser la syntaxe suivante :
type [ ] [ ] [ ] tableau
Exemple : int[ ] [ ] tableau; // 2 dimensionsLa création du tableau peut être effectuée à l'aide de -L'opérateur new : int [][] x = new int[2][4]; ou-de tableaux littéraux : int [ ][ ] tableau = {{1, 2, 3, 4},{5, 6, 7, 8}}; Pour accéder à tous les éléments du tableau, on utilise des boucles
imbriquées Exemple : int [ ][ ] x = new int[2][4]; for (int i = 0; i < x.length; i++) // x.length : longueur de la 1ère imension
for (int j = 0; j < x[i].length; j++) //x[i].length : longueur de la 2dimension
_____________________________________________________________________________________________________Mme A. BENOMAR
74
7- La saisie au clavier
-En java, le clavier est un fichier représenté par un
objet particulier de La classe java.io.BufferedReader qui
admet le constructeur :
BufferedReader (InputStreamReader objet)
Pour représenter le clavier, on doit instancier la classe
BufferedReader comme suit :
BufferedReader (new InputStreamReader(System.in))
La méthode readLine de BufferedReader permet de
lire une ligne
_____________________________________________________________________________________________________Mme A. BENOMAR
75
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
76
8- LES CHAINES DE CARACTERESEn Java, les chaînes de caractères sont des objets
de la classe java.lang.String ou java.lang.StringBuffer
8-1 Les chaînes de caractères 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 crée un objet de type String à la rencontre d’une série de caractères entre doubles apostrophes.
- Les chaînes de caractères (String) peuvent se
concaténer à l’aide de l’opérateur +.
_____________________________________________________________________________________________________Mme A. BENOMAR
77
8- LES CHAINES DE CARACTERES
- Les Constructeurs de java.lang.StringString() Construit la chaîne vide String(byte[] bytes) Construit une chaîne de caractères à partir
d’un tableau d’octets String(byte[] bytes, int offset, int length)
Construit une chaîne de caractères à partir d’une partie de tableau d’octets
String(byte[] bytes, int offset, int length, String enc)
Construit une chaîne de caractères à partir d’une partie de tableau d’octets, et d’un encodage
String(byte[] bytes, String enc)
Construit une chaîne de caractères à partir d’un tableau d’octets, et d’un encodage
String(char[] value) Construit une chaîne de caractères à partir d’un tableau de caractères
String(char[] value, int offset, int count)
Construit une chaîne de caractères à partir d’une partie de tableau de caractères
String(String value) Construit une chaîne à partir d’une autre chaîne.
String(StringBuffer buffer)
Construit une chaîne à partir d’une autre chaîne de typr StringBuffer.
_____________________________________________________________________________________________________Mme A. BENOMAR
78
int compareTo(Object o) Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0
int compareTo(String anotherString) Compare une chaîne de caractère à un autre objet. Renvoie une valeur <0 ==0 ou > 0. La comparaison est une comparaison lexicographique.
int compareToIgnoreCase(String str) Compare une chaîne de caractère à 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 chaîne a un objet et retourne true en cas d’égalité et false sinon
boolean equalsIgnoreCase(Object anObject)
Compare la chaîne a un objet et retourne true en cas d’égalité et false sinon ( on ignore la casse)
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
Teste l’égalité de deux parties de chaînes
boolean regionMatches(int toffset, String other, int ooffset, int len)
Teste l’égalité de deux parties de chaînes
- Les Comparaisons de chaînes de caractères
_____________________________________________________________________________________________________Mme A. BENOMAR
79
char charAt(int i) Retourne le caractère à l’indice spécifié en paramètre.
String substring(int d) Sous-chaîne depuis d jusqu’à la fin
String substring(int d, int f) Sous-chaîne depuis d jusqu’au caractère d’indice f non inclus.
boolean startsWith(String prefix) Renvoie true si prefix est un préfixe de la chaîne
boolean startsWith(String prefix, int i)
Renvoie true si prefix est un préfixe de la chaîne à partir de i.
boolean endsWith(String suffix)
Retourne true si suffix est un suffixe de la chaîne
- Les Caractères et sous-chaîne.
_____________________________________________________________________________________________________Mme A. BENOMAR
80
String toLowerCase() Retourne une chaîne égale à la chaîne convertie en minuscules.
String toLowerCase(Locale locale)
Retourne une chaîne égale à la chaîne convertie en minuscules.
String toString() Retourne une chaîne égale à la chaîne
String toUpperCase() Retourne une chaîne égale à la chaîne convertie en majuscules.
String toUpperCase(Locale locale)
Retourne une chaîne égale à la chaîne convertie en majuscules.
String trim() Retourne une chaîne égale à la chaîne sans les espaces de début et de fin.
String replace(char ac, char nc)
Retourne une chaîne ou tous les ac ont été remplacé par des nc. S’il n’y a pas de remplacement, la chaîne elle-même est retournée.
- Les Conversions
_____________________________________________________________________________________________________Mme A. BENOMAR
81
int indexOf(int ch) Retourne l’indice de la première occurrence du caractère
int indexOf(int ch, int fromIndex) Retourne l’indice de la première occurrence du caractère à partir de fromIndex
int indexOf(String str) Retourne l’indice de la première occurrence de la chaîne
int indexOf(String str, int fromIndex) Retourne l’indice de la première occurrence de la chaîne à partir de fromIndex
int lastIndexOf(int ch) Retourne l’indice de la dernière occurrence du caractère
int lastIndexOf(int ch, int fromIndex) Retourne l’indice de la dernière occurrence du caractère à partir de fromIndex
int lastIndexOf(String str) Retourne l’indice de la dernière occurrence de la chaîne
int lastIndexOf(String str, int fromIndex) Retourne l’indice de la dernière occurrence de la chaîne à partir de fromIndex
- La recherche dans une chaîne de caractère
_____________________________________________________________________________________________________Mme A. BENOMAR
82
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
83
8-2 Les chaînes de caractères de type StringBuffer
Pour une utilisation plus évoluée d’une chaîne de caractères on peut utiliser des objets de la classe java.lang.StringBuffer qui contient des méthodes qui ne sont pas définies dans la classe String (append,.setLength,…)
Les objets de cette classe contiennent des chaînes de caractères variables, ce qui permet de les agrandir ou de les réduire.
La classe StringBuffer dispose de nombreuses méthodes qui permettent de modifier le contenu de la chaîne de caractère
_____________________________________________________________________________________________________Mme A. BENOMAR
84
StringBuffer() Construit une chaîne vide de capacité initiale de 16 caractères.
StringBuffer (int l) Construit une chaîne vide de capacité initiale de l caractères.
StringBuffer (String s) Construit une chaîne de caractères à partir de la chaîne s
- Les Constructeurs de la classe StringBuffer
int capacity() la capacité de la chaîne de caractères : longueur maxint length() la longueur de la chaîne de caractèresvoid setLength (int n) la longueur de la chaîne est n ; les caractères éventuellement ajoutés ont une valeur indéterminée.
_____________________________________________________________________________________________________Mme A. BENOMAR
85
StringBuffer append(boolean b) Concatène la représentation en chaîne du booléen.
StringBuffer append(char c) Concatène la représentation en chaîne du caractère.
StringBuffer append(char[] str) Concatène la représentation en chaîne du tableau de caractères.
StringBuffer append(char[] str, int offset, int len)
Concatène la représentation en chaîne du tableau de caractères.
StringBuffer append(double d) Concatène la représentation en chaîne du double.
StringBuffer append(float f) Concatène la représentation en chaîne du float.
StringBuffer append(int i) Concatène la représentation en chaîne du int.
- Concaténation
_____________________________________________________________________________________________________Mme A. BENOMAR
86
- Caractère et sous-chaîne.
char charAt(int i) Retourne le caractère à l’indice spécifié en paramètre.
String substring(int i) Sous chaîne depuis i jusqu’à la fin
String substring(int i, int l)
Sous chaîne depuis i et de longueur l.
- Conversion
String toString() Retourne une chaîne égale à la chaîne
- Modifications
StringBuffer delete(int start, int end) Enlève tous les caractères compris entre start et end.
StringBuffer deleteCharAt(int index) Enlève le caractère à l’indice index
_____________________________________________________________________________________________________Mme A. BENOMAR
87
8-2 Les chaînes de caractères de type StringBufferExemple : 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
88
9 – OPERATIONS SUR LES OBJETS
9 – 1 L’affectation = ObjetA = ObjetB ObjetA désigne le même objet que ObjetB, c’est
la copie de référenceToute modification effectué sur l’objet référencée par objetA sera répercuté sur l’objet référencée 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 */}}
_____________________________________________________________________________________________________Mme A. BENOMAR
89
9 –2 Egalité entre objets
Si obj1 et obj2 sont deux références d’objets de la même classe.(obj1== obj2) est vraie si ces deux références obj1 et obj2 désignent
le même objetExemple : 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
90
9– 3 L’objet null
L’objet null n’appartient pas à une classe, mais il peut être utilisé en lieu et place d’un objet de toute classe,
public class Case{ int val ;
Case (int val ) // Constructeur de la classe Case{ this.val=val ; }boolean estEgal (Case c)/* Méthode estEgal avec un paramètre 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 exécution est interrompue
à la ligne c1.estEgal(c3) puisque c3 = null et on ne peut pas accéder à c3.val (dans la méthode estEgal ) */
_____________________________________________________________________________________________________Mme A. BENOMAR
91
Chapitre 3 HERITAGE ET INTERFACES EN JAVA
1 – GENERALITES SUR L’HERITAGE EN JAVA 2 – LA CLASSE java.lang.Object 3 – MASQUAGE DES ATTRIBUTS ET
REDEFINITION DES METHODES4 – CASTING OU TRANSTYPAGE
5 – LES INTERFACES
6 – LES CLASSES ABSTRAITES
_____________________________________________________________________________________________________Mme A. BENOMAR
92
Chapitre 3 HERITAGE ET INTERFACES EN JAVA 1 – GENERALITES SUR L’HERITAGE EN JAVA
1 – 1 Définition de l’héritage
L’héritage est l’un des aspects les plus utiles de la
programmation orientée objet. Il permet à une classe de
transmettre ses attributs et ses méthodes à des sous classes.
Ainsi, si une classe B hérite d’une classe A, alors la classe B
contient implicitement l’ensemble des attributs non privés de A et
peut invoquer toutes les méthodes non privées de la classe A.
_____________________________________________________________________________________________________Mme A. BENOMAR
93
1- 2 – Déclaration de l’héritage
En java, pour déclarer l’héritage, on utilise le mot clé extends
Syntaxe : class B extends A :
B hérite de A
B est dérivée de A
B est une sous classe de A
A est la super classe de B
_____________________________________________________________________________________________________Mme A. BENOMAR
94
1-3 – Propriétés de l’héritage
-En java, l’héritage est simple, toute classe ne peut hériter que
d’une et une seule classe. Si une classe n’hérite d’aucune autre
classe, elle hérite par défaut de la super classe Object définie dans
la package java.lang
-Une référence à une classe de base peut être affectée d’une
référence à une classe dérivée, l’inverse doit faire l’objet d’une
opération 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; // possibleb= a; // fauxb= (B) a; // peut être possible
_____________________________________________________________________________________________________Mme A. BENOMAR
95
1-3 – Propriétés de l’héritage -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(" Prénom de mon fils "+monFils.prenom); // sonPere.prenom="Driss"; Faux sonPere= monFils; // est possible car monFils est de même type que son père monFils=sonPere; est faux ( la réciproque) }}
_____________________________________________________________________________________________________Mme A. BENOMAR
96
1-3 – Propriétés de l’héritage -Si la déclaration d’une classe est précédée 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 d’enfants
- Si le constructeur par défaut d’une classe dérivée est défini mais ne commence pas par un appel de constructeur de la classe mère, Java insère un appel du constructeur par défaut de la classe mère.
_____________________________________________________________________________________________________Mme A. BENOMAR
97
1-4- Opérateurs : super et instanceof
- L’opérateur super : Pour faire référence à la classe parente (super
classe) , il suffit d’utiliser le mot clé super. Ce mot permet d’invoquer un attribut ou une méthode de la super classe
On utilise super(arguments) pour invoquer le constructeur de la super classe ayant les arguments correspondants
- L’opérateur instanceof : L’opérateur instanceof permet de savoir à quelle
classe appartient une instance :
_____________________________________________________________________________________________________Mme A. BENOMAR
98
1-4- Opérateurs : 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 même type) } }
_____________________________________________________________________________________________________Mme A. BENOMAR
99
1-5- Un exemple de l’héritage
Prenons la hiérarchie suivante :
Les classes Fonctionnaire, Profession_liberale, Eleve et Chomeur sont dérivés de la classe Personne
Personne
Fonctionnaires Profession_liberale
MedecinPublic EnseiganttAvocat Commerçant Primaire
Chomeur
….
Eleve
_____________________________________________________________________________________________________Mme A. BENOMAR
100
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
101
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
102
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
103
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
104
1-5- Exemple
for(int i=0;i<desPersonnes.length;i++) System.out.println(desPersonnes[i]); } }
- A l’exécution :Je suis F et je suis FonctionnaireJe suis M et je suis MedecinPublicJe suis E et je suis EleveJe suis C et je suis Chomeur
_____________________________________________________________________________________________________Mme A. BENOMAR
105
2- LA CLASSE java.lang.Object
La classe d’entête public class Object est la super classe de
toutes les classes Java : toutes ses méthodes sont donc héritées par
toutes les classes.
Voici quelques méthodes élémentaires de la classe Object
2.1. La méthode public final Class getClass()
La méthode getClass() renvoie un objet de la classe Class qui représente
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
106
2- LA CLASSE java.lang.Object
2-2 La méthode public String toString()
La méthode toString() permet d'obtenir la représentation d'un
objet quelconque par une chaîne de caractères. Ainsi lorsque une
référence r vers un objet de classe quelconque est dans une expression
en lieu et place d'une chaîne de caractères c'est en fait la chaîne
retournée par le message r.toString() qui est utilisée dans l'expression.
La méthode toString de la classe Object retourne une chaîne
correspondant au nom de la classe de l'objet suivi de @ suivi de
l'adresse mémoire de la structure de données définissant les
caractéristiques de l'objet (cette adresse est la valeur contenue dans la
variable référencant l'objet).
La méthode toString() est souvent redéfinie
_____________________________________________________________________________________________________Mme A. BENOMAR
107
2- LA CLASSE java.lang.Object Soit la classe Livre définie 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 redéfinissant pas la méthode toSTring // c'est celle héritée de la classe Object qui est invoquée. }}// A l'exécution, on aura : Livre@ba34f2
_____________________________________________________________________________________________________Mme A. BENOMAR
108
2- LA CLASSE java.lang.Object
Exemple 2 : Utilisation de la méthode toString() redéfinie
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
109
2- LA CLASSE java.lang.Object
Exemple 2 : Utilisation de la méthode toString() redéfinie
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 redéfinit la méthode toSTring
// c'est celle redéfinie qui est invoquée.
}
}
- A l'exécution, on aura :
Titre : Programmation en langage Java
Auteur : Mme A. BENOMAR
Prix : 50.0
_____________________________________________________________________________________________________Mme A. BENOMAR
110
2- LA CLASSE java.lang.Object
2-3. La méthode public boolean equals(Object obj)
La méthode equals() implémente une comparaison par défaut.
Sa définition dans Object compare les références : donc
obj1.equals(obj2) ne renverra true que si obj1 et obj2 désignent le
même objet. Dans une sous classe de Object, pour laquelle on a
besoin de pouvoir dire que deux objets distincts peuvent être égaux,
il faut redéfinir la méthode equals héritée de Object.
- Dans la classe Object cette méthode est définie comme suit :
public boolean equals(Object obj)
{ return (this == obj); }
_____________________________________________________________________________________________________Mme A. BENOMAR
111
2- LA CLASSE java.lang.Object
2-3. La méthode public boolean equals(Object obj)
Exemple 1 : Utilisation de la méthode equals héritée
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
112
2- LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj) Exemple 1 : Utilisation de la méthode equals héritée
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 référencés par l1 et l2 sont "); if (l1.equals(l2)) /* ici équivalent à l1 == l2 puisque la méthode equals n'est pas redéfinie. On compare le contenu des deux références l1 et l2 (c'est à dire les adresses mémoire des deux Livres */ System.out.println("identiques"); else System.out.println("différents"); }
}- A l’exécution : les livres référencés par l1 et l2 sont différentsRemarque : Pour avoir un comportement plus conforme à ce que l'on attend pour la méthode equals il faudrait redéfinir celle-ci
_____________________________________________________________________________________________________Mme A. BENOMAR
113
2- LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)
Exemple 2 : Utilisation de la méthode equals redéfinie
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
114
2- LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)
Exemple 2 : Utilisation de la méthode equals redéfinie
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 référencés 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("différents");
}
- A l’exécution : les livres référencés par l1 et l2 sont identiques
_____________________________________________________________________________________________________Mme A. BENOMAR
115
2- LA CLASSE java.lang.Object
2-4. La méthode protected void finalize()
A l'inverse de nombreux langages orientés objet tel que le C++ ou Delphi, le programmeur Java n'a pas à se préoccuper de la destruction des objets qu'il instancie. Ceux-ci sont détruits et leur emplacement mémoire est récupéré par le ramasse miette de la machine virtuelle dès qu'il n'y a plus de référence sur l'objet.
La machine virtuelle garantit que toutes les ressources Java sont correctement libérées mais, quand un objet encapsule une ressource indépendante de Java (comme un fichier par exemple), il peut être préférable de s'assurer que la ressource sera libérée quand l'objet sera détruit. Pour cela, la classe Object définit la méthode protected finalize, qui est appelée quand le ramasse miettes doit récupérer l'emplacement de l'objet ou quand la machine virtuelle termine son exécution
_____________________________________________________________________________________________________Mme A. BENOMAR
116
3- Masquage des attributs et redéfinition des méthodes
- On dit qu’un attribut d’une classe masque un attribut
d’une super classe s’il a le même nom qu’un attribut de la super
classe
- On dit qu’une classe redéfinit une méthode d’une super
classe si elle définie une méthode ayant même nom, même suite
de types d’arguments et même valeur de retour qu’une méthode
de la super classe
Il y’a une différence dans la façon dont le masquage d’attributs et
la redéfinition des méthodes sont traitées en java
_____________________________________________________________________________________________________Mme A. BENOMAR
117
3- Masquage des attributs et redéfinition des méthodes
Supposons qu’une classe A possède un attribut attr et une méthode
meth et qu’une classe B étendant A définisse un attribut de même nom attr et
redéfinisse la méthode meth.
Considérons alors les déclarations suivantes :
A a // déclaration d’ un objet a de la classe A
B b = new B() ; // declaration et creation d’un objet b de la classe B
a = b ; // Tout objet de B est objet de A
Alors :
b.attr est l’attribut attr de la classe B
a.attr est l’attribut attr de la classe A
Par contre :
b.meth est la méthode redéfinie dans B
a.meth est la méthode redéfinie dans B
_____________________________________________________________________________________________________Mme A. BENOMAR
118
class A { int attr=10; void meth() { System.out.println("Je suis la méthode de A"); } } class B extends A { int attr=20; void meth() { System.out.println("Je suis la méthode de B"); } } public class Masque { public static void main(String[] argv) { A a ; B b = new B(); a=b;// car b est aussi un objet de la classe A (héritage) System.out.println("b.attr= "+b.attr); System.out.println("a.attr= "+a.attr); b.meth(); a.meth(); } }
_____________________________________________________________________________________________________Mme A. BENOMAR
119
A l'exécution , on aura : b.attr= 20 a.attr= 10 Je suis la méthode de B Je suis la méthode de B */
_____________________________________________________________________________________________________Mme A. BENOMAR
120
4- casting ou transtypage
Le casting (mot anglais qui signifie moulage ), également appelé transtypage, consiste à effectuer une conversion d’un type vers un autre type. Le casting peut être effectué dans deux conditions différentes :
· Vers un type plus général. 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 précision est supérieure. 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 précision inférieure, par exemple de double en float, de long en int ou de short en byte.
_____________________________________________________________________________________________________Mme A. BENOMAR
121
4- casting ou transtypage
A l'inverse du sur-casting, le sous-casting présente un risque
de perte d'informations. C'est pourquoi Java est autorisé à effectuer
de façon 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
précéder la valeur par l'indication du nouveau type entre parenthèses
_____________________________________________________________________________________________________Mme A. BENOMAR
122
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 considérée double d1=f1; // pas de problème sur casting implicite : float en double //Java est autorisé à effectuer de façon 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.5f2 est égal à :12.5
_____________________________________________________________________________________________________Mme A. BENOMAR
123
Casting des objets
Il est possible d’utiliser le casting d’objets. Cela nécessite une conversion de classe.
Exemple :
class Animal{ }
class Chien extends Animal{ int taille = 80; }
class Conversion{ public static void main (String[] argv) { Chien chien; // déclaration d’un objet de type Chien Animal animal = new Chien (); chien = (Chien)animal; System.out.println(" Ce chien mesure : "+ chien.taille +" cm");
_____________________________________________________________________________________________________Mme A. BENOMAR
124
Casting des objets
animal = new Animal(); // création d’un objet de type Animal
// chien = (Chien)animal; //erreur d’execution
System.out.println(" Tout animal ne peut pas être converti en chien");
}
}
A l’exécution :
Ce chien mesure : 80 cm
Tout animal ne peut pas être converti en chien
_____________________________________________________________________________________________________Mme A. BENOMAR
125
5 - LES INTERFACES 5-1 – Définition d’une interface
Une interface est un type purement abstrait au sens où il ne définit aucune implémentation et ne comporte pas de constructeur : une interface déclare uniquement des méthodes publiques
Une interface ne contient que des prototypes de méthodes et des constantes ayant les modificateurs static et final
Une interface sert à regrouper des constantes et à traiter des objets qui ne sont pas tous nécessairement de la même classe mais qui ont en commun une partie . Cette partie sera gérée par l’interface
Les interfaces portent souvent des noms se terminant en able. Par exemple (Comparable ,Runnable, …)
_____________________________________________________________________________________________________Mme A. BENOMAR
126
5-2- Présentation d’une interface
Une interface se compose de deux parties : - l’en-tête- le corps
Entête d’une interface [modificateur] interface <Nom> [extends interface>]
[ ] : optionnel
< > : obligatoire
gras : mot clé
_____________________________________________________________________________________________________Mme A. BENOMAR
127
Remarques : - Une interface peut avoir le modificateur public . - Une interface est toujours abstract sans qu’il soit nécessaire de l’indiquer - Elle peut être attribuée à un package . Si elle ne l’est pas, elle fera partie du package par défaut - Une interface peut dériver de plusieurs autres interfaces ( héritage multiple pour les interfaces et non pas pour les classes) interface I1 { } abstract interface I2 //abstract n’est âs nécessaire {}
public interface I3 extends I1,I2 //héritage multiple {}
_____________________________________________________________________________________________________Mme A. BENOMAR
128
Corps d’une interface
Le corps d’une interface contient une liste de constantes et de
prototypes de méthodes.
La syntaxe d’une déclaration d’une interface est la suivante :
entête
{
déclarations des constantes et des prototypes de méthodes
}
Exemple : interface Ecriture
{ static final int LIGNE_MAX = 50 ;
void ecrire() ;
}
_____________________________________________________________________________________________________Mme A. BENOMAR
129
5- 3 Utilisation d’une interface
- Pour utiliser une interface , on doit utiliser le mot clé implements
suivi de la liste des interfaces dont la classe dérive ,séparées par
des virgules. exemple : class A implemets I1, I2
- Une interface I peut être implémentée par une classe A signifie :
* La classe A déclare implémenter l’interface I
* Toutes les méthodes figurant dans l’interface I doivent être
définie par la classe A
* Une classe qui implémente une interface devra déclarer publiques
toute les méthodes définies de l’interface
- Si une classe A implémente une interface I, les sous classes de A
implémentent aussi automatiquement I
_____________________________________________________________________________________________________Mme A. BENOMAR
130
Utilisation d’une interface
Une interface peut être utilisée comme une classe.
Si I est une interface, on pourra référencer par objI de
type I n’importe quel objet d’une classe implémentant
l’interface I et on pourra appliquer à cet objet une
méthode déclarée dans l’interface ( qui est
nécessairement redéfinie dans la classe de l’objet
référencée par i)
_____________________________________________________________________________________________________Mme A. BENOMAR
131
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
132
5- 4 Exemple d’utilisation d’une interfaceinterface 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
133
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
134
6 – DEFINITION D’UNE CLASSE ABSTRAITE
- Une classe abstraite est une classe qui contient au
moins une méthode abstraite, elle doit être déclarée avec le
modificateur abstract
- Dans une classe, une méthode est dite abstraite si
seul son prototype figure. Elle n’a pas de définition explicite
- Une classe abstraite ne peut pas être instanciée , il
faut l’étendre pour pouvoir l’utiliser
_____________________________________________________________________________________________________Mme A. BENOMAR
135
EXEMPLE : UNE CLASSE ABSTRAITE POUR MODELISER DES FORMES GEOMETRIQUES
La classe Forme modélise des formes géométriques planes. Elle contient deux
méthodes abstraites (perimetre et surface) et deux méthodes 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
136
La classe Disque étend la classe Forme et définit les deux méthodes abstraites
de celle ci . Elle définit aussi la méthode 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() // redéfinition de la méthode toString {return ("Le disque de rayon "+ rayon); }} //fin de la classe
_____________________________________________________________________________________________________Mme A. BENOMAR
137
La classe Rectangle étend la classe Forme et définit les deux méthodes
abstraites de celle ci . Elle définit aussi la méthode 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
138
La class EssaiForme montre qu’on peut référencer avec une variable de type Forme un objet Disque ou bien un objet Rectangle puisque ces deux dernières classes héritent 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
139
Chapitre 4 LES COLLECTIONS DE DONNEES
INTRODUCTION
1- GENERALITES SUR LES COLLECTIONS EN JAVA
2- L’INTERFACE java.util.Collection
3- LES LISTES
4- LES ENSEMBLES
5- LES MAP
6- LES CLASSES UTILITAIRES
_____________________________________________________________________________________________________Mme A. BENOMAR
140
Chapitre 4 LES COLLECTIONS DE DONNEES
IntroductionLes collections permettent de stocker un nombre variable d'éléments de
types identiques ou différents. Les collections se démarquent 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'éléments. Cela permet d'éviter de consommer des ressources
mémoires inutilement en initialisant un tableau à une taille prédéfinie en
sachant que celui-ci risque de ne pas être totalement rempli lors des
différentes étapes d'exécution d'un programme. Dans ce cas, une
collection possèdera la faculté d'adapter sa taille à tous changements.
Le principe de collections de données repose sur un ensemble d’outils
permettant de regrouper sous forme d'un objet unique différents
éléments (par exemple un ensemble de données constituant un répertoire
d’abonnés au téléphone).
_____________________________________________________________________________________________________Mme A. BENOMAR
141
Chapitre 4 LES COLLECTIONS DE DONNEES
IntroductionLes collections permettent de stocker un nombre variable d'éléments de
types identiques ou différents. Les collections se démarquent 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'éléments. Cela permet d'éviter de consommer des ressources
mémoires inutilement en initialisant un tableau à une taille prédéfinie en
sachant que celui-ci risque de ne pas être totalement rempli lors des
différentes étapes d'exécution d'un programme. Dans ce cas, une
collection possèdera la faculté d'adapter sa taille à tous changements.
Le principe de collections de données repose sur un ensemble d’outils
permettant de regrouper sous forme d'un objet unique différents
éléments (par exemple un ensemble de données constituant un répertoire
d’abonnés au téléphone).
_____________________________________________________________________________________________________Mme A. BENOMAR
142
1- GENERALITES SUR LES COLLECTIONS JAVA1-1 Définition d’une collectionUne collection représente un groupe d'objets, connu par ses
éléments et utilisé pour stocker, rechercher et manipuler ces éléments
Les collections peuvent permettre des éléments en double (ou
doublons) à l'image des listes, ou parfois les interdisent telles que les
ensembles.
Le langage Java dispose de plusieurs outils destinés à gérer des
collections d’une façon unifiée qui met en oeuvre :
- des interfaces qui permettent la manipulation des collections
indépendamment de leurs représentations (l’interface Collection,
l’interface List, …)
- des classes qui implémentent les interfaces précédentes (la
classe Vector, ArrayList,…)
- des méthodes qui réalisent des opérations utiles (add(…),
contains(…),..)
_____________________________________________________________________________________________________Mme A. BENOMAR
143
1- GENERALITES SUR LES COLLECTIONS JAVA1-2 Organisation des collectionsL’ensemble de ces outils java (interfaces, classes,
méthodes) qui permettent la mise en œuvre des collections est organisé dans le package java.util selon deux hiérarchies :
L’interface java.util.Collection et l’interface java.util.Map
_____________________________________________________________________________________________________Mme A. BENOMAR
144
1- GENERALITES SUR LES COLLECTIONS JAVA
1 - 3 Le type Collection
*L’interface Collection représente les collections où tous les
éléments sont des structures capables de contenir des objets de
différents types accessibles séquentiellement Elle possède 3 sous
interfaces List, Set et SortedSet
* L’interface List représente une collection d’éléments dans
laquelle chaque élément peut être inséré (en début, fin ou à une
certaine position). Les éléments peuvent être dupliqués.
* L’interface Set représente une collection d’éléments dans
laquelle les éléments ne peuvent pas, être dupliqués . L’interface Set
met en oeuvre le concept d'ensemble.
* L’interface SortedSet représente un ensemble trié
_____________________________________________________________________________________________________Mme A. BENOMAR
145
1- GENERALITES SUR LES COLLECTIONS JAVA
1 - 4 Le type Map
*L’interface Map permet de gérer des tableaux associatifs
qui permettent de lier un objet clé à un autre objet valeur.
L’interface Map représente une collection de couples (clé,
valeur); un Map ne peut contenir de doublon; à une clé
correspond une et une seule valeur; on accède aux valeurs
par leur clé.
* L’interface SortedMap représente un ensemble trié de
couples (clé,valeur).
_____________________________________________________________________________________________________Mme A. BENOMAR
146
2- L'INTERFACE java.util.Collection
1 - 2 Architecture et organisation de l’interface Collection
L’interface Collection est utilisée pour transmettre des collections et les manipuler avec le maximum de généralités. Des sous-interfaces particulières sont fournies par ailleurs (Set, SortedSet ou List).
voici un aperçu de la hiérarchie L’interface java.util.Collection:
_____________________________________________________________________________________________________Mme A. BENOMAR
147
2- L'INTERFACE java.util.Collection
2-2 Les méthodes de l'interface CollectionMéthode Description
boolean add(Object o) Ajoute l’élément donné
boolean addAll(Collection c) Ajoute tous les éléments de la collection donnée
void clear() Supprime tous les éléments de cette collection
boolean contains(Object o) Retourne true si cette collection contient l’élément donné
boolean containsAll(Collection c) Retourne true si cette collection contient tous les éléments de la collection
boolean equals(Object o) Vérifie l’égalité entre l’objet 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 élément
Iterator iterator() Retourne un itérateur sur les éléments de cette collection
boolean remove(Object o) Supprime l’objet o de la collection
boolean removeAll(Collection c) Supprime tous les éléments de la collection
boolean retainAll(Collection c) Ne conserve que les éléments contenus dans la collection c
int size() Retourne le nombre d’éléments de la collection
Object[] toArray() Retourne un tableau contenant tous les éléments de cette collection
Object[] toArray(Object[] t) Retourne un tableau contenant tous les éléments de cette collection dont le type correspond à celui du tableau donné
_____________________________________________________________________________________________________Mme A. BENOMAR
148
2-3 Les classes implémentant l'interface Collection
Les implémentations de l'interface Collection sont
AbstractCollection, AbstractList, AbstractSet, ArrayList,
HashSet, LinkedHashSet, LinkedList, TreeSet et Vector.
Toute classe implémentant l’une de ces interfaces
Collection devrait contenir un constructeur sans paramètre
créant une collection vide et un constructeur avec un
argument construisant une collection contenant les mêmes
éléments que son argument.
_____________________________________________________________________________________________________Mme A. BENOMAR
149
3- LES LISTES
Une liste en java contient une séquence ordonnée d'éléments avec possibilité de doublons. Une liste en java est représentée par l’interface List.
Les éléments d’une liste sont accessibles soient par :- leur position ou indice (comme un tableau)- un itérateur
3 – 1 L’interface java.util.List
L’interface java.util.List est définie sous la forme : public interface List extends Collection
L'interface List étend l’interface Collection et ajoute les possibilités suivantes :
- Accès aux éléments par leur position; - Recherche de la position d'éléments;
L'interface List est implémentée par les classes AbstractList, ArrayList, LinkedList, et Vector.
_____________________________________________________________________________________________________Mme A. BENOMAR
150
3-2 Méthodes ajoutées dans l'interface ListMéthode Description
void add(int index, Object element) insère un objet à l'index spécifié, au sein de la liste courante.
boolean addAll(int index, Collection c)insère tous les éléments de la collection spécifiée, à l'index donné au sein de la liste.
Object get(int index) retourne l'élément à la position spécifiée dans la liste.
int hashCode() retourne le code de hachage de la liste.
int indexOf(Object o)retourne la position de la première occurrence de l'objet au sein de la liste courante, ou -1 s'il n'a pu être trouvé.
int lastIndexOf(Object o)retourne la position de la dernière occurrence de l'objet spécifié au sein de la liste, ou -1 s'il n'a pu être trouvé.
ListIterator listIterator(int index)retourne un itérateur de liste sur les éléments de l'objet List à partir de la position spécifiée.
Object remove(int index. supprime l'élément positionné à l'index spécifié au sein de la liste.
Object set(int index, Object elementremplace l'élément à la position spécifiée dans la liste, par l'objet passé en argument.
List subList(int fromIndex, int toIndex.retourne une partie de la liste, délimitée par les index fromIndex inclus et toIndex exclus.
Object remove(int index). supprime l'élément positionné à l'index spécifié au sein de la liste.
Object set(int index, Object element)remplace l'élément à la position spécifiée dans la liste, par l'objet passé en argument.
List subList(int fromIndex, int toInindex. retourne une partie de la liste, délimitée par les index fromIndex inclus et toIndex exclus.
_____________________________________________________________________________________________________Mme A. BENOMAR
151
3-3 La classe java.util.Vector
Son entête : public class Vector extends AbstractList implements
ListLa classe Vector permet de créer une collection
d'objets qui fonctionne de la même manière qu'un tableau, à l'exception que sa capacité peut varier en fonction des besoins.
Une allocation de mémoire dynamique est utilisée par les objets Vector, si bien qu'il est possible d'ajouter, de supprimer aisément leurs éléments, soit de faire varier leur taille dynamiquement.
De cette manière, 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'intermédiaire de leur classe s (double -> Double, char -> Character, etc.). .
_____________________________________________________________________________________________________Mme A. BENOMAR
152
3-3-1 Les attributs ( les champs) de la classe Vector-
-protected Object[]elementData un tableau de données interne du
vecteur
-protected int elementCount : le nombre d'éléments effectif contenu
dans le vecteur
-protected int capacityIncrement : le pas d’incrémentation lorsque la
capacité d’un vecteur est dépassé. 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’, c’est à dire que seuls les
classes du même package que la classe Vector y ont accès
_____________________________________________________________________________________________________Mme A. BENOMAR
153
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 créer
un vecteur initialement vide auquel il sera possible d'ajouter des
éléments via une méthode spécifique. La capacité par défaut de ce
vecteur est 10 et le pas d’incrémentation contenu dans le champ
capacityIncrement est 0
_____________________________________________________________________________________________________Mme A. BENOMAR
154
Exemple import java.util.*; class Vecteur1 { public static void main(String args[]) { Vector v = new Vector(); System.out.println ("Nombre d'éléments : " + v.size()); //0 System.out.println ("Capacité du vecteur "+ .capacity()); //10 v.add(new Integer(1));// un entier v.add("Mon premier vecteur");// une chaîne v.add(new Double(0.5)); System.out.println ("Nombre d'éléments : " + 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'éléments : " + v.size());//13 System.out.println ("Capacité du vecteur "+ .capacity());}//20 }
_____________________________________________________________________________________________________Mme A. BENOMAR
155
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 éléments est null.
Exemple : On reprend le même exemple que pour la classe Vecteur1 et on crée le vecteur v comme suit : Vector v = new Vector(5);
/*Nombre d'éléments : 0Taille du vecteur : 5Nombre d'éléments : 3Capacité du vecteur : 5Element 0 : 1Element 1 : Mon premier vecteurElement 2 : 0.5Nombre d'éléments : 13Capacité du vecteur : 20 */
_____________________________________________________________________________________________________Mme A. BENOMAR
156
3* public Vector(int initialCapacity,int capacityIncrement) : Ce troisième constructeur permet d'initialiser le vecteur à une certaine capacité tout en veillant également à définir un pas d'incrémentation de sa capacité suite à un dépassement, palliant ainsi à la contrainte du constructeur précédent.
Exemple : On reprend le même exemple que pour la classe Vecteur1 et on crée le vecteur v comme suit : Vector v = new Vector(5,1);
/* A l’exécution, on aura :Nombre d'éléments : 0Capacité du vecteur : 5Nombre d'éléments : 3Capacité du vecteur : 5Element 0 : 1Element 1 : Mon premier vecteurElement 2 : 0.5Nombre d'éléments : 13Capacité du vecteur : 13*/
_____________________________________________________________________________________________________Mme A. BENOMAR
157
4* public Vector(Collection c)Ce quatrième constructeur permet de construire un
vecteur à partir d'une collection passée en argument. Cette collection doit implémenter l'interface Collection, à l'image de ArrayList, HashSet, LinkedHashSet, LinkedList, TreeSet et même Vector.
_____________________________________________________________________________________________________Mme A. BENOMAR
158
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
159
3-3-3 Quelques méthodes de la classe Vector
Méthodes de gestion de taille d’un vecteur
- La méthode public int capacity() : Cette méthode permet récupérer la capacité du vecteur. La capacité correspond à la longueur du tableau de données interne conservé dans le champ elementData d'un vecteur, par contre la méthode public int size() retourne la taille du vecteur qui correspond au nombre d'éléments effectif contenu dans le champ elementCount du vecteur.
- La méthode public void setSize(int taille) détermine une nouvelle taille pour le vecteur,
_____________________________________________________________________________________________________Mme A. BENOMAR
160
- La méthode public void ensureCapacity(int capacite) augmente la capacité du vecteur si nécessaire
La méthode public void trimToSize() adapte la capacité à la taille courante du vecteur.
- Les méthodes d’ajout d’éléments dans un vecteurL'ajout d'objets dans un vecteur s'accompli par l'intermédiaire de plusieurs
méthodes dont la plupart sont préfixées par add.La méthode void add(int index, Object element) insère un élément à la
position spécifiée. La méthode boolean add(Object obj) ajoute un élément à la fin du vecteur. La méthode boolean addAll(Collection col) ajoute une collection d'éléments
à la fin du vecteur. La méthode boolean addAll(int index, Collection col) ajoute une collection
d'éléments à l'index spécifié dans le vecteur. La méthode void addElement(Object obj) ajoute un objet à la fin du vecteur.
La méthode void insertElementAt(Object obj, int index) insère un objet à l'index spécifié du vecteur.
_____________________________________________________________________________________________________Mme A. BENOMAR
161
- Les méthodes de suppression d’éléments dans un vecteurLa suppression est prise en charge par plusieurs méthodes de la classe Vector commençant en général par remove. La suppression d'un ou plusieurs éléments entraîne une réorganisation du vecteur, c'est-à-dire que l'emplacement d'un élément effacé et immédiatement remplacé par l'élément suivant et cela en cascade jusqu'au dernier élément du vecteur.la méthode Object remove(int index) supprime l'objet à l'index spécifié et le retourne. La méthode boolean remove(Object obj) supprime la première occurrence de l'objet trouvée dans le vecteur. La méthode boolean removeAll(Collection col) supprime tous les éléments de la collection qui sont contenus dans le vecteur. La méthode void removeAllElements() supprime tous les éléments et remet à zéro la taille du vecteur. La méthode boolean removeElement(Object obj) supprime la première occurrence de l'élément du vecteur. La méthode void removeElementAt(int index) efface l'élément à l'index spécifié. La méthode protected void removeRange(int debut, int fin) supprime les éléments situés dans un intervalle spécifié par les arguments. La méthode void clear() supprime tous les éléments dans le vecteur. La méthode boolean retainAll(Collection col) retient les éléments de la collection et supprime tous les autres du vecteur.
_____________________________________________________________________________________________________Mme A. BENOMAR
162
Exemple : ajout et suppression d’éléments dans un vecteurimport 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
163
- Les méthodes de consultation des éléments La consultation des éléments présents dans une collection Vector s'effectue par l'intermédiaire de diverses méthodes permettant de récupérer un élément précis ou plusieurs.- La méthode Object elementAt(int index) retourne l'élément trouvé à l'index spécifié.- La méthode Enumeration elements() retourne la liste de tous les éléments du vecteur dans un objet Enumeration.- Les méthodes Object firstElement() et Object lastElement() retournent respectivement le premier et le dernier élément du vecteur.- Les méthodes Object[] toArray() et Object[] toArray(Object[] obj) retournent un tableau d'objets contenant les éléments du vecteur. La seconde méthode remplit le tableau passé en argument et retourne également un tableau de même contenu que le premier. Ainsi dans ce cas, il est inutile d'utiliser la valeur de retour de cette méthode.
_____________________________________________________________________________________________________Mme A. BENOMAR
164
Exempleimport 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
165
A l’exécution lundimardimercredijeudivendredinullnullnullnullnulllundimardimercredijeudivendredinullnullnullnullNullRemarque : tabchar et tabchar2 ont la même taille (10) et contiennent les mêmes éléments
_____________________________________________________________________________________________________Mme A. BENOMAR
166
3- 4 La classe java.util.ArrayListUn 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 définit le nombre
d'éléments qu'on peut y stocker. Au fur et à mesure qu'on ajoute des éléments et qu'on " dépasse " la capacité, la taille augmente en conséquence.
La classe ArrayList est très similaire à la classe Vector.car elle utilise un tableau en interne pour ranger les données et fournit un accès aux éléments par leur indice
Le principal intérêt d'une ArrayList est de pouvoir facilement ajouter un élément à la liste. En effet, le tableau utilisé en interne est surdimensionné par rapport au besoin.
Ainsi une ArrayList initialisé à une taille de 5 éléments pourra en contenir beaucoup plus (jusqu’à 20 millions d’entrées).
Lorsque que l'on ajoutera un nouvel élément, il sera placé dans la 1ère case libre du tableau interne ; on ne sera pas amené à instancier un nouveau tableau. Evidement, à force d'ajouter des éléments, le tableau interne peut se trouver saturé, dans ce cas un nouveau tableau est créé automatiquement et les anciennes valeurs y sont recopiées. Toutes ces opérations sont transparentes.
_____________________________________________________________________________________________________Mme A. BENOMAR
167
3.4.1.Les constructeurs de ArrayListIl existe 3 types de constructeurs pour la classe ArrayList :ArrayList maAList = ArrayList(); // On construit un tableau vide d’une
taille par défaut de 10.ArrayList maAList = ArrayList(int initialCapacity); // On initialise la taille
du tableau à initialCapacityArrayList maAList = ArrayList(Collection c); // On construit un tableau à partir d’une Collection passée en argument.
3-4 -2 Les opérations 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 spécifié. Renvoie une exception
si vous dépassez le tableau (IndexOutOfBoundsException) size() : renvoie la taille du ArrayList
_____________________________________________________________________________________________________Mme A. BENOMAR
168
// Les méthodes 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
169
Exemple d’utilisation d’un ArrayList :List maListe = ArrayList(12);for( i = 0; i < 12; i++){ maListe.add("élément" + i); } Iterator it = maListe.iterator();(it.hasNext()) { System.out.println(it.next().toString()); }
Affichage : élément0 Élément1 élément2 élément3 élément4 Élément5 élément6 élément7 élément8 élément9élément10 élément11
_____________________________________________________________________________________________________Mme A. BENOMAR
170
4 – LES ENSEMBLES
4-1 L’interface java.util.Set
Les objets de java.util.Set sont des ensembles d'éléments
uniques. En effet, contrairement à l’interface List, un objet Set ne
contient pas de doublons ; si un nouvel objet inséré existe déjà, il ne
sera pas ajouté à la collection.
La classe HashSet, qui implémente l’interface Set est la plus
utilisée. Ce type de collection garantit des performances constantes
selon ce que l’on ajoute, efface ou recherche.
_____________________________________________________________________________________________________Mme A. BENOMAR
171
Quelques méthodes de l’interface 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 implémentations de Set sont : HashSet, TreeSet,SortedSet
_____________________________________________________________________________________________________Mme A. BENOMAR
172
4-2 La classe .HashSet
Les collections HashSet organisent des éléments uniques dont
l’ordre d’itération est aléatoire.
Aussi, la classe HashSet n’accepte qu’un seul élément null.
Disposant d’une fonction de hachage, les objets HashSet ne
garantissent pas l'ordre des éléments durant une itération de
l'ensemble, contrairement aux collections TreeSet.
En effet, la fonction de hachage disperse les éléments au sein
de la collection Set.
Cette classe garantit des performances constantes en ce qui
concerne les opérations de base, telles que l'ajout (add(Object
element)), la suppression (remove(Object element)), la vérification de
présence (contains(Object element)) et l'obtention de la taille(size()).
_____________________________________________________________________________________________________Mme A. BENOMAR
173
.Les constructeurs de la HashSet HashSet ensemble = HashSet();
Ce constructeur par défaut initialise l'instance avec des valeurs par défaut, soit une capacité initiale et un facteur de charge par défaut égaux respectivement à 16 et à 0.75.
HashSet ensemble = HashSet(capacite); // initialise l’instance avec une capacité initiale de valeur capacite
HashSet ensemble = HashSet(float factch); // initialise l’instance 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 d’une collection Ce dernier constructeur accepte comme argument une collection destinée
à initialiser la nouvelle instance. Chaque élément de la collection spécifiée sera copié au sein de l'objet HashSet créé.
_____________________________________________________________________________________________________Mme A. BENOMAR
174
Les méthodes principalement utilisées sont les méthodes :d’ajout : add(Object elt) et addAll(Collection c).
de suppression : remove(Object elt), removeAll(Collection c), retainsAll(Collection c) et clear().
de vérification de présence : isEmpty(), contains(Object elt) et containsAll(Collection c).
Les méthodes toArray() et toArray(Object[] element) héritées de l'interface Set permettent de renvoyer l'ensemble des éléments contenus dans la collection Set, dans un tableau.
La méthode iterator() retourne un Iterator sur les éléments de l'ensemble. Cet objet Iterator fournira d’ailleurs 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
175
4-3 La classe.TreeSetLa classe TreeSet organise un ensemble d’éléments uniques
triés selon un ordre croissant (ordre naturel des éléments ou ordre
précisé par l’utilisateur grâce à un Comparateur).
Les objets TreeSet assurent aussi de très bonnes
performances pour des opérations de base, telles que les ajouts, les
suppressions ou vérifications de présence.
4-3-1 Les constructeurs de la TreeSet
TreeSet ensemble = TreeSet();//constructeur par défaut
Le constructeur par défaut initialise l'objet en fondant son mode
de tri sur l'ordre naturel des éléments.
_____________________________________________________________________________________________________Mme A. BENOMAR
176
TreeSet ensemble = TreeSet(Collection maCollection);
Ce constructeur accepte comme argument un objet Collection.
Chaque élément de la collection spécifiée sera copié dans l’objet TreeSet
instancié. La collection sera par ailleurs triée selon l’ordre naturel de ses
éléments (ordre alphabétique, numérique…).
TreeSet ensemble = TreeSet(SortedSet collection);
Ce constructeur accepte comme argument un objet SortedSet.
Chaque élément de la collection spécifiée sera copié dans l’objet TreeSet
instancié. La collection sera par ailleurs triée selon l’ordonnancement de
l’objet SortedSet fourni.
TreeSet ensemble = TreeSet(Comparator comparateur);
Pour ce dernier constructeur, on spécifie un comparateur pour
effectuer le tri des éléments comparables de l'objet TreeSet.
_____________________________________________________________________________________________________Mme A. BENOMAR
177
4-3-2 Les méthodes de la classe TreeSetUn objet TreeSet, défini sans comparateur, utilise les méthodes
compareTo() et equals() des objets contenus dans cet ensemble.Le comparateur de la collection TreeSet est accessible via la méthode comparator() : Comparator comparateur = ensemble.comparator();
Les méthodes principalement utilisées sont les méthodes :d’ajout (add(Object elt) et addAll(Collection c))de suppression (remove(Object elt, removeAll(Collection c), retainsAll(Collection c) et clear()) de vérification de présence (isEmpty(), contains(Object elt) et containsAll(Collection c)).L’Iterator 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
178
La classe TreeSet implémente deux méthodes first() et last(), chargées respectivement de récupérer dans un ensemble le premier élément (c’est à dire le plus petit) et le dernier élément (le plus grand).La comparaison entre les éléments est assurée par l'ordre naturel ou par le comparateur spécifié. Object premier = ensemble.fisrt(); Object dernier = ensemble.last(); Les méthodes toArray() et toArray(Object o) héritées de l'interface Set permettent de renvoyer l'ensemble des éléments contenus dans la collection Set, dans un tableau.La méthode SortedSet headSet(Object toKey) retourne seulement les éléments de l'objet TreeSet, qui sont strictement inférieurs à l'objet passé en argument. Ce dernier est exclu de l'objet SortedSet retourné.La méthode tailSet(Object fromKey) retourne seulement les entrées de l'objet TreeMap, dont les clés sont strictement supérieures ou égales à l'objet passé en argument. La méthode subSet(Object fromKey, Object toKey) extrait un intervalle d'entrées, dont les clés sont comprises entre la valeur du premier argument incluse et la valeur du second argument exclu.La méthode values() retourne toutes les valeurs dans une collection. SortedSet partie = ensemble.headSet(valeur);
_____________________________________________________________________________________________________Mme A. BENOMAR
179
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 associée à plusieurs clés.
La majorité des collections de type Map ont deux constructeurs : un constructeur sans paramètre créant une Map vide, et un constructeur prenant en paramètre une Map qui crée une nouvelle Map en fonction de la Map passée en paramètre.
_____________________________________________________________________________________________________Mme A. BENOMAR
180
5-1- L’interface java.util.MapLes java.util.Map (associations) mémorisent une collection de couples clé/valeur. Si on a une clé, l'association retrouvera la valeur associée à cette clé. Les clés sont uniques, mais la même valeur peut-être associée à plusieurs clés.
Les méthodes 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 d’une clé doit exister dans un objet implémentant l'interface Map ;elle ne peut donc correspondre qu’à une seule valeur, elle est unique.
_____________________________________________________________________________________________________Mme A. BENOMAR
181
Les objets Map dépendent de deux méthodes particulièrement
importantes pour le fonctionnement des collections :
hashCode() // calcule le code de hachage des clés
equals(Object o) // teste l’égalité entre 2 clés
Ces méthodes sont indispensables puisqu’elles assurent la cohérence de
la collection lors de l’utilisation des méthodes :
get(Object key) // récupère la valeur correspondante à la clé key
put(Object key,Objet value) // ajoute un ensemble clé/valeur
remove(Object o) // supprime l’ensemble clé/valeur correspondant à la clé
key spécifiée
Ainsi, si un nouveau couple clé/valeur est ajouté à une collection et que la
clé y est déjà présente, la valeur de cette clé remplacera l’ancienne et ne
rajoutera pas une nouvelle paire clé/valeur.
_____________________________________________________________________________________________________Mme A. BENOMAR
182
5-2 La classe HashMap
La classe HashMap est une implémentation de l’interface Map,
et comme on pourra le constater elle ressemble énormément à la classe
HashSet .
I l ne peut y avoir qu’une seule clé null dans une instance de
classe HashMap. Cependant, plusieurs valeurs peuvent être null,
l'unicité des entrées étant assurées par les clés
Les objets HashMap ne garantissent pas l'ordre des éléments
durant une itération de la collection, contrairement aux TreeMap.
En effet, la fonction de hachage disperse les éléments au sein d'une
collection Map.
_____________________________________________________________________________________________________Mme A. BENOMAR
183
5-5-1.Les constructeurs de la classe HashMap
HashMap maHashMap = new HashMap(); Ce constructeur est le constructeur par défaut. Il initialise l'instance avec
des valeurs par défaut, soit une capacité initiale et un facteur de charge par défaut é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 d’indiquer la capacité initiale et le facteur de
charge.
_____________________________________________________________________________________________________Mme A. BENOMAR
184
Définitions :- La capacité initiale définit la taille initiale de la collection.
- Le facteur de charge détermine à quel moment l'ensemble doit
recalculer la capacité de la collection afin d'accueillir éventuellement
plus d'éléments.
Dans le cas d'une collection de capacité initiale de 100 et d’un facteur
de charge de 0.70, sa capacité sera recalculée dès qu’elle aura atteint
un taux de remplissage de 70%. Le facteur de charge influant sur les
performances de l'objet, il faut bien sûr l’initialiser 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 entrée de la collection spécifiée
sera copiée au sein de l'objet HashMap créé.
_____________________________________________________________________________________________________Mme A. BENOMAR
185
Quelques méthodes de la classe HashMap
Les méthodes put(Object key,Object value)
et putAll(Map m) permettent respectivement
d'ajouter une paire clé/valeur et toutes les entrées
d'une collection Map.
Les méthodes d'ajout vérifient au préalable
si les clés spécifiées ne sont pas déjà présentes
dans la collection. Si c’est le cas, les valeurs
correspondantes aux clés existantes sont
remplacées par les nouvelles valeurs spécifiées.
_____________________________________________________________________________________________________Mme A. BENOMAR
186
Exemple d’utilisation 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 méthode put() float[] resultat = (float[]) maHashMap.get(eleve);// la méthode
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 prépa"); 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
187
La suppression d'une entrée spécifique par rapport à sa clé ou de la totalité des paires clé/valeur s'effectue respectivement par les méthodes remove(Object key) ou clear().Exemple : //suppression de l'entrée correspondant à la clé passé en argument float[] lesNotes = maHashMap.remove("Anass"); //suppression de toutes les entrées de la collection HashMap maHashMap.clear();
La vérification de présence d'entrées, d'une clé ou d'une valeur est possible par l'intermédiaire des méthodes 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é trouvée !"); } if (maHashMap.containsValue("INPT")) { System.out.println("La valeur 'valeur' a été trouvée !");} Affichage : La clé de Marwane a été trouvée ! La valeur INPT a été trouvée !
_____________________________________________________________________________________________________Mme A. BENOMAR
188
5-3 La classe HashTable
Un objet HashTable est une implémentation 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 numéro 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),"Décembre");
_____________________________________________________________________________________________________Mme A. BENOMAR
189
La complexité d'accès à une valeur par sa clé dépend d'une
fonction appelée hashCode définie dans la clé.
Cette fonction est déjà définie dans Object, mais pour optimiser la
recherche, la surcharger dans vos propres classes (si la clé est une
instance d'une classe de votre création) permet un gain de temps non
négligeable.
Le principe de cette fonction est simple : elle renvoie un entier. Si
les deux objets sont égaux, les valeurs renvoyées par leur fonction
respectives sont égales, mais l'inverse n'est pas vrai, ce qui veut dire que
si deux objets sont inégaux, leurs hashCode ne sont pas forcément
inégaux.
Généralement, on fait renvoyer à la fonction hashCode() d'un
objet la somme des hashCode() des éléments le composant.
_____________________________________________________________________________________________________Mme A. BENOMAR
190
6 LES CLASSES UTILITAIRES
6-1 L'interface java.util.EnumerationL'interface Enumeration définit deux méthodes permettant de
balayer une séquence d'éléments :
public boolean hasMoreElements () :Cette méthode doit renvoyer
true
s'il reste encore un ou plusieurs éléments à énumérer.
public Object nextElement () throws NoSuchElementException
Cette méthode doit retourner l'élément suivant à énumérer ou
déclencher une exception de classe NoSuchElementException si le
dernier élément a déjà été énuméré.
Les méthodes de cette interface sont généralement utilisées dans
une boucle while, comme dans l'exemple suivant
_____________________________________________________________________________________________________Mme A. BENOMAR
191
Les méthodes de cette interface sont généralement
utilisées dans une boucle wile, comme dans l'exemple suivant
import java.util.*;
// Classe mémorisant des chaînes de caractères
class CollectionChaines
{ String [ ] tabChaines;
int nbreChaines = 0;
CollectionChaines (int max)
{ tabChaines = new String [max]; }
public void ajouterChaine (String chaine)
{ tabChaines [nbreChaines++] = chaine; }
public Enumeration chaînes ()
{ return new EnumerationChaines (this); }
}
_____________________________________________________________________________________________________Mme A. BENOMAR
192
// Classe permettant d'énumérer les chaînes 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
193
public class EssaiEnumeration { public static void main (String [ ] args) { // Création d'une collection de chaînes et ajout de 3 chaînes CollectionChaines donnees = new CollectionChaines (10); donnees.ajouterChaine ("INE1"); donnees.ajouterChaine ("INE2"); donnees.ajouterChaine ("INE3"); // Enumération des éléments de la collection Enumeration enumeration = donnees.chaînes (); while (enumeration.hasMoreElements ()) System.out.println (enumeration.nextElement ()); } }/*A l’exécution INE1INE2INE3*/
_____________________________________________________________________________________________________Mme A. BENOMAR
194
4-2 L’interface Iterator
L’interface java.util.Iterator permet le parcours séquentiel des
éléments de n’importe quelle collection
L’interface java.util.Iterator facilite le parcours de collections
ainsi que le retrait d’élément dont on ne connaît pas la position.
Un itérateur est un objet qui implémente l’interface Iterator, et
qui a pour but de permettre le parcours des éléments d’un conteneur,
sans avoir besoin de savoir de quelle nature est ce conteneur.
L’interface Iterator contient les méthodes suivantes :
_____________________________________________________________________________________________________Mme A. BENOMAR
195
boolean hasNext()
elle permet de tester l'existence d'un élément après le curseur Retourne true si l’itérateur n’est pas arrivé en fin de l’ensemble et false sinon.
Object next()
Elle permet d’avancer l’itérateur, en déplaçant le curseur après l’élément) Elle retourne un objet de la classe Object qui correspond à l’élément suivant, c’est pourquoi on doit faire du transtypage pour récupérer la valeur de la collection; en précisant le type de l’objet.Elle Lève une exception NoSuchElementException si l'itérateur n'a pas d'objet qui le suit.
void remove()Elle supprime l’objet qui vient d’être retournée par next (c'est-à-dire l'élément avant le curseur)..
- La méthode iterator()La méthode Iterator iterator().de l'interface Collection, vise à construire un itérateur pour
une collection. Elle retourne un objet Iterator.Toutes les collections disposent d'une méthode Iterator iterator(), qui permet d'initialiser
un itérateur, (de façon analogue au int i=0 qui initialise un indice de boucle entier).
_____________________________________________________________________________________________________Mme A. BENOMAR
196
* Création d’un Iterator à partir d’une collection : Iterator it = maCollection.iterator();
On peut donc parcourir une collection grâce aux méthodes de l’interface Iterator
Quelque soit la collection c, on peut parcourir tous ses éléments de la façon suivante :
Collection c ;// c est de type EIterator it = c.iterator() ; while(it.hasNext()){ E o = (E)it.next(); // o a pour valeur un objet de la collection
_____________________________________________________________________________________________________Mme A. BENOMAR
197
-L’interface ListIteratorListIterator est une sous-interface adaptée 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 (située entre l'élément qui serait retournée par previous et celui retourné par next). Dans une liste de longueur n, les index valides sont 0, 1, ..., n. Les méthodes ajoutées dans cette interface sont les suivantes : boolean hasPrevious() qui teste s'il existe un élément avant le curseur ; Object previous() qui renvoie, s'il existe, l'élément avant le curseur ; void add(Object o) qui permet l'insertion d'un élément avant le curseur (c'est-à-dire entre les éléments qui seraient retournés par appel de Object previous() et Object next()) ; int nextIndex() qui renvoie l'index de l'élément avant le curseur ; int previous qui renvoie l'index de l'élément après le curseur ; void set(Object o) qui remplace le dernier élément retourné par previous ou next (si la dernière opération a modifié la liste, c'est-à-dire si la dernière opération a été add ou remove, l'exception IllegalStateException est levée).
_____________________________________________________________________________________________________Mme A. BENOMAR
198
Exemple d’utilisation d’itérateur 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
199
for(Enumeration enum = vect.elements(); enum.hasMoreElements();) // pas d’incrémentation 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
200
6-3.L’interface java.lang.ComparableLes objets manipulés dans une TreeMap ou une TreeSet
doivent être comparables entre eux, c’est à dire qu’ils doivent
implémenter l’interface Comparable
En effet, L’interface java.lang.Comparable contient une seule
méthode :
int compareTo(Object o);
La méthode compareTo(), appliquée à 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 supérieur
_____________________________________________________________________________________________________Mme A. BENOMAR
201
En ce qui concerne les objets tels que les String ou les
Integer, cette implémentation existe déjà, ils peuvent donc être
utilisés tels quels ( sans passer par l’interface Comparable)
Cependant, les objets créés par l’utilisateur ne
l’implémentent pas automatiquement ; Il convient donc de
l’ajouter.
_____________________________________________________________________________________________________Mme A. BENOMAR
202
Chapitre4 LES APPLETS
INTRODUCTION
1 – LE LANGAGE HTML
2 – LES PRINCIPALES METHODES DE LA CLASSE APPLET
3 – CREATION D’UNE APPLET
4 – EXEMPLE D’UNE APPLET
5- TRANSMISSION DE PARAMETRES A UNE APPLET
_____________________________________________________________________________________________________Mme A. BENOMAR
203
_____________________________________________________________________________________________________Mme A. BENOMAR
204
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 utilisés sont Internet Explorer et Netscape
Navigator).
Pour publier une applet sur Internet , il faut d’abord créer une
page HTML. L’applet est référencée dans la page HTML et exécutée
par le logiciel de navigation.
_____________________________________________________________________________________________________Mme A. BENOMAR
205
Chapitre4 LES APPLETS
1 – LE LANGAGE HTML
Le langage HTML (Hyper Text Markup Language) est un langage universel de structuration de documents hypertextuels indépendants 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 vidéo sont intégrés au
moyen du tag <embed> . La syntaxe est la suivante :
<embed scr = « URL + Nom du fichier »
_____________________________________________________________________________________________________Mme A. BENOMAR
206
Chapitre4 LES APPLETSLes liens dans une page HTML
Dans une page HTML , on peut définir des liens qui représentent 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 même document et des liens externes qui appellent un autre document figurant dans le même ordinateur serveur ou sur un autre géographiquement éloigné.
Lien interne : <a href= «#nom de l’ancrage» texte1 ou image1</a>
<a name= «nom de l’ancrag » texte2 ou image2 </a>
- Si on clique sur texte1 ou image1 , on va directement au texte2 ou à l’image2 spécifiée dans le tag <a name…>
Lien externe : <a href= «adresse URL» texte ou image </a>
- Si on clique sur le texte ou l’image, on va se déplacer vers l’URL spécifiée
_____________________________________________________________________________________________________Mme A. BENOMAR
207
Chapitre4 LES APPLETS
2 – LES PRINCIPALES METHODES DE LA CLASSE Applet
Pour écrire une applet en java, il faut étendre (hériter) de la classe Applet du package java.applet
La hiérarchie d’héritage 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
208
Chapitre4 LES APPLETS
2 – LES PRINCIPALES METHODES DE LA CLASSE Applet
Les principales méthodes de la classes Applet :-La méthode init() : appelé automatiquement par le browser pour initialiser tous les objets et variables de l’applet.
-- La méthode start() : appelé automatiquement par le browser pour démarrer l’applet. Elle exécutée à chaque démarrage de l’applet
-la méthode stop() : appelé automatiquement par le browser pour interrompre l’exécution d’une applet
-La méthode destroy() : appelé automatiquement par le browser pour fermer et finir l’exécution d’une applet
- La méthode paint() : pour afficher la fenêtre de l’applet.
_____________________________________________________________________________________________________Mme A. BENOMAR
209
Chapitre4 LES APPLETS
3 – CREATION D’UNE APPLET
Une applet est incluse dans une page HTML sous la forme d’une
référence qui indique l’endroit où le logiciel de navigation doit aller la
chercher
La balise APPLET s’utilise comme n’importe quelle commande HTML.
Sa syntaxe est la suivante :
<APPLET CODE= ‘’Nomclass.class’’ widht = w height=h
>
</APPLET>
NomClasse : indique le nom de la classe définissant l’applet
w et h désignent la largeur et la hauteur (en pixels) de la zone
de la page html destinée à représenter l’applet
_____________________________________________________________________________________________________Mme A. BENOMAR
210
Chapitre4 LES APPLETS
3 – CREATION D’UNE APPLET
La balise APPLET peut comporter quelques attributs facultatifs :codebase : dans le cas où l’applet ne se trouve pas dans le même dossier que le fichier HTML, il faut indiquer l’adresse de la classe définissant l’applet par rapport à l’URL de la page HTML (en partant du dossier de la page HTML). Le paramètre codebase est placé à la suite du paramètre code
CODE = nom de l’applet codebase = chemin (nom du dossier)Hspace/vspace : les paramètres hspace (espacement horizontal) et vspace (espacement vertical) servent à fixer la distance en pixels entre l’applet et le texte
align : Ce paramètre détermine la position relative de l’applet dans la fenêtre. Les valeurs possibles sont : left, top, texttop,middle, absmiddle, bottom, absbottom
_____________________________________________________________________________________________________Mme A. BENOMAR
211
Chapitre4 LES APPLETS
3 – CREATION D’UNE APPLET
Pour créer et exécuter une applet , il faut suivre ces étapes :
1 – Ecrire le code source de la classe qui définit l’applet et l’enregistrer sous le nom de la classe .java
2 – Compilation et création du fichier .class
3 -Création du fichier HTML faisant référence à l’applet
4 - Le test de l’applet
_____________________________________________________________________________________________________Mme A. BENOMAR
212
Chapitre4 LES APPLETS
Fonctionnement d’une applet
Une applet contient des méthodes qui sont appelées
automatiquement lorsque certains événements se produisent.
La méthode init() est appelée au chargement de l’applet.
init() n’est pas une méthode statique . Une instance de la
classe chargée doit être crée
_____________________________________________________________________________________________________Mme A. BENOMAR
213
Chapitre4 LES APPLETS
Fonctionnement d’une applet
La liste ci dessous décrit les différents événements qui se produisent lorsqu’une applet est chargée :
La classe est chargée
La classe est instanciée
La méthode init() de l’instance crée est invoquée
La méthode strart() est invoquée
- Si la page contenant l’applet est quitée :
La méthode stop() est invoquée
Si la page est de nouveau affichée :
La méthode start() est invoquée de nouveau
- Lorsque le navigateur est quitté :
La méthode destroy() est invoquée
_____________________________________________________________________________________________________Mme A. BENOMAR
214
Chapitre4 LES APPLETS
4 – EXEMPLE D’UNE APPLET1 ère étape le code source
import java.applet.Applet ; import java.awt.Graphics ; // l’applet est une fenêtre graphique public class Helloworld extends Applet { public void paint (Graphics g) {
g.drawString(‘’ Hello World ‘’ , 20, 25)/* affiche la chaine aux coordonnées spécifiées */
} } Ce code sera contenu dans un fichier de nom Helloworld.java
_____________________________________________________________________________________________________Mme A. BENOMAR
215
Chapitre4 LES APPLETS
4 – EXEMPLE D’UNE APPLE
2ème étape la compilation
Une fois le code enregistré dans le fichier Helloworld.java. On
le compile pour obtenir le fichier Helloword.class
3ème étape Création du fichier HTML
<HTML>
<applet code = ‘’ Helloworld.class’’ width=100 height=50>
</applet>
</HTML>
On enregistre ce code dans un fichier .html (dans le même
dossier que le fichier Helloworld.class )
_____________________________________________________________________________________________________Mme A. BENOMAR
216
Chapitre4 LES APPLETS
4 – EXEMPLE D’UNE APPLE
4 ème étape : Le test de l’applet
On peut tester l’applet soit :
- En invoquant l’appletviewer :
c:\chemin> appletviewer Helloworld.html
- Soit en lançant l’applet dans un navigateur
_____________________________________________________________________________________________________Mme A. BENOMAR
217
Chapitre4 LES APPLETS
5 – TRANSMISSION DE PARAMETRES A UNE APPLET
Les applets java peuvent lire des paramètres issus
d’une page HTML. Cette technique constitue un outil efficace
pour personnaliser l’exécution d’une applet dans un document
HTML et l’adapter sans être obligé de retoucher le code
source, ce qui demanderait une recompilation
_____________________________________________________________________________________________________Mme A. BENOMAR
218
Chapitre4 LES APPLETS
5 – TRANSMISSION DE PARAMETRES A UNE APPLET
5-1 Passage des paramètres depuis une page HTML
Les paramètres sont stockés comme éléments constitutifs de la page
Web qui contient une applet. Ils sont crées à l’aide 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 placées entre la balise d’ouverture <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-1 Passage des paramètres depuis une page HTML
Les paramètres sont stockés comme éléments constitutifs de la page
Web qui contient une applet. Ils sont crées à l’aide 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 placées entre la balise d’ouverture <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
220
Chapitre4 LES APPLETS
5 – TRANSMISSION DE PARAMETRES A UNE APPLET
5-2 Lecture des paramètres depuis une applet
Java dispose de la méthode getParameter() pour récupérer les
paramètres décrits sur la page HTML
La méthode getParameter() de la classe java.awt.Applet
récupère un paramètre d’une balise <PARAM> sur une page Web. Le
nom de ce dernier qui est précisé avec l’attribut Name, est utlisé
comme argument passé à la méthode getParameter(). Cette méthode
renvoie comme résultat une chaîne de caractères de type String
La syntaxe de la lecture est la suivante :
String ParametreHTML ;
ParametreHTML = getParameter(nom_du_parametre) ;
_____________________________________________________________________________________________________Mme A. BENOMAR
221
Chapitre4 LES APPLETS
5 – TRANSMISSION DE PARAMETRES A UNE APPLET
5-3 Exemple d’utilisation de paramètres dans une applet
/* Lecture de paramètres dans un fichier HTML */ import java.awt.* ;
import java.applet.Applet ;
public class ParametresHTML extends Applet
{ String p1,p2 ; // variables recevant les paramètres
public void paint (Graphics g)
{ p1= getParameter("param1") ;
p2= getParameter("param2");
g.drawString("Valeur du premier paramètre = "+p1,10,40) ;
g.drawString("Valeur du deuxième paramètre = "+p2,10,70) ; }
}
_____________________________________________________________________________________________________Mme A. BENOMAR
222
Chapitre4 LES APPLETS
5 – TRANSMISSION DE PARAMETRES A UNE APPLET
5-3 Exemple d’utilisation de paramètres dans une applet
/* fichier HTML coprrespondant à l’applet */<HTML>
<APPLET code = "ParametresHTML.class" width=400 height=200>
<PARAM Name="param1" value=" Je suis le premier paramètre ! ">
<PARAM Name="param2" value=" et moi le deuxième ! " >
</APPLET></HTML>
A l’exécution , on aura : Valeur du premier paramètre = Je suis le premier paramètre !Valeur du deuxième paramètre = et moi le deuxième !
_____________________________________________________________________________________________________Mme A. BENOMAR
223
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 L’INTERFACE
GRAPHIQUE
4 – LES GESTIONNAIRES DE MISE EN PAGE
5- LES CONTENEURS
6- LES EVENEMENTS ET LES ACTIONS
_____________________________________________________________________________________________________Mme A. BENOMAR
224
Chapitre 5 LES INTERFACES GRAPHIQUES
INTRODUCTION
Il existe en java plusieurs packages dédiés au graphisme,
les plus utilisés sont :
- Le paquetage java.awt (Abstract Windowing Toolkit) fournit au
programmeur toutes les classes nécessaires à la gestion du
graphisme . Cette librairie de classes est destinée à 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 l’apparence des composants dans javax.swing est
totalement différente. javax.swing permet de réaliser de véritables
interfaces homme-machine.
_____________________________________________________________________________________________________Mme A. BENOMAR
225
Chapitre 5 LES INTERFACES GRAPHIQUES
INTRODUCTION
Principes de base de java.awt et javax.swing
awt et Swing permettent de créer et gérer une interface graphique
en utilisant les mêmes principes :
- Créer un cadre ( un objet de la classe conteneur),
- Créer des composants (objets de la classe Component)
-Utiliser une mise en page pour ces composants,
- Insérer les composants dans le cadre
- Utiliser des méthodes en réponse aux actions de l’utilisateur.
_____________________________________________________________________________________________________Mme A. BENOMAR
226
Chapitre 5 LES INTERFACES GRAPHIQUES
A - LE PACKAGE java.awt
1 – LES POSSIBILITES de java.awt
Avec java.awt, on peut par exemple :
- Tracer différentes formes (polygones,, ovales, …)
- Définir des polices de caractères, des couleurs, …
- Créer des composants simples (boutons, cases à cocher, )
- Créer des composants complexes ( menus déroulants, …
- Gérer des événements utilisateurs (clique sur un bouton, coche
sur une case, …)
_____________________________________________________________________________________________________Mme A. BENOMAR
227
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 méthodes
permettant de tracer des formes géométriques vides ou pleines. Voici un échantillon
des méthodes de Graphics :
* drawLine(int x1,int y1,int x2 ,int y2) : affiche le segment de (x1,y1) à (x2,y2).
Remarque : Les segments tracés en java ont une largeur égale à un point d’écran. Pour
tracer un segment plus épais , on doit tracer plusieurs segments parallèles
Le système de coordonnées x et y dans une fenêtre graphique ou une applet est
déterminé par son origine (0,0) qui est l’angle supérieur gauche de la fenêtre.(0,0) 50
20 (50,20)
_____________________________________________________________________________________________________Mme A. BENOMAR
228
Chapitre 5 LES INTERFACES GRAPHIQUES
2-1 La classe Graphics
Exemple d’application de traçage 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 fenêtre invisible et appelle automatiquement la méthode paint */ } public void paint(Graphics g) // méthode redéfinie { g.setColor(Color.blue); // dessin d’une ligne épaisse (2 pixels d’épaisseur g.drawLine(50,65,150,100); g.drawLine(50,66,150,101); }
_____________________________________________________________________________________________________Mme A. BENOMAR
229
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 fenêtre
monDessin.setVisible(true); /* la méthode setVisible(boolean) de la classe java.awt.component rend visible ou cache le
composant en fonction de l’état du boolean */ } // fin de main } // fin de la classe
_____________________________________________________________________________________________________Mme A. BENOMAR
230
Chapitre 5 LES INTERFACES GRAPHIQUES
2-1 La classe Graphics
* drawString (String texte, int x, int y) : affiche la chaîne de caractèrestexte aux coordonnées (x,y) dans une fenêtre 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
(x1,y1)
hauteur
larg : largeur
_____________________________________________________________________________________________________Mme A. BENOMAR
231
Chapitre 5 LES INTERFACES GRAPHIQUES
2-1 La classe Graphics
Exemple d’application de traçage de rectangle’
import java.awt.*;
class TraceRect extends Frame { int x=50, y=60, largeur=150 , hauteur=100; Color couleur=Color.red ; // déclaration 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
232
Chapitre 5 LES INTERFACES GRAPHIQUES
2-1 La classe Graphics
Exemple d’application de traçage 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
233
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 supérieur gauche de coordonnées (x,y) et de largeur et hauteur définis
Dans le cas d’un cercle largeur = hauteur = diamètre
* fillOval (int x, int y, int largeur, int hauteur) affiche un ovale plein
Largeur
(x,y)
Largeur
Hauteur
_____________________________________________________________________________________________________Mme A. BENOMAR
234
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 d’entiers réservés aux abscisses, et ypoints est un tableau d’entiers réservés aux ordonnés et points est le nombre de points à, relier
* fillPolygon (xpoints, ypoints, points) trace un polygone plein Exemple de traçage 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 ordonnées des points int points=3; // le nombre de points (3 c’est un triangle) Color couleur ; TracePoly(String titre) // Constructeur { super (titre); }
_____________________________________________________________________________________________________Mme A. BENOMAR
235
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
236
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 spécifiées de plusieurs manières
différentes car la classe Color offre plusieurs constructeurs :
- On peut utiliser des noms standards prédéfinis avec la
syntaxe :
Color.nom_de_la_couleur
Les noms de couleurs prédéfinis sont les suivants : black,
blue, cyan, darkGray, gray, green, lightGray, magneta, orange, pink,
red, white, yellow.
_____________________________________________________________________________________________________Mme A. BENOMAR
237
Chapitre 5 LES INTERFACES GRAPHIQUES
2-2 La classe java.awt.Color
- On peut aussi spécifier une couleur à l’aide de trois nombres entiers compris entre 0 et 255. Ces trois nombres représentent 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 spécifier une couleur à l’aide de trois nombres floats compris entre 0.0 et 1.0 -Ces trois nombres représentent 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
238
Chapitre 5 LES INTERFACES GRAPHIQUES
2-2 La classe java.awt.Color
* Pour afficher un texte ou un graphique dans une couleur
spécifique, on utilise la méthode setColor(couleur) de la classe
java.awt.Graphics
* Pour attribuer une couleur d’arrière plan à une fenêtre, on
utilise la méthode setBackground(couleur)
_____________________________________________________________________________________________________Mme A. BENOMAR
239
Chapitre 5 LES INTERFACES GRAPHIQUES
2-3 La classe java.awt.FontL’affichage des caractères est définie par trois éléments :
- 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 définie, avec un style défini et une taille précise, on doit créer 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 l’une des constantes :
Font.PLAIN : texte normalFont.BOLD : texte grasFont.ITALIC : texte italique
taille : précise la taille de la police en pixels
_____________________________________________________________________________________________________Mme A. BENOMAR
240
Chapitre 5 LES INTERFACES GRAPHIQUES
• La liste des polices de la JVM est retournée par la méthode getFontList() de la classe java.awt.Toolkit.
Exemple d’affichage 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
241
Chapitre 5 LES INTERFACES GRAPHIQUES
2-3 La classe java.awt.Font
Exemple d’affichage 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
242
Chapitre 5 LES INTERFACES GRAPHIQUES
* Pour attribuer un font à un texte on utilise la méthode : public void setFont(Font font) de la classe java.awt.Graphics
Exemple d’utilisation 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
243
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
244
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
En java, les éléments de l’interface utilisateur sont des
composants. Ce sont des objets dérivant de la classe
java.awt.Component.
Chaque type d'objet de l'interface graphique (bouton, case à
cocher, liste, menu…) est une classe dérivée de Component.
La classe java.awt.Container , qui hérite de Component est un
espace capable de contenir plusieurs objets de la classe Component .
Par exemple une fenêtre (Frame) ou une applet
_____________________________________________________________________________________________________Mme A. BENOMAR
245
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Voici une partie de la hiérarchie de la classe java.awt.Compenentjava.awt.Compenent
Button (bouton)
Canvas(surface de dessin)
Checkbox (case à cocher)
Container
Panel (conteneur simple)
Applet
Window (fenêtre sans cadre ni titre)
Dialog (fenêtre de dialogue)
Frame (fenêtre avec cadre et titre)
Label (étiquette)
Ce diagramme définie les relations d’héritage des classes
_____________________________________________________________________________________________________Mme A. BENOMAR
246
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Pour utiliser des composants , il faut
- Créer un espace conteneur (Frame, Panel, Window, ..),
- Créer des composants (Bouton, CheckBox, …)
- Utiliser une mise en page pour ces composants,
- Insérer les composants dans l’espace
Pour insérer des composants dans un conteneur on utilise la méthode add() de la classe java.awt.Component
_____________________________________________________________________________________________________Mme A. BENOMAR
247
Chapitre 5 LES INTERFACES GRAPHIQUES
3-1 Les boutons
Les boutons sont les contrôles de tout écran d’interface, ils
permettent de déclencher des événements. En java.awt un bouton est représenté par un objet de la classe java.awt.Button
Exemple d’utilisation 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
248
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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 insérer le bouton dans l’applet add(monBouton2) ; } }
_____________________________________________________________________________________________________Mme A. BENOMAR
249
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-1 Les boutons
<! Fichier DemoBouton.htm><HTML> <applet code = " DemoBouton.class" width=200 height=200> </applet> </HTML>
_____________________________________________________________________________________________________Mme A. BENOMAR
250
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-2 Les étiquettes
Une étiquette (label) est une chaîne de caractères qui ne
dépasse pas une ligne et qui permet d’afficher un texte qui n’est pas
interactif. Son rôle consiste à donner des informations sur les autres
contrôles , notamment les zones de saisie.
Pour accéder à une étiquette, il faut d’abord déclarer un objet
de la classe java.awt.Label
Label l = new Label (« Je suis une étiquette ») ;
add(l) ; // Affichage de l’étiquette sur la fenêtre
On peut modifier le texte d’un label en appelant sa méthode setText()
l.setText(« le nouveau texte ») ;
_____________________________________________________________________________________________________Mme A. BENOMAR
251
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE 3-3 les boîtes de dialogues
Les cases à cocher
Un composant. Checkbox est une case placée à côté d’une ligne de texte et qui peut être cochée par l’utilisateur.
Les cases à cocher sont très utilisées dans les programmes d’installation, les fenêtres de configuration ou d’une manière générale dans les boîtes de dialogue
Chaque case à cocher ( Checkbox )représente un état booléen, vrai ou faux selon qu’elle est cochée ou non.
Pour gérer les cases à cocher, on utilise la classe java.awt.Checkbox
Checkbox cb= new Checkbox() ; // crée une case à cocher
Checkbox cb= new Checkbox(String) ; // crée une case à cocher affiche le texte en argument à côté de la case à cocher
_____________________________________________________________________________________________________Mme A. BENOMAR
252
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-3 les boîtes de dialogues
Les cases à cocher
L’état d’une case à cocher
cb.setState(boolean) ; // true pour cocher, false pour décocher
boolean etat=cb.getState() ; //retourne true si activée, false sinon
cb.getLabel() retourne la chaîne de caractères correspondant à
l’étiquette de la case à cocher
_____________________________________________________________________________________________________Mme A. BENOMAR
253
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Pour savoir si une action a été déclenchée par
l’utilisateur( pression d’un bouton, coche d’une case,….), il faut
appeler une méthode écouteur (Listener) par exemple la méthode
action :
public boolean action(Event e , Object arg) de la classe
java.awt.Component est appelée automatiquement lorsqu’une action
est déclenchée par l’utilisateur et traite les événements survenus
pendant l’exécution de l’application ou de l’applet.
_____________________________________________________________________________________________________Mme A. BENOMAR
254
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Exemple: L’application suivante permet d’afficher une case à cocher
de nom Test . Si l’utilisateur active cette case le message Case activée
sera affichée, sinon le message Case désactivée sera affichée
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
255
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE public boolean action(Event e,Object arg){ if (test.getState()) etat=true; else etat=false; repaint(); // force la méthode 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 activée",50,300); else g.drawString("Case désactivée",50,300); }
_____________________________________________________________________________________________________Mme A. BENOMAR
256
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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 l’exécution, on aura
_____________________________________________________________________________________________________Mme A. BENOMAR
257
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE Les Boutons radio
Une case à cocher peut être affichée individuellement ou dans un groupe.
Les boutons radio sont des cases à cocher rassemblées dans un groupe. A
l’intérieur du groupe, on ne peut activer qu’une seule case à la fois. La classe
java.awt.CheckboxGroup permet de créer des groupes de boutons radio
CheckboxGroup br ; // déclaration d’un groupe de boutons radioCheckbox b1= new Checkbox(« étiquette1 », état1, br) ;Checkbox b2= new Checkbox(« étiquette2 », état2, br) ;::Checkbox bn= new Checkbox(« étiquetten », étatn, br) ;
- étiquetten est l’étiquette du bouton radio- etatn est l’état du bouton : true ou false- br est le nom du groupe des boutons radio
_____________________________________________________________________________________________________Mme A. BENOMAR
258
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les Boutons radio
Exemple : Ecrire une application en java qui permet d’afficher cinq
boutons radio correspondant au statut possible d’une personne
(célibataire, marié, divorcé, veuf, autre)
import java.awt.*;
class DemoCheckboxGroup extends Frame
{
CheckboxGroup status;
Checkbox celibataire,marie,divorce,veuf,autre;
_____________________________________________________________________________________________________Mme A. BENOMAR
259
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les Boutons radio DemoCheckboxGroup(String titre) { super (titre); FlowLayout fl=new FlowLayout(); setLayout(fl); status = new CheckboxGroup(); celibataire=new Checkbox("Célibataire",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
260
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE public static void main(String[] argv) { DemoCheckboxGroup monStatus = new DemoCheckboxGroup("Status"); monStatus.setSize(400, 400); monStatus.setVisible(true); }} cette application crée cinq boutons radio . Le bouton célibataire est coché initialement , mais si l’utilisateur coche une autre bouton du groupe status, la coche de célibataire sera automatiquement supprimé (dans un CheckboxGroup un seul bouton doit être coché la à la fois)
- La méthode getCurrent() de la classe CheckboxGroup retourne l’objet Checkbox correspondant à la réponse seléctionnée
_____________________________________________________________________________________________________Mme A. BENOMAR
261
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE 3-4 Les listes déroulantes
Les listes déroulantes sont des composants qui permettent de sélectionner des éléments dans une liste
Les listes à choix uniqueJava permet de créer une liste déroulante à choix unique par
l’intermédiaire de la classe java.awt.Choice
L’objet Choice permet à l’utilisateur 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
262
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix unique
Gestion des sélectionsmaListe.select(indice) ;// sélectionne un élément par son indice l’indice est un entier correspondant à l’ordre de l’élément dans la liste. 0 est l’indice du premier élément
maListe.select(élement) ;// sélectionne un élément par son contenu
maListe.countItems() // retourne le nombre d’éléments de la liste
maListe.getItem(n) // retourne le contenu de l’élément n
maListe.getSelectedItem() //retourne le contenu de l’élément sélectionné
maListe.getSelectedIndex() // retourne l’indice de l’élément sélectionné
_____________________________________________________________________________________________________Mme A. BENOMAR
263
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE Exemple : Une application java qui crée une liste déroulante de trois éléments (JAUNE, ROSE, BLEU). La couleur sélectionnée est appliquée à l’arrière plan de la fenêtre
import java.awt.*;public class DemoChoice extends Frame{ String str; // str contiendra la couleur choisit Choice choix= new Choice(); // création 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
264
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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
265
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
public static void main(String[] argv) { DemoChoice monChoix = new DemoChoice("Couleur de l'arrière plan"); monChoix.setSize(400, 400);
monChoix.setVisible(true); } }
_____________________________________________________________________________________________________Mme A. BENOMAR
266
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
Une liste à choix multiple permet d’afficher une liste de choix dans un cadre. Elle permet d’afficher plusieurs lignes et la sélection de plusieurs éléments.
Pour gérer une liste à choix multiple, on doit faire appel à la classe java.awt.List
La classe List contient plusieurs constructeurs, le constructeur le plus intéressant est List ( int i, boolean valeur). Le premier paramètre i définit le nombre de lignes qui seront affichées, et la valeur indique si l’on autorise la sélection multiple (true) ou non.
_____________________________________________________________________________________________________Mme A. BENOMAR
267
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
Une fois l’instance crée, on ajoute des propositions avec
addItem(String)
La classe List dispose d’un grand nombre de fonctions pour gérer
et consulter les informations mémorisées
List li = new List(nbligne, multiSelect) ; // Déclare et initialise une liste
li.addItem(String s) ; // ajoute l’élément s à la fin de la liste li
li.addItem(String s, int indice) ; // insère l’élément s à la position
indice, le premier élément de la liste a pour indice 0
_____________________________________________________________________________________________________Mme A. BENOMAR
268
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
li.delItem(int indice) ; // supprime l’élément qui est à la position indice
li.delItems(int indice1, int indice2) ; // supprime les éléments qui sont entre les positions indice1 et //indice2
li.clear() ; // efface complètement le contenu de la liste
li.countItems() ; // retourne un entier correspondant au nombre
d’éléments de la liste
li.getItem(indice) ; // retourne une chaîne de caractères qui est le
//contenu de l’élément d’indice indice
_____________________________________________________________________________________________________Mme A. BENOMAR
269
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
li.select(indice) ; // sélectionne l’élément d’indice indice
li.setMultipleSelections() ; // est un booléen qui retourne true si la
sélection multiple est autorisée, false sinon
li.deselect(indice) ; // désélectionne l’élément d’indice indice
li.getSelectedIndex();//renvoie l’indice de l’élément sélectionné en
cas de sélection simple. En absence de sélection, le résultat est -1
li.getSelectedIndexes () ; // renvoie un tableau de type int qui
contient les indices de tous les éléments sélectionnés en cas de
sélection multiple
_____________________________________________________________________________________________________Mme A. BENOMAR
270
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multipleli.getSelectedItem () ;// s’utilise dans le cas d’une sélection simple,
renvoie une chaîne de caractères qui contient le texte de l’élément sélectionné , ou null en absence de sélection
li.getSelectedItems () ;// s’utilise dans le cas d’une sélection
multiple, renvoie un tableau de strings qui contient les textes de tous les éléments sélectionnés , ou null en absence de sélection
li.isSelected(int indice) ; // retourne true si l’élément d’indice
indice est sélectionné, false sinon.
Exemple : Il s’agit d’écrire un programme qui écrit une liste de 10 lignes qui autorise la sélection multiple. Il installe deux boutons pour ajouter et supprimer des éléments
_____________________________________________________________________________________________________Mme A. BENOMAR
271
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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
272
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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 élément 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
273
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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 élément 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
274
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Les listes à choix multiple
public static void main(String[] argv) { DemoList maListe = new DemoList("Liste d'éléments"); maListe.setSize(400, 400); maListe.setVisible(true); } }
_____________________________________________________________________________________________________Mme A. BENOMAR
275
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-5 Les zones de saisiePour recueillir les saisies de l’utilisateur dans une fenêtre
graphique, le package awt propose la classe TextField. Par définition, le champ de texte se limite à une seule ligne. Il est généralement associé à un bouton qui sert à confirmer la saisie et à transmettre au programme les caractères tapés
Les quatre constructeurs disponibles sont :
TextField() : déclare un objet de la classe TextField
TextField(int) : déclare un objet TextField et fixe le nombre maximum de caractères à saisir
TextField(String) : déclare un objet TextField et fixe un texte par défaut
TextField(String, int) :déclare un objet TextField et fixe un texte par défaut et le nombre max de caractères à saisir
_____________________________________________________________________________________________________Mme A. BENOMAR
276
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
3-5 Les zones de saisie
Lecture d’un champ de texteLa méthode getText() appliquée à un objet TextField retourne
une chaîne de caractères qui est la chaîne saisie
Pour lire le nombre de caractères prédéfinie, on applique a
méthode 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 apparaître directement sur l’écran pendant qu’elle est tapée. A la place, on affiche un caractère symbolique ou caractère d’écho. La méthode utilisée est setEchoChar(char)
TextField tF= new TextField (n) ;
TF.setEchoChar(‘*’) ;
_____________________________________________________________________________________________________Mme A. BENOMAR
277
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE 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
278
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Zones de textes pour saisie multiligneLa classe TextField est limitée à la saisie d’une seule
ligne. Pour permettre la saisie de plusieurs lignes, il faut recourir à la classe java.awt.TextArea Les quatre constructeurs disponibles sont :TextArea() : déclare un objet de la classe TextAreaTextArea(int nbLignes, int nbColonnes) : déclare un objet TextArea et initialise le nombre de lignes et de colonnesTextArea(String) : déclare un objet TextField et initialise le contenuTextArea(String, nbLignes, nbColonnes) :déclare un objet TextArea et initialise le contenu, le nombre de lignes et le nombre de colonnes
_____________________________________________________________________________________________________Mme A. BENOMAR
279
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Lecture et modification du contenu d’une zone texte
* La méthode getText() appliquée à un objet TextArea retourne une chaîne de caractères qui est le contenu intégral de la zone de texte
* Pour lire une partie du texte sélectionnée, on applique la méthode getSelectedText() à un objet TextArea
* Pour déterminer le nombre de colonnes, on utilise la méthode getColumns() à un objet TextArea
* Pour déterminer le nombre de lignes, on utilise la méthode getRows()à un objet TextArea
* Pour insérer une chaîne de caractères à partir d’une position donnée, on utilise la méthode insertText(Text, n). Cette méthode insère la chaîne Text à partir du nème caractère.
_____________________________________________________________________________________________________Mme A. BENOMAR
280
Chapitre 5 LES INTERFACES GRAPHIQUES
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Exemple d’utilisation 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
3 – LES COMPOSANTS DE L’INTERFACE GRAPHIQUE
Exemple d’utilisation 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
282
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
Lorsqu’on place des composants dans une applet ou dans
une fenêtre graphique, leur emplacement à l’écran se fait de
manière automatique et d’une façon variable
La disposition des différents composants dépend de:
La taille de la fenêtre ;
La taille des autres composants à ajouter
On peut changer la disposition des différents composants en
utilisant un gestionnaire de mise en page spécifié
Il existe plusieurs gestionnaires de mise en page, chacun
positionnant différemment les éléments graphiques, selon un
algorithme qui leur est propre.
_____________________________________________________________________________________________________Mme A. BENOMAR
283
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
Tous les gestionnaires de mise en page implémentent l’interface java.awt.LayoutManager. Pour sélectionner un gestionnaire de mise en page, on utilise la méthode setLayout(LayoutManager) de la classe Container. Les gestionnaires de mise en page les plus utilisés sont :
4-1 FlowLayout : La classe FlowLayout (mise en page flot) place les
composants ligne par ligne de gauche à droite.
_____________________________________________________________________________________________________Mme A. BENOMAR
284
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
Tous les gestionnaires de mise en page implémentent l’interface java.awt.LayoutManager. Pour sélectionner un gestionnaire de mise en page, on utilise la méthode setLayout(LayoutManager) de la classe Container. Les gestionnaires de mise en page les plus utilisés sont :
4-1 FlowLayout : La classe FlowLayout (mise en page flot) place les
composants ligne par ligne de gauche à droite.C’est la disposition par défaut, celle qui sera utilisée si l’on
ne choisit pas un autre gestionnaire. Le principe est très simple : tous les éléments sont mis côte à côte, de gauche à droite. Lorsqu’il n’y a plus assez de place pour ajouter un élément, on passe à la ligne suivante. Chaque ligne est centrée par défaut
_____________________________________________________________________________________________________Mme A. BENOMAR
285
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-1 FlowLayout :
- Déclaration d’un objet de la classe FlowLayoutFlowLayout fl1 = new FlowLayout();
FlowLayout fl2 = new FlowLayout( int ); /* l’entier définit l’orientation des éléments . On utilise à cet effet les variables prédéfinies CENTER, LEFT et RIGHT*/
FlowLayout fl2 = new FlowLayout(int, int, int);/* le premier argument définit l’orientation, le deuxième argument définit l’espacement horizontal et le troisième définit l’espacement vertical entre les composants */
_____________________________________________________________________________________________________Mme A. BENOMAR
286
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-1 FlowLayout :
* Pour qu’une nouvelle mise en page soit effective, il faut
l’installer avec la méthode 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
287
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
288
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 l’exécution de l’applet :
L’espacement horizontal entre les 2 boutons est de 60 pixels, et l’espacement vertical est de 0
_____________________________________________________________________________________________________Mme A. BENOMAR
289
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-2 BorderLayout :
Lorsqu’on utilise BorderLayout, on peut placer les éléments dans 5 zones différentes : « North », « South », « East », « West » et « Center » (nord, sud, est, ouest et center)
Déclaration d’un objet de la classe BorderLayout
BordreLayout bl1 = new BorderLayout();
BorderLayout bl2 = new BorderLayout(int, int);
/* le premier argument définit l’espacement horizontal et le deuxième définit l’espacement vertical entre les composants
_____________________________________________________________________________________________________Mme A. BENOMAR
290
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, l’espacement n’a pas d’influence sur la distance qui sépare les composants du bord de l’applet */
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
291
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 l’exécution, on aura :
_____________________________________________________________________________________________________Mme A. BENOMAR
292
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-3 GridLayout : La classe GridLayout organise tous les composants d’un
conteneur en grille (lignes et colonnes). Le même espace est affecté à tous les composants. Lorsqu’on instancie GridLayout, on doit spécifier le nombre de lignes et de colonnes. Les éléments sont ajoutés dans la grille de gauche à droite, de haut en bas.
Déclaration d’un objet de la classe GridLayout
GridLayout gl = new GridLayout (int nb_lignes, int nb_colonnes);
/* On spécifie 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
293
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 spécifient l'espacement horizontal et vertical des composants */
Exemple : Affichage de l'applet suivante qui est composée de 4 boutons et une liste de 5 éléments . Ces composants sont disposés en trois colonnes comme suit :
_____________________________________________________________________________________________________Mme A. BENOMAR
294
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); // création d'une liste déroulante public void init() { l.addItem("Premier"); l.addItem("Deuxième"); l.addItem("Troisième"); l.addItem("Quatrième"); l.addItem("Cinquième");
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 ")) ; //(1ère ligne et 1ère colonne)
_____________________________________________________________________________________________________Mme A. BENOMAR
295
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-3 GridLayout :
add(new Button(" Bouton 2 ")) ;// (1ère ligne et 2ème colonne) add(l); // insértion de la liste (1ère ligne et 3ème colonne)
add(new Button(" Bouton 3 ")) ; //(2ème ligne et 1ère colonne)
add(new Button(" Bouton 4 ")) ; //(2ème ligne et 2ème colonne) } }<HTML><applet code = "DemoGridLayout.class" width=280 height=120></applet></HTML>
_____________________________________________________________________________________________________Mme A. BENOMAR
296
Chapitre 5 LES INTERFACES GRAPHIQUES
4 – LES GESTIONNAIRES DE MISE EN PAGE
4-4 GridBagLayout :
Le dernier gestionnaire de mise en page présenté
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 divisée 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
297
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 coordonnées del'origine de la grille (0,0)
gridwidth, gridheight : ces variables définissent combien de cellules (en hauteur et largeur) va occuper un composant. Par défaut leur valeur est 1
GridBagConstraints.REMAINDER spécifie que le prochain composant inséré va être le dernier de la ligne ou de la colonne courante
GridBagConstraints.RELATIVE est utilisé pour placer un composant après le dernier composant d'une ligne ou d'une colonne
_____________________________________________________________________________________________________Mme A. BENOMAR
298
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS
Pour mettre en service les différents composants déjà vus
(boutons, listes, cases à cocher, …) , il faut toujours les incorporer
dans un objet d'une classe dérivée de la classe abstraite Container
(conteneur). Les conteneurs les plus utilisés sont :
Panel : Conteneur qui n'a pas de fenêtre propre sert surtout à
ordonner les contrôles. La classe java.applet.Applet est dérivée de
la classe Panel
Window : crée une fenêtre principale sans cadre ni menu
Frame (dérivant de Window) : il s'agit d'une classe de fenêtre avec
barre de titre
_____________________________________________________________________________________________________Mme A. BENOMAR
299
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 très simple, elle ne
contient qu'un seul constructeur et une seule méthode add()
Panel p = new Panel() ; // définit un nouveau panneau
add(p); : intègre le panneau p dans un autre conteneur (une
applet par exemple)
Un panneau peut lui même contenir d'autres conteneurs. Ainsi des
panneaux peuvent être emboîtés
_____________________________________________________________________________________________________Mme A. BENOMAR
300
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURSExemple : 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("Deuxième"); 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("Troisième"); Button b4=new Button("Quatrième"); p2.add(b3); p2.add(b4); add(p2); } }
_____________________________________________________________________________________________________Mme A. BENOMAR
301
Chapitre 5 LES INTERFACES GRAPHIQUES
5 – LES CONTENEURS5-2 Le conteneur Frame
Une frame ou encadrement permet de créer une fenêtre à l'extérieur de l'applet qui s'exécute comme une application indépendante
La classe Frame contient deux constructeurs :
Frame f = new Frame(); // création d'une fenêtre d'encadrement invisible
Frame f = new Frame(String); // création d'une fenêtre d'encadrement invisible avec un nom de la fenêtre.
_____________________________________________________________________________________________________Mme A. BENOMAR
302
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 appelés événements.
On dit que l'on "traite un événement" lorsqu'on prend en
compte celui ci et que l'on exécute des actions en
conséquence . La méthode qui traite l'événement est
également appelée gestionnaire d'événement
La classe java.awt.Event est capable de mémoriser
tous les paramètres relatifs à un événement
_____________________________________________________________________________________________________Mme A. BENOMAR
303
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Des programmes à l'écoute
Les réactions aux événements utilisateur dans un
programme java sont gérés par des programme à l'écoute
(listener). Ces programmes doivent implémenter l'interface
EventListener (auditeurs d'événements) ou des interfaces qui
héritent de EventListener ( par exemple ActionListener). On
appellera "adaptateur" toute instance d'une classe implémentant
une interface héritée de EventListener.
L'interface ActionListener déclare une seule méthode :
public void actionPerformed(ActionEvent)
_____________________________________________________________________________________________________Mme A. BENOMAR
304
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
déclarer qu'elle utilisera une ou plusieurs interfaces d'écoute. Par
exemple :
public class Evenement extends java.applet.Applet implements
ActionListener
_____________________________________________________________________________________________________Mme A. BENOMAR
305
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONSLes interfaces EventListener permettent à un composant
d'interface graphique utilisateur de générer des événements
utilisateur. Aucun composant ne pourra être entendu par les
autres éléments d'un programme sans la présence d'au moins un
des auditeurs. Un programme doit contenir une interface
d'auditeur pour chaque type de composant
Un objet peut déléguer la gestion de ses événements à
plusieurs Listeners. Chacun des Listener réagira aux événements
de l’objet.
Un Listener peut écouter plusieurs objets .
Pour qu’un objet puisse déléguer la gestion on doit spécifier qui s’en
chargera par une méthode du type : add<Typed’événement>Listener.
_____________________________________________________________________________________________________Mme A. BENOMAR
306
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Tableau synthétique des événements et des « listeners »
Le tableau ci-dessous indique :
-En première colonne : un type d’événement
-En deuxième colonne, les types de composants graphiques pouvant
recevoir l’événement indiqué
-En troisième colonne, l’interface « Listener » qu’on peut
implémenter pour traiter l’événement indiqué, et la classe que l’on
peut étendre pour servir d’adptateur, lorsqu’une telle classe existe
-En dernière colonne , les méthodes déclarées par le « listener »
_____________________________________________________________________________________________________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
ComponentEvent Dialog Frame
ComponentListener ComponentMoved(ComponentEvent) ComponentHidden(ComponentEvent) ComponentResized(ComponentEvent) ComponentShown(ComponentEvent)
AdjustementEvent Scrollbar AdjustementListener AdjustementValueChanged (AdjustementEvent)
MouseEvent Canvas Dialog Frame Panel Window
MouseListener MouseAdapter
MousePressed(MouseEvent) MouseReleased(MouseEvent)
KeyEvent Component KeyListener KeyAdapter
KeyPressed(KeyEvent) KeyReleased(KeyEvent) KeyTyped(KeyEvent)
ContainerEvent Container ContainerListener ComponentAdded(ContainerEvent) ComponentRemoved(ContainerEvent)
TextEvent TextComponent TextListener TextValueChanged(TextEvent)
_____________________________________________________________________________________________________Mme A. BENOMAR
309
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
Exemple : Il s’agit de construire une interface graphique qui
permet de tracer un cercle rouge si on clique sur le bouton trace et
d’effacer 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
310
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONSExemple :
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
311
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
312
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* L’interface MouseListener
Les prototypes de méthodes définies dans MouseListener
void mouseClicked(MouseEvent e) la souris a été ciqué
(pressée et relachée)
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 relachée. */
_____________________________________________________________________________________________________Mme A. BENOMAR
313
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements 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
314
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements 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 entrée.");}
public void mouseExited(MouseEvent e)
{text1.setText("La souris est sortie.");}
public void mousePressed(MouseEvent e)
{text1.setText("La souris est enfoncée ");}
public void mouseReleased(MouseEvent e)
{text1.setText("La souris est relachée ");}
_____________________________________________________________________________________________________Mme A. BENOMAR
315
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements de la souris
public void mousePressed(MouseEvent e) { text1.setText("La souris est enfoncée "); }
public void mouseReleased(MouseEvent e) {text1.setText("La souris est relachée ");}
public static void main(String[] arg)
{Souris maSouris = new Souris("Gestion de la souris");
maSouris.setSize(300,300);
maSouris.setVisible(true);
}
}
_____________________________________________________________________________________________________Mme A. BENOMAR
316
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements du clavier
* Les méthodes de l'interface KeyListener
void keyPressed(KeyEvent e) : touche pressée
void keyReleased(KeyEvent e) : touche relachée
void keyTyped(KeyEvent e) :touche tapée
_____________________________________________________________________________________________________Mme A. BENOMAR
317
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements 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
318
Chapitre 5 LES INTERFACES GRAPHIQUES
6- LES EVENEMENTS ET LES ACTIONS
* Exemple : utilisation des événements du clavierpublic void keyTyped(KeyEvent e) { text = text + e.getKeyChar(); //getKeyChar() retourne le caractère pressée 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
319
Chapitre 5 LES INTERFACES GRAPHIQUES
-Exemples de javax.swingExemple 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 fenêtre
JLabel label = new JLabel("Hello",SwingConstants.CENTER);
cp.add(label, BorderLayout.CENTER);
}
_____________________________________________________________________________________________________Mme A. BENOMAR
320
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
321
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
322
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
323
Chapitre 6 LES EXCEPTIONS
1- INTRODUCTION
2- DEFINITION D'UNE EXCEPTION
3- UN PREMIER EXEMPLE D'UNE EXCEPTION
4- ATTRAPER UNE EXCEPTION4-1 Les blocs try et catch4-2 Le mot clé throws4-3 Le bloc finally4-4 Quelques classes d'exceptions
5- DEFINIR SA PROPRE EXCEPTION
_____________________________________________________________________________________________________Mme A. BENOMAR
324
LES EXCEPTIONS
1- Introduction
Un programme ne se déroule pas toujours comme prévu. Plusieurs cas d'erreurs peuvent venir perturber son bon déroulement : division par zéro, dépassement des bornes d'un tableau, fichier inexistant,…
Dans tout programme, le traitement des erreurs représente une tâche importante, souvent négligée par les programmeurs.
Java dispose d'un mécanisme très efficace appelé le mécanisme d'exceptions pour obliger les programmeurs à prendre en compte les erreurs. Ce mécanisme admet deux principes fondamentaux :
_____________________________________________________________________________________________________Mme A. BENOMAR
325
LES EXCEPTIONS
1- Introduction
- La plus grande partie des erreurs qui pourraient
survenir doit être détectée par le compilateur, de façon à
limiter autant que possible les occasions de les voir se
produire pendant l'utilisation des programmes
- Le traitement des erreurs doit être séparé du reste
du code, de façon que celui-ci reste lisible.
_____________________________________________________________________________________________________Mme A. BENOMAR
326
LES EXCEPTIONS
2- Définition d’une exception
Une exception est une interruption de l'exécution d'un programme suite à une erreur. Par exemple, une division par zéro 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 généralement conduire à l'arrêt du programme)
ou
java.lang.Exception (pour des événements inattendus, qui seront souvent traités de sorte qu'elle ne provoquent pas l'arrêt du programme).
_____________________________________________________________________________________________________Mme A. BENOMAR
327
LES EXCEPTIONS
3- Un premier exemple d' une exception
Avant de voir comment traiter les exceptions , regardons à quoi elles correspondent en prenant un exemple très simple de division par zéro :
class DivParZero{ public static void main(String[] argv) {
int zero = 0 ; zero = 2000 / zero ; }}
_____________________________________________________________________________________________________Mme A. BENOMAR
328
LES EXCEPTIONS
3- Un premier exemple d' une exception
A l'exécution 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é levée : java.lang.ArithmeticException
- Un message précisant la cause de cette erreur : / by zero
- L'indication de la classe, de la méthode et du numéro de ligne où s'est
produite cette exception : at DivParZero.main(DivParZero.java:6)
_____________________________________________________________________________________________________Mme A. BENOMAR
329
LES EXCEPTIONS
3- Un premier exemple d' une exception
Si on désire ne pas avoir d'interruptions dans notre programme, on gérer l'erreur en utilisant les blocs try et catch de la façon suivante :
class DivParZero{public static void main(String[] argv){ int zero = 0 ; try { zero = 2000/zero ; } catch (ArithmeticException e) { System.out.println("Une exception arithmétique a été levée"); System.out.println("Message : "+e.getMessage()); } }A l'exécution, on obtient :Une exception arithmétique a été levée Message : / by zero
_____________________________________________________________________________________________________Mme A. BENOMAR
330
LES EXCEPTIONS
4- Attraper une exception
Pour pouvoir attraper une exception ( ne pas la laisser
arrêter le programme), il faut entourer le code susceptible de la
lancer dans un bloc précédé de l'instruction try. L'exception
lancée dans le bloc peut être attrapée par une sorte de méthode
d'un type particulier désignée par le mot clé catch et prenant
pour paramètre un objet du type de l'exception lancée ou du
type d'une classe parente.
_____________________________________________________________________________________________________Mme A. BENOMAR
331
LES EXCEPTIONS
4-1 Les blocs try et catchSi on décide 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 spécifier un bloc de code sur le quel on s'attend qu'une exception soit levée ( 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 à spécifier le code à exécuter pour une exception donnée. Il faut faire suivre le mot catch d'une parenthèse ouvrante, d'un type exception (une classe), du nom qu'on lui donne , d'une parenthèse fermante et du code associé placé entre accolade
_____________________________________________________________________________________________________Mme A. BENOMAR
332
LES EXCEPTIONS
4-1 Les blocs try et catch
Donc les blocs try et catch sont utilisés comme suit :try{// zone contenant des instructions pouvant générer 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
333
LES EXCEPTIONS
4-1 Les blocs try et catchUn bloc try peut être suivi de plusieurs blocs catch chacun
spécifiant un type d'exception différent :try{
opération _dangereuse1;opération_dangeureuse2;opération_dangeureuse3;
catch (Exception1 e1){}catch (Exception2 e2){}catch (Exception3 e3){}
_____________________________________________________________________________________________________Mme A. BENOMAR
334
LES EXCEPTIONS
4-2 Mécanisme de lancement d'une exceptionOn suppose qu'une instruction i d'une méthode de nom
uneMethode génère une erreur (ou lance une une exception) :
* Si l'instruction i se trouve dans un bloc de uneMethode précédé
du mot réservé try, et suivi d'un bloc précédé du mot réservé catch
assorti d'un argument de la classe ou d'une super-classe de l'exception
lancée. Alors :
** les instructions qui suivent le lancement de l'exception et
intérieures au bloc try sont ignorées
** les instructions du bloc catch sont effectuées
** Le programme reprend normalement avec l'instruction qui suit
le bloc catch.
_____________________________________________________________________________________________________Mme A. BENOMAR
335
LES EXCEPTIONS
4-2 Mécanisme de lancement d'une exception* Si l'instruction i n'est pas située dans un bloc try ,
Alors :
** Si uneMethode est la méthode main, le programme se termine et
l'exception n'a pas été attrapée.
** Sinon, on se retrouve dans la méthode qui a appelée
uneMethode, au niveau de l'instruction j qui a fait appel à uneMethode.
L'instruction j lance à son tour l'exception.
Si une exception est lancée et pas attrapée, et donc qu'elle
provoque la terminaison du programme, la pile des méthodes
traversées par l'exception est indiquée à l'utilisateur. On dit qu'il y’a
propagation de l'exception
_____________________________________________________________________________________________________Mme A. BENOMAR
336
LES EXCEPTIONSExemple : Calcul d'une moyenne (entière) de notes entières envoyées en
arguments par la ligne de commande .Les arguments non entiers doivent être ignorés et signalés à 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 entière");} } return (somme/nbNotes); }
_____________________________________________________________________________________________________Mme A. BENOMAR
337
LES EXCEPTIONS
public static void main(String[] argv) { System.out.println("La moyenne
est"+moyenne(argv)); }}A l'exécution : java ExceptionCatch 12 a 15La 2 ème note n'est pas entière La moyenne est 13
Si on donne en exécution : java ExceptionCatch 12.5 dLa 1 ème note n'est pas entière La 2 ème note n'est pas entière Exception in thread "main" java.lang.ArithmeticException: / by zero)at ExceptionCatch.moyenne(Compiled Code)at
ExceptionCatch.main(ExceptionCatch.java:23La division par zéro n'est pas attrapée
_____________________________________________________________________________________________________Mme A. BENOMAR
338
LES EXCEPTIONS
4-3 Le mot clé throws
Une méthode susceptible de lancer une exception sans l'attraper
(c'est-à-dire contenant une instruction susceptible de générer une erreur
sans que celle-ci soit traitée à l'intérieur de la méthode) doit l'indiquer dans
son en-tête par le mot clé throws.
Ce mot clé permet d'avertir le système qu'une certaine catégorie
d'exceptions ne seront pas traitées.
Dans la déclaration d'une méthode, throws permet de déclarer la
liste des classes d'exceptions que la méthode est susceptible de
déclencher :
Syntaxe :
Entête méthode throws ClasseException
_____________________________________________________________________________________________________Mme A. BENOMAR
339
LES EXCEPTIONS
4-3 Le mot clé throwsExemple :
void fonction() throws IOException
La méthode fonction est susceptible de lancer des exceptions de type entrée/sortie
Remarque : Il est obligatoire d'indiquer par le mot clé throws les
exceptions susceptibles d'être lancées et non attrapées (sauf pour les
exceptions les plus courantes de l'API). Sinon il y 'aura erreur de
compilation
_____________________________________________________________________________________________________Mme A. BENOMAR
340
LES EXCEPTIONS
4-4 Bloc FinallyUn bloc finally est un bloc d'instructions précédé du mot clé
finally. Ce bloc sera toujours exécuté après le traitement d'exception. Il est en général utilisé pour fermer des fichiers, libérer des ressources,
Un bloc finally suit Un bloc try ou un bloc catchExemple 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
341
LES EXCEPTIONS
4-4 Bloc Finally finally { System.out.println("donnée traitée :"+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'exécution de : java UtiliseFinally 20 xy On aura : donnée traitée : 20
donnée traitée : xyErreur sur vos entiers
_____________________________________________________________________________________________________Mme A. BENOMAR
342
LES EXCEPTIONS
4-5 Quelques classes d'exceptions
Exception Type d'exception
IOException Entrée SortieExemples : lecture sur un fichier inexistant
ArithméticException ArithmétiqueExemple : Division par zéro
ArrayIndexOutOfBoundsException
Dépassement des bornes d'un tableau
NumberFormatException Format du nombre n'est pas respectée Exemple : un int représentée en float
OutOfMemoryException Dépassement de mémoire
_____________________________________________________________________________________________________Mme A. BENOMAR
343
LES EXCEPTIONS
5- Définir sa propre exception
Si on veut pouvoir signaler un événement exceptionnel d'un
type non prévu par l'API, il faut étendre la classe java.lang.Exception.
En général la classe étendue ne contient qu'un ou plusieurs
constructeurs et éventuellement une redéfinition de la méthode
toString
Lors du lancement de l'exception, (à l'aide du mot réservé throw) ,
on crée une instance de la classe définie
_____________________________________________________________________________________________________Mme A. BENOMAR
344
LES EXCEPTIONS
5- Définir sa propre exceptionExemple :
class ExceptionRien extends Exception{ public String toString()
{ return "Aucune note n'est valide " ; }}//Cette classe peut être utilisée 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++; }