La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires.

Présentations similaires


Présentation au sujet: "1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires."— Transcription de la présentation:

1 1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires aux Grandes Ecoles Rabat, 29 Octobre-2 Novembre 2009 Mme A. BENOMAR Professeur à l Institut National des Postes et T é l é communications

2 _____________________________________________________________________________________________________ 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

3 _____________________________________________________________________________________________________ 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

4 _____________________________________________________________________________________________________ Mme A. BENOMAR 4 Chapitre 1 INTRODUCTION A JAVA 1- CARACTERISTIQUES DE BASES DE LA P.O.O Notion de classe et dobjet Objet = Données + Traitements La classe : Abstraction dun ensemble dobjets qui ont les mêmes caractéristiques ( attributs) et les mêmes comportements ( méthodes) objet est une instance dune classe. Exemple : Une classe de nom Individu Attributs : numeroCin, nom, prenom, dateNaissance, adresse Méthodes : changeAdresse(), calculSalaire(),dateRetraite().. Objets : Mohammed, Nadia, …

5 _____________________________________________________________________________________________________ Mme A. BENOMAR 5 1 – 2 Lencapsulation des données : - Les données sont protégées à lintérieur de chaque objet. - Les données (publiques,secrètes) 1- 3 LHéritage Une classe dérivée hérite des propriétés dune classe de base. - Economie de code - Amélioration de la fiabilité - Amélioration de la lisibilité Exemple : Un rectangle peut hériter dun polygone 1- 4 Le Polymorphisme Le polymorphisme permet la redéfinition dune méthode Le Multithreading THREADS : processus qui sexécutent simultanément à lintérieur dun unique programme

6 _____________________________________________________________________________________________________ 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 dhéritage multiple) - JAVA autorise le multitâche (multithreading)-

7 _____________________________________________________________________________________________________ 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

8 _____________________________________________________________________________________________________ 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 ladapter aux technologies des réseaux informatiques tels que INTERNET. Cest la naissance de JAVA

9 _____________________________________________________________________________________________________ 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)

10 _____________________________________________________________________________________________________ Mme A. BENOMAR ENVIRONNEMENT DE JAVA 3- 1 Java Developers 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 Le kit java contient : * le compilateur (javac), * linterpréteur (java), * lappletviewer ou inspecteur dapplet - Le JDK contient par ailleurs lAPI de java (Application Programmers Interface) qui correspond à la bibliothèque de java - Le kit JDK ne comporte pas déditeur.

11 _____________________________________________________________________________________________________ Mme A. BENOMAR ENVIRONNEMENT DE JAVA 3- 2 Versions de Java Java é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 :

12 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 version Java assure une compatibilité binaire ascendante (les programmes compilés avec une ancienne version peuvent s'exécuter avec une plate-forme plus récente).

13 _____________________________________________________________________________________________________ Mme A. BENOMAR ENVIRONNEMENT DE JAVA 3-3 Editions de la plate-forme Java La 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 dapplications dentreprise. Elle contient les classes J2SE plus dautres classes pour le développement dapplications dentreprise. Java 2 Micro Edition (J2ME). pour les produits dé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) pour développer des applications et un environnement dexécution Java 2 (JRE) pour les exécuter.

14 _____________________________________________________________________________________________________ Mme A. BENOMAR Le code source - Une application java est généralement composée de plusieurs fichiers source. Les fichiers source de java ont lextension.java. - Un fichier.java peut contenir plusieurs classes. - Le nom du fichier source java doit être le même que celui de la classe publique que ce fichier renferme (Un fichier java ne peut pas contenir plus dune classe publique) 3- 5La compilation * Le byte code - La compilation va transformer le code source en J-code ou byte- code Java indépendant de toute plate forme - La commande qui permet la compilation est la suivante : Javac nom_fich.java Création dun ou plusieurs fichiers.class.

15 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 linterpréteur de java Java nom_fich Quelques environnements dutilisation de java - PCGRASP, JGRASP - JBUILDER - ECLIPSE - NETBEANS -….

16 _____________________________________________________________________________________________________ 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

17 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 Utilisation des classes dun paquetage On 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 liste import liste.A ; // importer la classe A du package liste

18 _____________________________________________________________________________________________________ Mme A. BENOMAR 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.Graphics java.awt.Color

19 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dutilitaires (Random, Date,...) 19

20 _____________________________________________________________________________________________________ Mme A. BENOMAR LES CLASSES JAVA Une classe définit des attributs et des méthodes Architecture d'une classe JAVA Une classe se compose de deux parties : * len-tête * le corps

21 _____________________________________________________________________________________________________ Mme A. BENOMAR LES CLASSES JAVA Architecture d'une classe JAVA Entête dune classe [modificateur] class [extends ] [implements ] [ ] : optionnel : obligatoire gras : mot clé Corps dune classe Le corps de la classe donne sa définition. Il contient les déclarations des attributs et des méthodes.

22 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 nest 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 lhéritage

23 _____________________________________________________________________________________________________ Mme A. BENOMAR Conventions décriture en JAVA TypeConventionExemple Nom dune classe Débute par une majuscule class Polygone Nom dun objet Débute par une minuscule Peut sétaler sur plusieurs mots Chaque mot commence par une majuscule sauf le premier premierObjet Nom de méthode Débute par une minuscule Sauf pour le constructeur void ecrire() ConstanteSécrit en majusculesA_CONSTANT

24 _____________________________________________________________________________________________________ Mme A. BENOMAR 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

25 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 à lexécution : bravo

26 _____________________________________________________________________________________________________ Mme A. BENOMAR UTILISATION DES CLASSES Pour utiliser une classe, elle doit être instanciée. Il y aura alors création dun objet. Mais avant de créer un objet, il faut le déclarer Déclaration dun objet NomClasseobjet ; Cette instruction déclare un objet de la classe NomClasse mais ne le crée pas Création dun objet Objet = new NomClasse( ) ; La déclaration et la création dun objet peuvent être regroupées : NomClasseobjet= 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

27 _____________________________________________________________________________________________________ Mme A. BENOMAR Exemple dutilisation dobjet Il sagit décrire une application en java qui permet de calculer le salaire hebdomadaire dun employé en fonction du taux horaire et du nombre dheures public class Employe { String nom; // le nom de l'employé static float taux_h=50; // le taux horaire en dirhams int nb_h; float salaireh () // nb_h : nombre dheures { float s; s=(taux_h*nb_h); return s; }

28 _____________________________________________________________________________________________________ Mme A. BENOMAR Exemple dutilisation dobjet public 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 lemployé 1 emp1.nb_h= 35; // le nombre dheures de lemployé 1 emp2.nom="Nadia"; // le nom de lemployé 2 emp2.nb_h=38 ; // le nombre dheures de lemployé 2 s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println(" Le salaire de "+ emp1.nom+" est"+s1+" dh"); System.out.println(" Le salaire de "+ emp2.nom+" est"+s2+" dh"); } // fin de main } // fin de la classe A léxecution, on aura : Le salaire de Mohammed est dh Le salaire de Nadia est dh

29 _____________________________________________________________________________________________________ Mme A. BENOMAR LES CONSTRUCTEURS Définition - Le constructeur est une méthode qui est effectuée au moment de la création dun 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 lopérateur new monObjet = new Constructeur(arguments ) ; 29

30 _____________________________________________________________________________________________________ Mme A. BENOMAR 30 Exemple dutilisation de constructeur public class Employe_Constructeur { String nom; static float taux_h=50; int nb_h; Employe_Constructeur(String identite) // Constructeur { nom=identite; } float salaireh () // nb_h : nombre dheures { float s; s=(taux_h*nb_h); return s; }

31 _____________________________________________________________________________________________________ Mme A. BENOMAR 31 Exemple dutilisation de constructeur public static void main(String[] arg) { float s1,s2; Employe_Constructeur emp1,emp2; emp1=new Employe_Constructeur (" Mohammed"); emp2=new Employe_Constructeur ("Nadia"); /* Dès la création dun objet on doit spécifier la valeur du nom*/ emp1.nb_h= 35; // le nombre dheures de lemployé 1 emp2.nb_h=38 ; // le nombre dheures de lemployé 2 s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println("Le salaire de "+ emp1.nom+" est"+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est"+s2+" dh"); } // fin de main } // fin de la classe

32 _____________________________________________________________________________________________________ Mme A. BENOMAR 32 7 – 2 La variable this La variable this sert à référencer dans une méthode linstance de lobjet en cours dutilisation. Son emploi peut savé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 }

33 _____________________________________________________________________________________________________ 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

34 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dutilisation 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; }

35 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 classe Après compilation du fichier Arguments_main.java, il faut lexécuter en donnant 2 chaînes de caractères pour les noms des 2 employés. Exemple dexécution : java Arguments_main Ali Sanae

36 _____________________________________________________________________________________________________ Mme A. BENOMAR UTILISATION DES ARGUMENTS DE MAIN Exemple 2 : Utilisation dun nombre entier comme argument Il sagit de considérer le nombre dheures travaillées comme argument de main aussi pour pouvoir donner leurs valeurs à lexécution public class Arguments_entiers { String nom; static float taux_h=50; int nb_h; float salaireh () { float s; s=(taux_h*nb_h); return s; }

37 _____________________________________________________________________________________________________ Mme A. BENOMAR UTILISATION DES ARGUMENTS DE MAIN public static void main(String[] arg) { float s1,s2; Arguments_entiers emp1,emp2; emp1=new Arguments_entiers(); emp2=new Arguments_entiers(); emp1.nom=arg[0]; emp1.nb_h= Integer.parseInt(arg[1]); emp2.nom=arg[2]; emp2.nb_h= Integer.parseInt(arg[3]); s1=emp1.salaireh(); s2=emp2.salaireh(); System.out.println("Le salaire de "+ emp1.nom+" est "+s1+" dh"); System.out.println("Le salaire de "+ emp2.nom+" est "+s2+" dh"); } // fin de main } // fin de la classe il faut exécuter cette classe en donnant 2 chaînes de caractères pour les noms des 2 employés et leurs nombres dheures travaillées Exemple dexécution : java Arguments_entier Ali 30 Sanae 28

38 _____________________________________________________________________________________________________ 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

39 _____________________________________________________________________________________________________ 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

40 _____________________________________________________________________________________________________ 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 : booleanDestiné à une valeur logique (true, false) byteOctet signé 8 bits (-128 et 127) shortEntier court signé 16 bits ( – 32767) charCaractère 16 bits

41 _____________________________________________________________________________________________________ Mme A. BENOMAR 41 Chapitre 2 TECHNIQUES DE BASE DE LA PROGRAMMATION JAVA 2– Types élémentaires en java int Entier signé 32 bits floatVirgule flottante 32 bits double Double précision 64 bits longEntier long 64 bits

42 _____________________________________________________________________________________________________ Mme A. BENOMAR 42 Java dispose également des classes suivantes pour gérer ces primitives : Classe Primitive ______________________________ Character char Byte byte Short short Integer int Long long Float float Double double Boolean boolean

43 _____________________________________________________________________________________________________ Mme A. BENOMAR LES PROPRIETES DES ATTRIBUTS 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 dune même classe ont les mêmes attributs, mais chaque objet associe à ces attributs des valeurs qui lui sont propres. Avant dutiliser un attribut, il doit être déclarée comme suit : type_elementaire identificateur

44 _____________________________________________________________________________________________________ Mme A. BENOMAR LES PROPRIETES DES ATTRIBUTS Déclaration ModificateurDé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

45 _____________________________________________________________________________________________________ Mme A. BENOMAR Identificateurs A 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

46 _____________________________________________________________________________________________________ Mme A. BENOMAR Mots clé de java Les mots suivants sont les mots clé de java : abstractassertbooleanbreak byte casecatchchar class continue default do doubleelse enum extendsfalse finalfinally float for if implements import instanceof int interfacelongnative new nullpackage privateprotected public returnshort static super switch synchronized this throwthrows transient true tryvoidvolatile while

47 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 quun attribut dinstance existe lors de linstanciation de la classe Pour utiliser un attribut ou une méthode statique, on écrit : NomClasse.nomAttributStatique Cependant JAVA permet également dutiliser : nomObjet.nomAttributStatique où nomObjet est une instanciation de la classe qui contient lattribut ou la méthode statique

48 _____________________________________________________________________________________________________ Mme A. BENOMAR 48 Exemple1 : attribut statique class Statique { int nons; static int s; } public class UtiliseStatic { public static void main (String[] arg) { Statique.s=10; Statique obj1= new Statique(); obj1.nons=20; Statique obj2= new Statique(); obj2.nons=30; obj2.s=15;//Pour tous,les objets s=15 System.out.println(Statique.s);//15 System.out.println(obj1.s);//15 System.out.println(obj1.nons);//20 System.out.println(obj2.nons);//30 }

49 _____________________________________________________________________________________________________ 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); }

50 _____________________________________________________________________________________________________ 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();

51 _____________________________________________________________________________________________________ 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 : Eleve 2 Nom : Amal Moyenne : La moyenne de la classe est :

52 _____________________________________________________________________________________________________ Mme A. BENOMAR Les opérateurs de java * Multiplication / division % modulo + addition - soustraction = affectation == identité != différent de && et logique || ou logique ++ incrémentation += - = *= /=

53 _____________________________________________________________________________________________________ Mme A. BENOMAR – Les initialiseurs Les initialiseurs dattributs permettent daffecter à un attribut une valeur initiale. Si on déclare un attribut non static dans une méthode, cet attribut na pas de valeur. Toute tentative dy faire référence produit une erreur de compilation. En revanche, sil sagit dune variable globale, càd si cette déclaration se trouve en dehors de toute méthode, JAVA linitialise automatiquement avec une valeur par défaut.

54 _____________________________________________________________________________________________________ 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(); }

55 _____________________________________________________________________________________________________ Mme A. BENOMAR 55 Pour des initialisations plus complexes, on peut utiliser un bloc placé à lextérieur de toute méthode ou constructeur Par exemple,float e { if (b != 0 ) { e = (float) a /b ; } }

56 _____________________________________________________________________________________________________ Mme A. BENOMAR Les attributs constants - Une constante est un attribut qui ne peut plus être modifié une fois quil 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.

57 _____________________________________________________________________________________________________ Mme A. BENOMAR 57 Exemple de définition et dutilisation de constantes class Constantes { final int C ; /* déclare une constante dinstance 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 dinstance C // C= D ; interdit car C doit être définit une seule fois // D = 10 ; interdit car D est une constante de classe }

58 _____________________________________________________________________________________________________ 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 à lexécution : 2 100

59 _____________________________________________________________________________________________________ Mme A. BENOMAR Les structures de contrôle Les structures de contrôle de java sont similaires à celles de C Les instructions conditionnelles a – Linstruction if if(expression) InstructionSiVrai ; else InstructionSiFaux b- Lopérateur ? condition?siVrai: siFaux Exemple :int a, b ; int min = a

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

61 _____________________________________________________________________________________________________ Mme A. BENOMAR 61 Les instructions de répétition a – Linstruction while while (condition) instruction ; b – Linstruction do do instr ; while (condition) c – Linstruction for for ( initialisation, ; test ; incrementation) La boucle for en java autorise plusieurs expressions 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--)

62 _____________________________________________________________________________________________________ Mme A. BENOMAR Les propriétés des méthodes Signature dune méthode les méthodes sont les fonctions quon peut appliquer aux objets. Elles permettent de changer létat des objets ou de calculer des valeurs Plusieurs méthodes dune 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.

63 _____________________________________________________________________________________________________ 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

64 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dutiliser : nomObjet.nomMethodeStatique(arguments) nomObjet étant une instanciation de la classe qui contient lattribut ou la méthode statique

65 _____________________________________________________________________________________________________ Mme A. BENOMAR – La surcharge Si plusieurs méthodes possèdent le même nom mais différent par lensemble des types de leurs arguments, ou par lordre des types de leurs arguments, on dit quil y a surcharge. Lorsquune méthode surchargée est invoquée, la bonne méthode est choisie pour quil y ait correspondance sur les paramètres de lappel et les arguments de la méthode

66 _____________________________________________________________________________________________________ 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 ;} }

67 _____________________________________________________________________________________________________ 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)) ; }

68 _____________________________________________________________________________________________________ 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

69 _____________________________________________________________________________________________________ Mme A. BENOMAR 69 6 – Les tableaux Les 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 dun 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

70 _____________________________________________________________________________________________________ Mme A. BENOMAR 70 Exemple : class TableauA { public static void main(String[] arg) { int[] tableau ; tableau = new int[2]; tableau[0]=-5; tableau[1]= 8 for(int i=0 ;i<2 ;i++) System.out.println(tableau[i]); } Autre 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}

71 _____________________________________________________________________________________________________ Mme A. BENOMAR Longueur dun 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 yaura une erreur à lexécution. Exemple : for (int i= 0 ; i <= Tableau.length; i++)générera une erreur

72 _____________________________________________________________________________________________________ Mme A. BENOMAR Tableau dobjets Avec java, on peut aussi manipuler des tableaux dobjets Exemple: class TableauD { public static void main(String[] argv) { Integer tableau[] = new Integer[4] ; //un tableau de 4 objets int somme = 0 ; for (int i=0 ; i

73 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dimensions La 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

74 _____________________________________________________________________________________________________ Mme A. BENOMAR 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

75 _____________________________________________________________________________________________________ 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); } }

76 _____________________________________________________________________________________________________ Mme A. BENOMAR LES CHAINES DE CARACTERES En 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 dune série de caractères entre doubles apostrophes. - Les chaînes de caractères (String) peuvent se concaténer à laide de lopérateur +.

77 _____________________________________________________________________________________________________ Mme A. BENOMAR LES CHAINES DE CARACTERES - Les Constructeurs de java.lang.String

78 _____________________________________________________________________________________________________ Mme A. BENOMAR 78 int compareTo(Object o) Compare une chaîne de caractère à un autre objet. Renvoie une valeur 0 int compareTo(String anotherString) Compare une chaîne de caractère à un autre objet. Renvoie une valeur 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. 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

79 _____________________________________________________________________________________________________ Mme A. BENOMAR 79 char charAt(int i) Retourne le caractère à lindice 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 jusquau caractère dindice 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.

80 _____________________________________________________________________________________________________ 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. Sil ny a pas de remplacement, la chaîne elle-même est retournée. - Les Conversions

81 _____________________________________________________________________________________________________ Mme A. BENOMAR 81 int indexOf(int ch)Retourne lindice de la première occurrence du caractère int indexOf(int ch, int fromIndex)Retourne lindice de la première occurrence du caractère à partir de fromIndex int indexOf(String str)Retourne lindice de la première occurrence de la chaîne int indexOf(String str, int fromIndex)Retourne lindice de la première occurrence de la chaîne à partir de fromIndex int lastIndexOf(int ch)Retourne lindice de la dernière occurrence du caractère int lastIndexOf(int ch, int fromIndex)Retourne lindice de la dernière occurrence du caractère à partir de fromIndex int lastIndexOf(String str)Retourne lindice de la dernière occurrence de la chaîne int lastIndexOf(String str, int fromIndex)Retourne lindice de la dernière occurrence de la chaîne à partir de fromIndex - La recherche dans une cha î ne de caract è re

82 _____________________________________________________________________________________________________ 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

83 _____________________________________________________________________________________________________ Mme A. BENOMAR Les chaînes de caractères de type StringBuffer Pour une utilisation plus évoluée dune 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

84 _____________________________________________________________________________________________________ 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 max int length() la longueur de la chaîne de caractères void setLength (int n)la longueur de la chaîne est n ; les caractères éventuellement ajoutés ont une valeur indéterminée.

85 _____________________________________________________________________________________________________ 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

86 _____________________________________________________________________________________________________ Mme A. BENOMAR 86 - Caractère et sous-chaîne. char charAt(int i) Retourne le caractère à lindice 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 à lindice index

87 _____________________________________________________________________________________________________ Mme A. BENOMAR Les chaînes de caractères de type StringBuffer Exemple : utilisation de la longueur et de la capacit é public class Chaine2 {static StringBuffer stb1,stb2; public static void main(String[ ] arg) { stb1=new StringBuffer(); stb2=new StringBuffer(10); System.out.println("stb1 a pour longueur "+stb1.length()); //0 System.out.println("stb1 a pour capacit é "+stb1.capacity()); //16 System.out.println("stb2 a pour longueur "+stb2.length()); //0 System.out.println("stb2 a pour capacit é "+stb2.capacity()); //10 stb1=new StringBuffer("Chaine"); System.out.println("stb1 a pour longueur "+stb1.length()); //6 System.out.println(stb1+ " pour capacit é "+stb1.capacity()); //22=16+6 stb1.append(" StringBuffer"); System.out.println(stb1+" a pour longueur "+stb1.length());//19 System.out.println(stb1+" a pour capacit é "+stb1.capacity()); //22 stb1.setLength(3); System.out.println(stb1+" a pour longueur "+stb1.length()); //3 System.out.println(stb1+" a pour capacit é "+stb1.capacity());//22 } }

88 _____________________________________________________________________________________________________ Mme A. BENOMAR 88 9 – OPERATIONS SUR LES OBJETS 9 – 1 Laffectation = ObjetA = ObjetB ObjetA désigne le même objet que ObjetB, cest la copie de référence Toute modification effectué sur lobjet référencée par objetA sera répercuté sur lobjet 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 */ }

89 _____________________________________________________________________________________________________ Mme A. BENOMAR 89 9 –2 Egalité entre objets Si obj1 et obj2 sont deux références dobjets de la même classe. (obj1== obj2) est vraie si ces deux références obj1 et obj2 désignent le même objet Exemple : class C1 { } public class Egalite { public static void main( String[] arg) { C1 obj1,obj2,obj3; obj1=new C1(); obj2=new C1(); obj3=obj1; System.out.println(obj1==obj2); // false System.out.println(obj1==obj3); //true }

90 _____________________________________________________________________________________________________ Mme A. BENOMAR 90 9– 3 Lobjet null Lobjet null nappartient pas à une classe, mais il peut être utilisé en lieu et place dun objet de toute classe, public class Case {int val ; Case (int val ) // Constructeur de la classe Case { this.val=val ;} boolean estEgal (Case c) /* 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 ) */

91 _____________________________________________________________________________________________________ Mme A. BENOMAR 91 Chapitre 3 HERITAGE ET INTERFACES EN JAVA 1 – GENERALITES SUR LHERITAGE EN JAVA 2 – LA CLASSE java.lang.Object 3 – MASQUAGE DES ATTRIBUTS ET REDEFINITION DES METHODES 4 – CASTING OU TRANSTYPAGE 5 – LES INTERFACES 6 – LES CLASSES ABSTRAITES

92 _____________________________________________________________________________________________________ Mme A. BENOMAR 92 Chapitre 3 HERITAGE ET INTERFACES EN JAVA 1 – GENERALITES SUR LHERITAGE EN JAVA 1 – 1 Définition de lhéritage Lhéritage est lun 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 dune classe A, alors la classe B contient implicitement lensemble des attributs non privés de A et peut invoquer toutes les méthodes non privées de la classe A.

93 _____________________________________________________________________________________________________ Mme A. BENOMAR – Déclaration de lhéritage En java, pour déclarer lhé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

94 _____________________________________________________________________________________________________ Mme A. BENOMAR – Propriétés de lhéritage -En java, lhéritage est simple, toute classe ne peut hériter que dune et une seule classe. Si une classe nhérite daucune 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 dune référence à une classe dérivée, linverse doit faire lobjet dune 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; // possible b= a; // faux b= (B) a; // peut être possible

95 _____________________________________________________________________________________________________ Mme A. BENOMAR – Propriétés de lhé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) } }

96 _____________________________________________________________________________________________________ Mme A. BENOMAR – Propriétés de lhéritage -Si la déclaration dune 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 denfants - Si le constructeur par défaut dune 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.

97 _____________________________________________________________________________________________________ Mme A. BENOMAR Opérateurs : super et instanceof - Lopérateur super : Pour faire référence à la classe parente (super classe), il suffit dutiliser le mot clé super. Ce mot permet dinvoquer 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 - Lopérateur instanceof : Lopérateur instanceof permet de savoir à quelle classe appartient une instance :

98 _____________________________________________________________________________________________________ Mme A. BENOMAR 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) } }

99 _____________________________________________________________________________________________________ Mme A. BENOMAR Un exemple de lhé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 Enseigantt Avocat Commerçant Primaire Chomeur …. Eleve

100 _____________________________________________________________________________________________________ Mme A. BENOMAR 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();} }

101 _____________________________________________________________________________________________________ Mme A. BENOMAR 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; } }

102 _____________________________________________________________________________________________________ Mme A. BENOMAR 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);} }

103 _____________________________________________________________________________________________________ Mme A. BENOMAR 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);

104 _____________________________________________________________________________________________________ Mme A. BENOMAR Exemple for(int i=0;i

105 _____________________________________________________________________________________________________ Mme A. BENOMAR LA CLASSE java.lang.Object La classe dentê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();

106 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 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

107 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 :

108 _____________________________________________________________________________________________________ Mme A. BENOMAR 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); }

109 _____________________________________________________________________________________________________ Mme A. BENOMAR 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

110 _____________________________________________________________________________________________________ Mme A. BENOMAR LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)Object 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); }

111 _____________________________________________________________________________________________________ Mme A. BENOMAR LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)Object 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; }

112 _____________________________________________________________________________________________________ Mme A. BENOMAR LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)Object 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 lexécution : les livres référencés par l1 et l2 sont différents Remarque : Pour avoir un comportement plus conforme à ce que l'on attend pour la méthode equals il faudrait redéfinir celle-ci

113 _____________________________________________________________________________________________________ Mme A. BENOMAR LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)Object 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); }

114 _____________________________________________________________________________________________________ Mme A. BENOMAR LA CLASSE java.lang.Object 2-3. La méthode public boolean equals(Object obj)Object 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 lexécution : les livres référencés par l1 et l2 sont identiques

115 _____________________________________________________________________________________________________ Mme A. BENOMAR 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

116 _____________________________________________________________________________________________________ Mme A. BENOMAR Masquage des attributs et redéfinition des méthodes - On dit quun attribut dune classe masque un attribut dune super classe sil a le même nom quun attribut de la super classe - On dit quune classe redéfinit une méthode dune super classe si elle définie une méthode ayant même nom, même suite de types darguments et même valeur de retour quune méthode de la super classe Il ya une différence dans la façon dont le masquage dattributs et la redéfinition des méthodes sont traitées en java

117 _____________________________________________________________________________________________________ Mme A. BENOMAR Masquage des attributs et redéfinition des méthodes Supposons quune classe A possède un attribut attr et une méthode meth et quune 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 dun objet b de la classe B a = b ; // Tout objet de B est objet de A Alors : b.attr est lattribut attr de la classe B a.attr est lattribut attr de la classe A Par contre : b.meth est la méthode redéfinie dans B a.meth est la méthode redéfinie dans B

118 _____________________________________________________________________________________________________ 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(); } }

119 _____________________________________________________________________________________________________ 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 */

120 _____________________________________________________________________________________________________ Mme A. BENOMAR casting ou transtypage Le casting (mot anglais qui signifie moulage ), également appelé transtypage, consiste à effectuer une conversion dun type vers un autre type. Le casting peut être effectué dans deux conditions 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.

121 _____________________________________________________________________________________________________ Mme A. BENOMAR 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

122 _____________________________________________________________________________________________________ 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.5 f2 est égal à :12.5

123 _____________________________________________________________________________________________________ Mme A. BENOMAR 123 Casting des objets Il est possible dutiliser le casting dobjets. 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 dun objet de type Chien Animal animal = new Chien (); chien = (Chien)animal; System.out.println(" Ce chien mesure : "+ chien.taille +" cm");

124 _____________________________________________________________________________________________________ Mme A. BENOMAR 124 Casting des objets animal = new Animal(); // création dun objet de type Animal // chien = (Chien)animal; //erreur dexecution System.out.println(" Tout animal ne peut pas être converti en chien"); } A lexécution : Ce chien mesure : 80 cm Tout animal ne peut pas être converti en chien

125 _____________________________________________________________________________________________________ Mme A. BENOMAR LES INTERFACES 5-1 – Définition dune 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 linterface Les interfaces portent souvent des noms se terminant en able. Par exemple (Comparable,Runnable, …)

126 _____________________________________________________________________________________________________ Mme A. BENOMAR Présentation dune interface Une interface se compose de deux parties : - len-tête - le corps Entête dune interface [modificateur] interface [extends interface>] [ ] : optionnel : obligatoire gras : mot clé

127 _____________________________________________________________________________________________________ Mme A. BENOMAR 127 Remarques : - Une interface peut avoir le modificateur public. - Une interface est toujours abstract sans quil soit nécessaire de lindiquer - Elle peut être attribuée à un package. Si elle ne lest 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 nest âs nécessaire {} public interface I3 extends I1,I2 //héritage multiple {}

128 _____________________________________________________________________________________________________ Mme A. BENOMAR 128 Corps dune interface Le corps dune interface contient une liste de constantes et de prototypes de méthodes. La syntaxe dune déclaration dune 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() ; }

129 _____________________________________________________________________________________________________ Mme A. BENOMAR Utilisation dune 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 linterface I * Toutes les méthodes figurant dans linterface 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 linterface - Si une classe A implémente une interface I, les sous classes de A implémentent aussi automatiquement I

130 _____________________________________________________________________________________________________ Mme A. BENOMAR 130 Utilisation dune 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 nimporte quel objet dune classe implémentant linterface I et on pourra appliquer à cet objet une méthode déclarée dans linterface ( qui est nécessairement redéfinie dans la classe de lobjet référencée par i)

131 _____________________________________________________________________________________________________ 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(); }

132 _____________________________________________________________________________________________________ Mme A. BENOMAR Exemple dutilisation dune interface interface Demeure { void affiche_commentaire(); } class Appartement implements Demeure { public void affiche_commentaire() { System.out.println("La demeure est un joli appartement") ;} } class Villa implements Demeure { public void affiche_commentaire() { System.out.println("La demeure est une villa splendide") ;} } class Baraque implements Demeure { public void affiche_commentaire() { System.out.println("La demeure est une baraque : seul abri des pauvres") ;} }

133 _____________________________________________________________________________________________________ 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

134 _____________________________________________________________________________________________________ Mme A. BENOMAR – DEFINITION DUNE 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 na pas de définition explicite - Une classe abstraite ne peut pas être instanciée, il faut létendre pour pouvoir lutiliser

135 _____________________________________________________________________________________________________ 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"); }

136 _____________________________________________________________________________________________________ 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

137 _____________________________________________________________________________________________________ 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); } }

138 _____________________________________________________________________________________________________ Mme A. BENOMAR 138 La class EssaiForme montre quon 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(); }

139 _____________________________________________________________________________________________________ Mme A. BENOMAR 139 Chapitre 4 LES COLLECTIONS DE DONNEES INTRODUCTION 1- GENERALITES SUR LES COLLECTIONS EN JAVA 2- LINTERFACE java.util.Collection 3- LES LISTES 4- LES ENSEMBLES 5- LES MAP 6- LES CLASSES UTILITAIRES

140 _____________________________________________________________________________________________________ Mme A. BENOMAR 140 Chapitre 4 LES COLLECTIONS DE DONNEES Introduction Les 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 doutils permettant de regrouper sous forme d'un objet unique différents éléments (par exemple un ensemble de données constituant un répertoire dabonnés au téléphone).

141 _____________________________________________________________________________________________________ Mme A. BENOMAR 141 Chapitre 4 LES COLLECTIONS DE DONNEES Introduction Les 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 doutils permettant de regrouper sous forme d'un objet unique différents éléments (par exemple un ensemble de données constituant un répertoire dabonnés au téléphone).

142 _____________________________________________________________________________________________________ Mme A. BENOMAR GENERALITES SUR LES COLLECTIONS JAVA 1-1 Définition dune collection Une 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 dune façon unifiée qui met en oeuvre : - des interfaces qui permettent la manipulation des collections indépendamment de leurs représentations (linterface Collection, linterface 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(…),..)

143 _____________________________________________________________________________________________________ Mme A. BENOMAR GENERALITES SUR LES COLLECTIONS JAVA 1-2 Organisation des collections Lensemble 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 : Linterface java.util.Collection et linterface java.util.Map

144 _____________________________________________________________________________________________________ Mme A. BENOMAR GENERALITES SUR LES COLLECTIONS JAVA Le type Collection *Linterface 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 * Linterface 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. * Linterface Set représente une collection déléments dans laquelle les éléments ne peuvent pas, être dupliqués. Linterface Set met en oeuvre le concept d'ensemble. * Linterface SortedSet représente un ensemble trié

145 _____________________________________________________________________________________________________ Mme A. BENOMAR GENERALITES SUR LES COLLECTIONS JAVA 1 - 4Le type Map *Linterface Map permet de gérer des tableaux associatifs qui permettent de lier un objet clé à un autre objet valeur. Linterface 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é. * Linterface SortedMap représente un ensemble trié de couples (clé,valeur).

146 _____________________________________________________________________________________________________ Mme A. BENOMAR L'INTERFACE java.util.Collection Architecture et organisation de linterface Collection Linterface 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 Linterface java.util.Collection:

147 _____________________________________________________________________________________________________ Mme A. BENOMAR L'INTERFACE java.util.Collection 2-2 Les méthodes de l'interface Collection M é 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 lobjet donné et la collection int hashCode() Retourne la valeur de code de hashage de la collection boolean isEmpty() Retourne true si cette collection ne contient aucun élément Iterator iterator() Retourne un itérateur sur les éléments de cette collection boolean remove(Object o) Supprime lobjet 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é

148 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 lune 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.

149 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 linterface List. Les éléments dune liste sont accessibles soient par : - leur position ou indice (comme un tableau) - un itérateur 3 – 1 Linterface java.util.List Linterface java.util.List est définie sous la forme : public interface List extends Collection L'interface List étend linterface 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.

150 _____________________________________________________________________________________________________ Mme A. BENOMAR Méthodes ajoutées dans l'interface List MéthodeDescription 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 element remplace 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.

151 _____________________________________________________________________________________________________ Mme A. BENOMAR La classe java.util.Vector Son entête : public class Vector extends AbstractList implements List La 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.)..

152 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dincrémentation lorsque la capacité dun 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, cest à dire que seuls les classes du même package que la classe Vector y ont accès

153 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dincrémentation contenu dans le champ capacityIncrement est 0

154 _____________________________________________________________________________________________________ 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 }

155 _____________________________________________________________________________________________________ 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 : 0 Taille du vecteur : 5 Nombre d'éléments : 3 Capacité du vecteur : 5 Element 0 : 1 Element 1 : Mon premier vecteur Element 2 : 0.5 Nombre d'éléments : 13 Capacité du vecteur : 20 */

156 _____________________________________________________________________________________________________ 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 lexécution, on aura : Nombre d'éléments : 0 Capacité du vecteur : 5 Nombre d'éléments : 3 Capacité du vecteur : 5 Element 0 : 1 Element 1 : Mon premier vecteur Element 2 : 0.5 Nombre d'éléments : 13 Capacité du vecteur : 13*/

157 _____________________________________________________________________________________________________ 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.

158 _____________________________________________________________________________________________________ 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 }

159 _____________________________________________________________________________________________________ Mme A. BENOMAR Quelques méthodes de la classe Vector Méthodes de gestion de taille dun 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,

160 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 vecteur L'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.

161 _____________________________________________________________________________________________________ Mme A. BENOMAR Les m é thodes de suppression d é l é ments dans un vecteur La 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.

162 _____________________________________________________________________________________________________ Mme A. BENOMAR 162 Exemple : ajout et suppression déléments dans un vecteur import java.util.*; public class VecteurSupprim { public static void main(String[] args) { Vector vecteur = new Vector(); vecteur.add("lundi"); vecteur.add("mardi"); vecteur.add("mercredi"); vecteur.add("jeudi"); vecteur.add("Vendredi"); Vector v1 = new Vector(vecteur); Vector v2 = new Vector(vecteur); v1.removeAllElements(); v2.clear(); System.out.println ("La taille du vecteur (1, 2) : " + v1.size() + ", " + v2.size() ); // 0,0 System.out.println ("La capacité du vecteur (1, 2) : " + v1.capacity() + ", " + v2.capacity());// 5,5 } }

163 _____________________________________________________________________________________________________ Mme A. BENOMAR 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.

164 _____________________________________________________________________________________________________ Mme A. BENOMAR 164 Exemple import java.util.*; public class VecteurTableau { public static void main(String[] args) { Vector vecteur = new Vector(); vecteur.add("lundi"); vecteur.add("mardi"); vecteur.add("mercredi"); vecteur.add("jeudi"); vecteur.add("vendredi"); Object[] tabCh2 = new Object[10]; Object[] tabCh = vecteur.toArray(tabCh2); for(int i = 0; i < tabCh.length; i++) System.out.println (tabCh[i]); for(int i = 0; i < tabCh2.length; i++) System.out.println (tabCh2[i]); } }

165 _____________________________________________________________________________________________________ Mme A. BENOMAR 165 A lexécution lundi mardi mercredi jeudi vendredi null lundi mardi mercredi jeudi vendredi null Null Remarque : tabchar et tabchar2 ont la même taille (10) et contiennent les mêmes éléments

166 _____________________________________________________________________________________________________ Mme A. BENOMAR La classe java.util.ArrayList Un objet de la classe ArrayList est un tableau qui se redimensionne automatiquement. Il accepte tout type d'objets, null y compris. Chaque instance d'ArrayList a une capacité, qui 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 dentré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.

167 _____________________________________________________________________________________________________ Mme A. BENOMAR Les constructeurs de ArrayList Il existe 3 types de constructeurs pour la classe ArrayList : ArrayList maAList = ArrayList(); // On construit un tableau vide dune taille par défaut de 10. ArrayList maAList = ArrayList(int initialCapacity); // On initialise la taille du tableau à initialCapacity ArrayList maAList = ArrayList(Collection c); // On construit un tableau à partir dune Collection passée en argument 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

168 _____________________________________________________________________________________________________ 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);

169 _____________________________________________________________________________________________________ Mme A. BENOMAR 169 Exemple dutilisation dun 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

170 _____________________________________________________________________________________________________ Mme A. BENOMAR – LES ENSEMBLES 4-1 Linterface java.util.Set Les objets de java.util.Set sont des ensembles d'éléments uniques. En effet, contrairement à linterface 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 linterface Set est la plus utilisée. Ce type de collection garantit des performances constantes selon ce que lon ajoute, efface ou recherche.

171 _____________________________________________________________________________________________________ Mme A. BENOMAR 171 Quelques méthodes de linterface Set size(); add(Object element); addAll(Collection c); clear(); remove(Object element); removeAll(Collection c); Object retainAll(Collection c); containsAll(Collection c); contains(Object element); isEmpty(); equals(Object element);Iterator iterator();Object[] toArray(); Object[] toArray(Object[] element); - Les principales implémentations de Set sont : HashSet, TreeSet,SortedSet

172 _____________________________________________________________________________________________________ Mme A. BENOMAR La classe.HashSet Les collections HashSet organisent des éléments uniques dont lordre ditération est aléatoire. Aussi, la classe HashSet naccepte quun seul élément null. Disposant dune 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()).

173 _____________________________________________________________________________________________________ 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 à HashSet ensemble = HashSet(capacite); // initialise linstance avec une capacité initiale de valeur capacite HashSet ensemble = HashSet(float factch); // initialise linstance avec une capacité de valeur capacite et un facteur de charge de valeur factch HashSet ensemble = HashSet(Collection collection); //initialise l'instance en la remplissant dune collection Ce dernier constructeur accepte comme argument une collection destinée à initialiser la nouvelle instance. Chaque élément de la collection spécifiée sera copié au sein de l'objet HashSet créé.

174 _____________________________________________________________________________________________________ Mme A. BENOMAR 174 Les méthodes principalement utilisées sont les méthodes : dajout : 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 dailleurs le seul moyen de parcourir l'ensemble sous-jacent. Iterator valeurs = ensemble.iterator(); if (valeurs.hasNext()) { System.out.println("Elements : " + valeurs.next());}

175 _____________________________________________________________________________________________________ Mme A. BENOMAR La classe.TreeSet La 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 lutilisateur 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 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.

176 _____________________________________________________________________________________________________ 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 lobjet TreeSet instancié. La collection sera par ailleurs triée selon lordre 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 lobjet TreeSet instancié. La collection sera par ailleurs triée selon lordonnancement de lobjet 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.

177 _____________________________________________________________________________________________________ Mme A. BENOMAR Les méthodes de la classe TreeSet Un 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 : dajout (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)). LIterator est le seul moyen de parcourir l'ensemble. TreeSet(collection); Iterator valeurs = ensemble.iterator(); if(valeurs.hasNext()) { System.out.println("Elements : " + valeurs.next()); }

178 _____________________________________________________________________________________________________ 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);

179 _____________________________________________________________________________________________________ Mme A. BENOMAR 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.

180 _____________________________________________________________________________________________________ Mme A. BENOMAR Linterface java.util.Map Les 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 dune clé doit exister dans un objet implémentant l'interface Map ;elle ne peut donc correspondre quà une seule valeur, elle est unique.

181 _____________________________________________________________________________________________________ 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 puisquelles assurent la cohérence de la collection lors de lutilisation 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 lensemble 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 lancienne et ne rajoutera pas une nouvelle paire clé/valeur.

182 _____________________________________________________________________________________________________ Mme A. BENOMAR La classe HashMap La classe HashMap est une implémentation de linterface Map, et comme on pourra le constater elle ressemble énormément à la classe HashSet. Il ne peut y avoir quune 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.

183 _____________________________________________________________________________________________________ Mme A. BENOMAR 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 dindiquer la capacité initiale et le facteur de charge.

184 _____________________________________________________________________________________________________ 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 dun facteur de charge de 0.70, sa capacité sera recalculée dès quelle aura atteint un taux de remplissage de 70%. Le facteur de charge influant sur les performances de l'objet, il faut bien sûr linitialiser en fonction de ses besoins. HashMap maHashMap = new HashMap(collection); Ce dernier constructeur accepte comme argument une collection qui va initialiser la nouvelle instance. Chaque entrée de la collection spécifiée sera copiée au sein de l'objet HashMap créé.

185 _____________________________________________________________________________________________________ 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 cest le cas, les valeurs correspondantes aux clés existantes sont remplacées par les nouvelles valeurs spécifiées.

186 _____________________________________________________________________________________________________ Mme A. BENOMAR 186 Exemple dutilisation de la classe HashMap: import java.util.*; class TestHashMap { public static void main(String[]args) { HashMap maHashMap =new HashMap(); String eleve = "Anass "; float[] notes = {12,14,10,17}; maHashMap.put(eleve, notes); // la 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

187 _____________________________________________________________________________________________________ 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 !

188 _____________________________________________________________________________________________________ Mme A. BENOMAR 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");

189 _____________________________________________________________________________________________________ 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.

190 _____________________________________________________________________________________________________ Mme A. BENOMAR LES CLASSES UTILITAIRES 6-1 L'interface java.util.Enumeration L'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

191 _____________________________________________________________________________________________________ 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); } }

192 _____________________________________________________________________________________________________ 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 (); } }

193 _____________________________________________________________________________________________________ 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 lexécution INE1 INE2 INE3*/

194 _____________________________________________________________________________________________________ Mme A. BENOMAR Linterface Iterator Linterface java.util.Iterator permet le parcours séquentiel des éléments de nimporte quelle collection Linterface 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 linterface Iterator, et qui a pour but de permettre le parcours des éléments dun conteneur, sans avoir besoin de savoir de quelle nature est ce conteneur. Linterface Iterator contient les méthodes suivantes :

195 _____________________________________________________________________________________________________ Mme A. BENOMAR 195 boolean hasNext() elle permet de tester l'existence d'un élément après le curseur Retourne true si litérateur nest pas arrivé en fin de lensemble et false sinon. Object next() Elle permet davancer lité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, cest pourquoi on doit faire du transtypage pour récupérer la valeur de la collection; en précisant le type de lobjet. Elle Lève une exception NoSuchElementException si l'itérateur n'a pas d'objet qui le suit. void remove() Elle supprime lobjet 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).

196 _____________________________________________________________________________________________________ Mme A. BENOMAR 196 * Création dun Iterator à partir dune collection : Iterator it = maCollection.iterator(); On peut donc parcourir une collection grâce aux méthodes de linterface Iterator Quelque soit la collection c, on peut parcourir tous ses éléments de la façon suivante : Collection c ; // c est de type E Iterator it = c.iterator() ; while(it.hasNext()) { E o = (E)it.next(); // o a pour valeur un objet de la collection

197 _____________________________________________________________________________________________________ Mme A. BENOMAR 197 -Linterface ListIterator ListIterator 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).

198 _____________________________________________________________________________________________________ Mme A. BENOMAR 198 Exemple dutilisation dité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); }

199 _____________________________________________________________________________________________________ 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 Bonjour 3.14 Bonjour 3*/

200 _____________________________________________________________________________________________________ Mme A. BENOMAR Linterface java.lang.Comparable Les objets manipulés dans une TreeMap ou une TreeSet doivent être comparables entre eux, cest à dire quils doivent implémenter linterface Comparable En effet, Linterface 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, selon que x est plus petit que y, lui est égal ou lui est supérieur

201 _____________________________________________________________________________________________________ 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.

202 _____________________________________________________________________________________________________ Mme A. BENOMAR 202 Chapitre4 LES APPLETS INTRODUCTION 1 – LE LANGAGE HTML 2 – LES PRINCIPALES METHODES DE LA CLASSE APPLET 3 – CREATION DUNE APPLET 4 – EXEMPLE DUNE APPLET 5- TRANSMISSION DE PARAMETRES A UNE APPLET

203 _____________________________________________________________________________________________________ Mme A. BENOMAR 203

204 _____________________________________________________________________________________________________ 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 dabord créer une page HTML. Lapplet est référencée dans la page HTML et exécutée par le logiciel de navigation.

205 _____________________________________________________________________________________________________ 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 :

206 _____________________________________________________________________________________________________ Mme A. BENOMAR 206 Chapitre4 LES APPLETS Les 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 : - Si on clique sur texte1 ou image1, on va directement au texte2 ou à limage2 spécifiée dans le tag Lien externe : - Si on clique sur le texte ou limage, on va se déplacer vers lURL spécifiée

207 _____________________________________________________________________________________________________ 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 dhéritage de la classe Applet est la suivante : java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.applet.Applet

208 _____________________________________________________________________________________________________ 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 lapplet. -- La méthode start() : appelé automatiquement par le browser pour démarrer lapplet. Elle exécutée à chaque démarrage de lapplet -la méthode stop() : appelé automatiquement par le browser pour interrompre lexécution dune applet -La méthode destroy() : appelé automatiquement par le browser pour fermer et finir lexécution dune applet - La méthode paint() : pour afficher la fenêtre de lapplet.

209 _____________________________________________________________________________________________________ Mme A. BENOMAR 209 Chapitre4 LES APPLETS 3 – CREATION DUNE APPLET Une applet est incluse dans une page HTML sous la forme dune référence qui indique lendroit où le logiciel de navigation doit aller la chercher La balise APPLET sutilise comme nimporte quelle commande HTML. Sa syntaxe est la suivante : NomClasse : indique le nom de la classe définissant lapplet w et h désignent la largeur et la hauteur (en pixels) de la zone de la page html destinée à représenter lapplet

210 _____________________________________________________________________________________________________ Mme A. BENOMAR 210 Chapitre4 LES APPLETS 3 – CREATION DUNE APPLET La balise APPLET peut comporter quelques attributs facultatifs : codebase : dans le cas où lapplet ne se trouve pas dans le même dossier que le fichier HTML, il faut indiquer ladresse de la classe définissant lapplet par rapport à lURL 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 lapplet codebase = chemin (nom du dossier) Hspace/vspace : les paramètres hspace (espacement horizontal) et vspace (espacement vertical) servent à fixer la distance en pixels entre lapplet et le texte align : Ce paramètre détermine la position relative de lapplet dans la fenêtre. Les valeurs possibles sont : left, top, texttop,middle, absmiddle, bottom, absbottom

211 _____________________________________________________________________________________________________ Mme A. BENOMAR 211 Chapitre4 LES APPLETS 3 – CREATION DUNE 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 lapplet et lenregistrer 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 à lapplet 4 - Le test de lapplet

212 _____________________________________________________________________________________________________ Mme A. BENOMAR 212 Chapitre4 LES APPLETS Fonctionnement dune 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 lapplet. init() nest pas une méthode statique. Une instance de la classe chargée doit être crée

213 _____________________________________________________________________________________________________ Mme A. BENOMAR 213 Chapitre4 LES APPLETS Fonctionnement dune applet La liste ci dessous décrit les différents événements qui se produisent lorsquune applet est chargée : La classe est chargée La classe est instanciée La méthode init() de linstance crée est invoquée La méthode strart() est invoquée - Si la page contenant lapplet 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

214 _____________________________________________________________________________________________________ Mme A. BENOMAR 214 Chapitre4 LES APPLETS 4 – EXEMPLE DUNE APPLET 1 ère étape le code source import java.applet.Applet ; import java.awt.Graphics ; // lapplet 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

215 _____________________________________________________________________________________________________ Mme A. BENOMAR 215 Chapitre4 LES APPLETS 4 – EXEMPLE DUNE 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 On enregistre ce code dans un fichier.html (dans le même dossier que le fichier Helloworld.class )

216 _____________________________________________________________________________________________________ Mme A. BENOMAR 216 Chapitre4 LES APPLETS 4 – EXEMPLE DUNE APPLE 4 ème étape : Le test de lapplet On peut tester lapplet soit : - En invoquant lappletviewer : c:\chemin> appletviewer Helloworld.html - Soit en lançant lapplet dans un navigateur

217 _____________________________________________________________________________________________________ Mme A. BENOMAR 217 Chapitre4 LES APPLETS 5 – TRANSMISSION DE PARAMETRES A UNE APPLET Les applets java peuvent lire des paramètres issus dune page HTML. Cette technique constitue un outil efficace pour personnaliser lexécution dune applet dans un document HTML et ladapter sans être obligé de retoucher le code source, ce qui demanderait une recompilation

218 _____________________________________________________________________________________________________ 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 à laide de la balise HTML et de ses deux attributs : NAME et VALUE. On peut avoir plusieurs balises avec une applet, mais elles doivent toutes être placées entre la balise douverture et celle de fermeture

219 _____________________________________________________________________________________________________ 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 à laide de la balise HTML et de ses deux attributs : NAME et VALUE. On peut avoir plusieurs balises avec une applet, mais elles doivent toutes être placées entre la balise douverture et celle de fermeture

220 _____________________________________________________________________________________________________ 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 dune balise sur une page Web. Le nom de ce dernier qui est précisé avec lattribut 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) ;

221 _____________________________________________________________________________________________________ Mme A. BENOMAR 221 Chapitre4 LES APPLETS 5 – TRANSMISSION DE PARAMETRES A UNE APPLET 5-3 Exemple dutilisation 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) ; } }

222 _____________________________________________________________________________________________________ Mme A. BENOMAR 222 Chapitre4 LES APPLETS 5 – TRANSMISSION DE PARAMETRES A UNE APPLET 5-3 Exemple dutilisation de paramètres dans une applet /* fichier HTML coprrespondant à lapplet */ A lexé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 !

223 _____________________________________________________________________________________________________ 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 LINTERFACE GRAPHIQUE 4 – LES GESTIONNAIRES DE MISE EN PAGE 5- LES CONTENEURS 6- LES EVENEMENTS ET LES ACTIONS

224 _____________________________________________________________________________________________________ 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 lapparence des composants dans javax.swing est totalement différente. javax.swing permet de réaliser de véritables interfaces homme-machine.

225 _____________________________________________________________________________________________________ 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 lutilisateur.

226 _____________________________________________________________________________________________________ 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, …)

227 _____________________________________________________________________________________________________ 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 langle supérieur gauche de la fenêtre.

228 _____________________________________________________________________________________________________ Mme A. BENOMAR 228 Chapitre 5 LES INTERFACES GRAPHIQUES 2-1 La classe Graphics Exemple dapplication 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 dune ligne épaisse (2 pixels dépaisseur g.drawLine(50,65,150,100); g.drawLine(50,66,150,101); }

229 _____________________________________________________________________________________________________ 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

230 _____________________________________________________________________________________________________ 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ères texte 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

231 _____________________________________________________________________________________________________ Mme A. BENOMAR 231 Chapitre 5 LES INTERFACES GRAPHIQUES 2-1 La classe Graphics Exemple dapplication 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 }

232 _____________________________________________________________________________________________________ Mme A. BENOMAR 232 Chapitre 5 LES INTERFACES GRAPHIQUES 2-1 La classe Graphics Exemple dapplication 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

233 _____________________________________________________________________________________________________ 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 dun cercle largeur = hauteur = diamètre * fillOval (int x, int y, int largeur, int hauteur) affiche un ovale plein Largeur (x,y) Largeur Hauteur

234 _____________________________________________________________________________________________________ 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 dentiers réservés aux abscisses, et ypoints est un tableau dentiers 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 cest un triangle) Color couleur ; TracePoly(String titre) // Constructeur { super (titre); }

235 _____________________________________________________________________________________________________ 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); } }

236 _____________________________________________________________________________________________________ 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.

237 _____________________________________________________________________________________________________ Mme A. BENOMAR 237 Chapitre 5 LES INTERFACES GRAPHIQUES 2-2 La classe java.awt.Color - On peut aussi spécifier une couleur à laide 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 à laide 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) ;

238 _____________________________________________________________________________________________________ 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 darrière plan à une fenêtre, on utilise la méthode setBackground(couleur)

239 _____________________________________________________________________________________________________ Mme A. BENOMAR 239 Chapitre 5 LES INTERFACES GRAPHIQUES 2-3 La classe java.awt.Font Laffichage 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 lune des constantes : Font.PLAIN : texte normal Font.BOLD : texte gras Font.ITALIC : texte italique taille : précise la taille de la police en pixels

240 _____________________________________________________________________________________________________ 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 daffichage des polices disponibles import java.awt.*; public class ListePolices extends Frame { ListePolices (String titre) { super(titre); } public void paint (Graphics g) { int x=20; int y=20; String polices[ ] = getToolkit().getFontList(); for (int i=0 ; i

241 _____________________________________________________________________________________________________ Mme A. BENOMAR 241 Chapitre 5 LES INTERFACES GRAPHIQUES 2-3 La classe java.awt.Font Exemple daffichage des polices disponibles public static void main (String[ ] argv) { ListePolice maListe= new ListePolice("polices"); maListe.setSize(400,400); maListe.setVisible(true); } // fin de main } // fin de la classe ListePolices

242 _____________________________________________________________________________________________________ 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 dutilisation de la classe Font import java.awt.*; public class UtiliseFont extends Frame { UtiliseFont(String titre) { super(titre); } public void paint (Graphics g) { Font ft= new Font("Serif",Font.BOLD,20); g.setFont(ft); g.setColor(Color.red); g.drawString("ATTENTION DANGER",100,100); }

243 _____________________________________________________________________________________________________ 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

244 _____________________________________________________________________________________________________ Mme A. BENOMAR 244 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE En java, les éléments de linterface 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

245 _____________________________________________________________________________________________________ Mme A. BENOMAR 245 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Voici une partie de la hiérarchie de la classe java.awt.Compenent java.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 dhéritage des classes

246 _____________________________________________________________________________________________________ Mme A. BENOMAR 246 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE 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 lespace Pour insérer des composants dans un conteneur on utilise la méthode add() de la classe java.awt.Component

247 _____________________________________________________________________________________________________ Mme A. BENOMAR 247 Chapitre 5 LES INTERFACES GRAPHIQUES 3-1 Les boutons Les boutons sont les contrôles de tout écran dinterface, 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 dutilisation de boutons dans une applet: // Fichier DemoBouton.java import java.awt.*; public class DemoBouton extends java.applet.Applet { Button monBouton1; Button monBouton2;

248 _____________________________________________________________________________________________________ Mme A. BENOMAR 248 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE 3-1 Les boutons public void init () { monBouton1 = new Button(); monBouton2 = new Button(); monBouton1.setLabel("bouton 1 "); monBouton2.setLabel("bouton 2"); add(monBouton1) ; // pour ins é rer le bouton dans l applet add(monBouton2) ; }

249 _____________________________________________________________________________________________________ Mme A. BENOMAR 249 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE 3-1 Les boutons

250 _____________________________________________________________________________________________________ Mme A. BENOMAR 250 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE 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 dafficher un texte qui nest 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 dabord 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 dun label en appelant sa méthode setText() l.setText(« le nouveau texte ») ;

251 _____________________________________________________________________________________________________ Mme A. BENOMAR 251 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE 3-3 les boîtes de dialogues Les cases à cocher Un composant. Checkbox est une case placée à côté dune ligne de texte et qui peut être cochée par lutilisateur. Les cases à cocher sont très utilisées dans les programmes dinstallation, les fenêtres de configuration ou dune 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 quelle 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

252 _____________________________________________________________________________________________________ Mme A. BENOMAR 252 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE 3-3 les boîtes de dialogues Les cases à cocher Létat dune 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

253 _____________________________________________________________________________________________________ Mme A. BENOMAR 253 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Pour savoir si une action a été déclenchée par lutilisateur( pression dun bouton, coche dune 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 lorsquune action est déclenchée par lutilisateur et traite les événements survenus pendant lexécution de lapplication ou de lapplet.

254 _____________________________________________________________________________________________________ Mme A. BENOMAR 254 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Exemple: Lapplication suivante permet dafficher une case à cocher de nom Test. Si lutilisateur active cette case le message Case 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); }

255 _____________________________________________________________________________________________________ Mme A. BENOMAR 255 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE public boolean action(Event e,Object arg) { if (test.getState()) etat=true; else etat=false; repaint(); // force la 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); }

256 _____________________________________________________________________________________________________ Mme A. BENOMAR 256 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE public static void main(String[] argv) { DemoCheckBox maCase = new DemoCheckBox("Case à cocher"); maCase.setSize(400, 400); maCase.setVisible(true); } // fin de main } // fin de la classe A lexécution, on aura

257 _____________________________________________________________________________________________________ Mme A. BENOMAR 257 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE 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 lintérieur du groupe, on ne peut activer quune seule case à la fois. La classe java.awt.CheckboxGroup permet de créer des groupes de boutons radio CheckboxGroup br ; // déclaration dun groupe de boutons radio Checkbox b1= new Checkbox(« étiquette1 », état1, br) ; Checkbox b2= new Checkbox(« étiquette2 », état2, br) ; : Checkbox bn= new Checkbox(« étiquetten », étatn, br) ; - étiquetten est létiquette du bouton radio - etatn est létat du bouton : true ou false - br est le nom du groupe des boutons radio

258 _____________________________________________________________________________________________________ Mme A. BENOMAR 258 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les Boutons radio Exemple : Ecrire une application en java qui permet dafficher cinq boutons radio correspondant au statut possible dune personne (célibataire, marié, divorcé, veuf, autre) import java.awt.*; class DemoCheckboxGroup extends Frame { CheckboxGroup status; Checkbox celibataire,marie,divorce,veuf,autre;

259 _____________________________________________________________________________________________________ Mme A. BENOMAR 259 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les Boutons radio DemoCheckboxGroup(String titre) { super (titre); FlowLayout fl=new FlowLayout(); setLayout(fl); status = new CheckboxGroup(); celibataire=new Checkbox("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); }

260 _____________________________________________________________________________________________________ Mme A. BENOMAR 260 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE public static void main(String[] argv) { DemoCheckboxGroup monStatus = new DemoCheckboxGroup("Status"); monStatus.setSize(400, 400); monStatus.setVisible(true); } }cette application crée cinq boutons radio. Le bouton célibataire est coché initialement, mais si lutilisateur 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 lobjet Checkbox correspondant à la réponse seléctionnée

261 _____________________________________________________________________________________________________ Mme A. BENOMAR 261 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE 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 unique Java permet de créer une liste déroulante à choix unique par lintermédiaire de la classe java.awt.Choice Lobjet Choice permet à lutilisateur de choisir une valeur unique parmi une liste. La syntaxe est la suivante : Choice maListe = new Choice() ; maListe.addItem(«choix 1») ; maListe.addItem(«choix 2») ; : maListe.addItem(« choix n ») ;

262 _____________________________________________________________________________________________________ Mme A. BENOMAR 262 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix unique Gestion des sélections maListe.select(indice) ;// sélectionne un élément par son indice lindice est un entier correspondant à lordre de lélément dans la liste. 0 est lindice 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 lindice de lélément sélectionné

263 _____________________________________________________________________________________________________ Mme A. BENOMAR 263 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE 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 à larriè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); }

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

265 _____________________________________________________________________________________________________ Mme A. BENOMAR 265 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE public static void main(String[] argv) { DemoChoice monChoix = new DemoChoice("Couleur de l'arrière plan"); monChoix.setSize(400, 400); monChoix.setVisible(true); } }

266 _____________________________________________________________________________________________________ Mme A. BENOMAR 266 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple Une liste à choix multiple permet dafficher une liste de choix dans un cadre. Elle permet dafficher plusieurs lignes et la 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 lon autorise la sélection multiple (true) ou non.

267 _____________________________________________________________________________________________________ Mme A. BENOMAR 267 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple Une fois linstance crée, on ajoute des propositions avec addItem(String) La classe List dispose dun 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

268 _____________________________________________________________________________________________________ Mme A. BENOMAR 268 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE 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 dindice indice

269 _____________________________________________________________________________________________________ Mme A. BENOMAR 269 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple li.select(indice) ; // sélectionne lélément dindice 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 dindice indice li.getSelectedIndex();// renvoie lindice 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

270 _____________________________________________________________________________________________________ Mme A. BENOMAR 270 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple li.getSelectedItem () ;// sutilise dans le cas dune 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 () ;// sutilise dans le cas dune 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 dindice indice est sélectionné, false sinon. Exemple : Il sagit 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

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

272 _____________________________________________________________________________________________________ Mme A. BENOMAR 272 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple public boolean action (Event e,Object o) { if (e.target==b1) // si le bouton b est pressé ("ajouter") li.addItem("autre élément ajouté"); else if (e.target==b2)// si le bouton b2 est pressé ("supprimer") { int indice[]=li.getSelectedIndexes(); for (int i=0;i

273 _____________________________________________________________________________________________________ Mme A. BENOMAR 273 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple (autre algorithme) public boolean action (Event e,Object o) { if (e.target==b1) // si le bouton b est pressé ("ajouter") li.addItem("autre é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; }

274 _____________________________________________________________________________________________________ Mme A. BENOMAR 274 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Les listes à choix multiple public static void main(String[] argv) { DemoList maListe = new DemoList("Liste d'éléments"); maListe.setSize(400, 400); maListe.setVisible(true); }

275 _____________________________________________________________________________________________________ Mme A. BENOMAR 275 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE 3-5 Les zones de saisie Pour recueillir les saisies de lutilisateur dans une 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

276 _____________________________________________________________________________________________________ Mme A. BENOMAR 276 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE 3-5 Les zones de saisie Lecture dun champ de texte La 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 quelle 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(*) ;

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

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

279 _____________________________________________________________________________________________________ Mme A. BENOMAR 279 Chapitre 5 LES INTERFACES GRAPHIQUES 3 – LES COMPOSANTS DE LINTERFACE GRAPHIQUE Lecture et modification du contenu dune 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 dune 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.

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

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

282 _____________________________________________________________________________________________________ Mme A. BENOMAR 282 Chapitre 5 LES INTERFACES GRAPHIQUES 4 – LES GESTIONNAIRES DE MISE EN PAGE Lorsquon place des composants dans une applet ou dans une fenêtre graphique, leur emplacement à lécran se fait de manière automatique et dune 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.

283 _____________________________________________________________________________________________________ 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 linterface 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.

284 _____________________________________________________________________________________________________ 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 linterface 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. Cest la disposition par défaut, celle qui sera utilisée si lon 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. Lorsquil ny a plus assez de place pour ajouter un élément, on passe à la ligne suivante. Chaque ligne est centrée par défaut

285 _____________________________________________________________________________________________________ Mme A. BENOMAR 285 Chapitre 5 LES INTERFACES GRAPHIQUES 4 – LES GESTIONNAIRES DE MISE EN PAGE 4-1 FlowLayout : - Déclaration dun objet de la classe FlowLayout FlowLayout fl1 = new FlowLayout(); FlowLayout fl2 = new FlowLayout( int ); /* lentier définit lorientation 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 lorientation, le deuxième argument définit lespacement horizontal et le troisième définit lespacement vertical entre les composants */

286 _____________________________________________________________________________________________________ Mme A. BENOMAR 286 Chapitre 5 LES INTERFACES GRAPHIQUES 4 – LES GESTIONNAIRES DE MISE EN PAGE 4-1 FlowLayout : * Pour quune nouvelle mise en page soit effective, il faut linstaller avec la 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;

287 _____________________________________________________________________________________________________ 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) ; }

288 _____________________________________________________________________________________________________ Mme A. BENOMAR 288 Chapitre 5 LES INTERFACES GRAPHIQUES 4 – LES GESTIONNAIRES DE MISE EN PAGE 4-1 FlowLayout : A l ex é cution de l applet : Lespacement horizontal entre les 2 boutons est de 60 pixels, et lespacement vertical est de 0

289 _____________________________________________________________________________________________________ Mme A. BENOMAR 289 Chapitre 5 LES INTERFACES GRAPHIQUES 4 – LES GESTIONNAIRES DE MISE EN PAGE 4-2 BorderLayout : Lorsquon 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 dun objet de la classe BorderLayout BordreLayout bl1 = new BorderLayout(); BorderLayout bl2 = new BorderLayout(int, int); /* le premier argument définit lespacement horizontal et le deuxième définit lespacement vertical entre les composants

290 _____________________________________________________________________________________________________ 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);

291 _____________________________________________________________________________________________________ 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")) ; } A l ex é cution, on aura :

292 _____________________________________________________________________________________________________ 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 dun conteneur en grille (lignes et colonnes). Le même espace est affecté à tous les composants. Lorsquon 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 dun 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) */

293 _____________________________________________________________________________________________________ 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 :

294 _____________________________________________________________________________________________________ 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)

295 _____________________________________________________________________________________________________ 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) }

296 _____________________________________________________________________________________________________ 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

297 _____________________________________________________________________________________________________ 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 de l'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

298 _____________________________________________________________________________________________________ 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

299 _____________________________________________________________________________________________________ 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

300 _____________________________________________________________________________________________________ Mme A. BENOMAR 300 Chapitre 5 LES INTERFACES GRAPHIQUES 5 – LES CONTENEURS Exemple : Utiliser dans une applet deux panneaux import java.awt.* ; import java.applet.* ; public class DemoPanel extends Applet { public void init() { FlowLayout fl=new FlowLayout(); setLayout(fl); Panel p1= new Panel(); Button b1=new Button("Premier"); Button b2=new Button("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); } }

301 _____________________________________________________________________________________________________ Mme A. BENOMAR 301 Chapitre 5 LES INTERFACES GRAPHIQUES 5 – LES CONTENEURS 5-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.

302 _____________________________________________________________________________________________________ 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

303 _____________________________________________________________________________________________________ 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)

304 _____________________________________________________________________________________________________ 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

305 _____________________________________________________________________________________________________ Mme A. BENOMAR 305 Chapitre 5 LES INTERFACES GRAPHIQUES 6- LES EVENEMENTS ET LES ACTIONS Les 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 lobjet. Un Listener peut écouter plusieurs objets. Pour quun objet puisse déléguer la gestion on doit spécifier qui sen chargera par une méthode du type : add Listener.

306 _____________________________________________________________________________________________________ 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 »

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

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

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

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

311 _____________________________________________________________________________________________________ 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); }

312 _____________________________________________________________________________________________________ Mme A. BENOMAR 312 Chapitre 5 LES INTERFACES GRAPHIQUES 6- LES EVENEMENTS ET LES ACTIONS * Linterface 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. */

313 _____________________________________________________________________________________________________ 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); }

314 _____________________________________________________________________________________________________ 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 ");}

315 _____________________________________________________________________________________________________ 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); }

316 _____________________________________________________________________________________________________ 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

317 _____________________________________________________________________________________________________ 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); }

318 _____________________________________________________________________________________________________ Mme A. BENOMAR 318 Chapitre 5 LES INTERFACES GRAPHIQUES 6- LES EVENEMENTS ET LES ACTIONS * Exemple : utilisation des événements du clavier public 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); } }

319 _____________________________________________________________________________________________________ Mme A. BENOMAR 319 Chapitre 5 LES INTERFACES GRAPHIQUES -Exemples de javax.swing Exemple 1 import javax.swing.*; import java.awt.*; class TestJFrame extends JFrame { TestJFrame() { super("une application"); Container cp = getContentPane(); // public Container getContentPane() de la classe JFrameContainer // Retourne un objet de type Container de cette fenêtre JLabel label = new JLabel("Hello",SwingConstants.CENTER); cp.add(label, BorderLayout.CENTER); }

320 _____________________________________________________________________________________________________ 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); }

321 _____________________________________________________________________________________________________ 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); }

322 _____________________________________________________________________________________________________ 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); }

323 _____________________________________________________________________________________________________ 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 EXCEPTION 4-1 Les blocs try et catch 4-2 Le mot clé throws 4-3 Le bloc finally 4-4 Quelques classes d'exceptions 5- DEFINIR SA PROPRE EXCEPTION

324 _____________________________________________________________________________________________________ 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 :

325 _____________________________________________________________________________________________________ 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.

326 _____________________________________________________________________________________________________ Mme A. BENOMAR 326 LES EXCEPTIONS 2- Définition dune 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).

327 _____________________________________________________________________________________________________ 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 ; }

328 _____________________________________________________________________________________________________ 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)

329 _____________________________________________________________________________________________________ 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

330 _____________________________________________________________________________________________________ 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.

331 _____________________________________________________________________________________________________ Mme A. BENOMAR 331 LES EXCEPTIONS 4-1 Les blocs try et catch Si 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

332 _____________________________________________________________________________________________________ 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) }

333 _____________________________________________________________________________________________________ Mme A. BENOMAR 333 LES EXCEPTIONS 4-1 Les blocs try et catch Un 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) { }

334 _____________________________________________________________________________________________________ Mme A. BENOMAR 334 LES EXCEPTIONS 4-2 Mécanisme de lancement d'une exception On 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.

335 _____________________________________________________________________________________________________ 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 ya propagation de l'exception

336 _____________________________________________________________________________________________________ Mme A. BENOMAR 336 LES EXCEPTIONS Exemple : 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); }

337 _____________________________________________________________________________________________________ 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 15 La 2 è me note n'est pas enti è re La moyenne est 13 Si on donne en ex é cution : java ExceptionCatch 12.5 d La 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:23 La division par z é ro n'est pas attrap é e

338 _____________________________________________________________________________________________________ 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

339 _____________________________________________________________________________________________________ Mme A. BENOMAR 339 LES EXCEPTIONS 4-3 Le mot clé throws Exemple : 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

340 _____________________________________________________________________________________________________ Mme A. BENOMAR 340 LES EXCEPTIONS 4-4 Bloc Finally Un 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 catch Exemple d'utilisation d'un bloc finally class UtiliseFinally { static int moyenne(String[] liste) { int somme=0, entier, nbNotes=0, i=0; for ( i=0;i

341 _____________________________________________________________________________________________________ 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 : xy Erreur sur vos entiers

342 _____________________________________________________________________________________________________ Mme A. BENOMAR 342 LES EXCEPTIONS 4-5 Quelques classes d'exceptions ExceptionType d'exception IOExceptionEntrée Sortie Exemples : lecture sur un fichier inexistant ArithméticExceptionArithmétique Exemple : Division par zéro ArrayIndexOutOfBoundsExcepti on Dépassement des bornes d'un tableau NumberFormatExceptionFormat du nombre n'est pas respectée Exemple : un int représentée en float OutOfMemoryExceptionDépassement de mémoire

343 _____________________________________________________________________________________________________ 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

344 _____________________________________________________________________________________________________ Mme A. BENOMAR 344 LES EXCEPTIONS 5- Définir sa propre exception Exemple : 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++; }


Télécharger ppt "1 ______________________________________________________________________________ PREMIERS PAS VERS JAVA Les Journées Informatiques des Classes Préparatoires."