poly java 2009

303
 1 1 Java & la POO Java & la POO

Transcript of poly java 2009

Page 1: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 1/303

  11

Java & la POOJava & la POO

Page 2: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 2/303

  22

PlanPlan1. Java & la POO1. Java & la POO2. Héritage & Règles de visibilité2. Héritage & Règles de visibilité

3. Polymorphisme3. Polymorphisme4. Classes abstraites & Interfaces4. Classes abstraites & Interfaces

5. Exceptions5. Exceptions6. Programmation graphique6. Programmation graphique7. Les Threads7. Les Threads

8. Gestion de fichiers8. Gestion de fichiers

Page 3: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 3/303

  33

Plan détailléPlan détaillé1. Java & la POO1. Java & la POO1.1. Principes généraux1.1. Principes généraux1.2. Notion de classe1.2. Notion de classe1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet1.4. Affectation&comparaison d’objets1.4. Affectation&comparaison d’objets1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes1.6. Programmation de base1.6. Programmation de base1.7. Classes enveloppe1.7. Classes enveloppe

Page 4: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 4/303

  44

Plan détailléPlan détaillé2. Héritage & Règles de visibilité2. Héritage & Règles de visibilité2.1. Héritage2.1. Héritage2.2 Règles de visibilité2.2 Règles de visibilité

3. Polymorphisme3. Polymorphisme4. Classes abstraites & Interfaces4. Classes abstraites & Interfaces

4.1. Classes abstraites4.1. Classes abstraites

4.2. Interfaces4.2. Interfaces5. Exceptions5. Exceptions6. Programmation graphique6. Programmation graphique

6.1. Gestionnaires de présentation6.1. Gestionnaires de présentation

6.2. Mise en oeuvre des traitements6.2. Mise en oeuvre des traitements

Page 5: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 5/303

  55

1.1. Principes généraux1.1. Principes généraux

• Java est né à l’intersection de +ieurs tendances:Java est né à l’intersection de +ieurs tendances: – évolution des ordinateursévolution des ordinateurs

 – évolution des langagesévolution des langages – réseaux et communicationsréseaux et communications

• Historique:Historique: – Situation de Sun en 90Situation de Sun en 90

 – 1990: 1er projet de langage1990: 1er projet de langage – 1992: OAK, 1ère version du projet1992: OAK, 1ère version du projet – 1993: envol du Web1993: envol du Web – 1995: OAK rebaptisé Java1995: OAK rebaptisé Java – 1998-1999: optimisation des compilateurs Java pour1998-1999: optimisation des compilateurs Java pour

arriver à concurrencer C++ sur les performancesarriver à concurrencer C++ sur les performances

Page 6: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 6/303

  66

1.1. Principes généraux1.1. Principes généraux

• Caractéristiques du langageCaractéristiques du langage – Langage de programmation && plateformeLangage de programmation && plateforme

 – Orienté Objet -> à ObjetsOrienté Objet -> à Objets – Contrôle statique stricteContrôle statique stricte – MultithreadMultithread

 – Liaison dynamiqueLiaison dynamique – Gestion mémoireGestion mémoire – Sécurisé: vérification du code avant exécutionSécurisé: vérification du code avant exécution

Page 7: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 7/303

  77

1.1. Principes généraux1.1. Principes généraux

• Java vs C++Java vs C++ – Pas de pointeurPas de pointeur

 – Pas de structure ou d'union struct, defstructPas de structure ou d'union struct, defstruct – Pas de macros #definePas de macros #define – Pas de gestion de la mémoire laissée àPas de gestion de la mémoire laissée à

l'utilisateur malloc(), free(), new(), delete()l'utilisateur malloc(), free(), new(), delete() – Pas d'héritage multiple(direct: de structure)Pas d'héritage multiple(direct: de structure) – Pas de redéfinition d'opérateurPas de redéfinition d'opérateur – Vérification Vérification à l'exécution des dépassementsà l'exécution des dépassements

de bornes de tableauxde bornes de tableaux

Page 8: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 8/303

  88

1.1. Principes généraux1.1. Principes généraux

• La plate-forme JavaLa plate-forme Java – DéfinitionDéfinition

 – CaractéristiquesCaractéristiquesApplication

Langage de

développement Système d’// Librairiesexploitation// Système

Processeur

 ApplicationLangage de // Librairies

dévelopmt // SystèmeSystème

d’exploitationProcesseur

Remontée des fonctionnalités des OS

   ApplicationLangage de // Librairiesdévelopmt // Système

Systèmed’exploitation

Processeur

 ApplicationLangage de // Librairiesdévelopmt // Système

Système d’exploitation

Processeur

Machine virtuelle

Insertion de la technologie de la machine virtuelle

Page 9: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 9/303

  99

1.1. Principes généraux1.1. Principes généraux

• Architecture de la plate-forme (J2SE, v1.4): Architecture de la plate-forme (J2SE, v1.4):

Page 10: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 10/303

  1010

1.1. Principes généraux1.1. Principes généraux

• Principales composantes:Principales composantes: – Le compilateurLe compilateur – L’interpréteurL’interpréteur

 – La machine virtuelle:La machine virtuelle:  “write once, run anywhere...”  “write once, run anywhere...”  – Le ramasse miette:Le ramasse miette:

• Gestion de la mémoire « automatique »Gestion de la mémoire « automatique »• Une destruction manuelle des objets reste possible par appelUne destruction manuelle des objets reste possible par appel

explicite du ramasse miette. Classe Runtimeexplicite du ramasse miette. Classe Runtime

 – Le chargeur de classe:Le chargeur de classe:• Fait partie du système de sécurité de java: sépare les classesFait partie du système de sécurité de java: sépare les classeslocales et les classes venant du réseaulocales et les classes venant du réseau

• Recherche de classe effectuée en priorité parmi les classes locales.Recherche de classe effectuée en priorité parmi les classes locales.Usurpation de nom de classe locale très difficile par une classeUsurpation de nom de classe locale très difficile par une classeréseauréseau

• Le chemin de recherche des classes: CLASSPATHLe chemin de recherche des classes: CLASSPATH – Le vérificateur de codeLe vérificateur de code

Page 11: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 11/303

  1111

• Structure des fichiers SDK:Structure des fichiers SDK: – [Solaris] [Linux] [[Solaris] [Linux] [WindowsWindows]]

• Configuration du ClasspathConfiguration du Classpath – [[SolarisSolaris et Linuxet Linux] [] [WindowsWindows]]

• Comment les classes sont localiséesComment les classes sont localisées – [[SolarisSolaris, Linux et Windows, Linux et Windows]]

1.1. Principes généraux1.1. Principes généraux

Page 12: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 12/303

  1212

• Programmation structurée:Programmation structurée: – Programme = réunion de :Programme = réunion de :

• Plusieurs structures de données et types de basePlusieurs structures de données et types de base

• Plusieurs procéduresPlusieurs procédures• P. O. O. :P. O. O. :

 – Classe :Classe :• Généralisation de la notion de type connue dans laGénéralisation de la notion de type connue dans la

programmation classiqueprogrammation classique

 – Objet = Instance d’une classe :Objet = Instance d’une classe :• Généralisation de la notion de variable connue dans laGénéralisation de la notion de variable connue dans la

programmation classiqueprogrammation classique – Programme = mise en œuvre de :Programme = mise en œuvre de :

• Plusieurs objetsPlusieurs objets

1.2. Notion de classe1.2. Notion de classe

Page 13: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 13/303

  1313

• Classe :Classe : – Prototype décrivant une famille d’objets partageant:Prototype décrivant une famille d’objets partageant:

• Même structure: des attributs communs (i. e. structure deMême structure: des attributs communs (i. e. structure de

données rattachée à la classe)données rattachée à la classe)• Même comportement: des méthodes communes (i. e.Même comportement: des méthodes communes (i. e.

procédure ou fonction rattachée à la classe)procédure ou fonction rattachée à la classe)• Représentation abstraiteReprésentation abstraite

•Objet:Objet: – Variable d’un tel type de classe: Variable d’un tel type de classe:

• instance de la classe (représentation concrète)instance de la classe (représentation concrète)• Les valeurs des champs sont intuitivement propres àLes valeurs des champs sont intuitivement propres à

chaque objetchaque objet

• Les méthodes sont intuitivement communes à chaqueLes méthodes sont intuitivement communes à chaqueinstance de la classeinstance de la classe

1.2. Notion de classe1.2. Notion de classe

Page 14: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 14/303

  1414

• Encapsulation:Encapsulation:• objet: regroupement de données et procéduresobjet: regroupement de données et procédures

• cacher les détails d’implantation au mondecacher les détails d’implantation au mondeextérieur (champs privés)extérieur (champs privés)

Structure

Méthodes

Structure

Méthodes

Encapsulation totale Encapsulation contrôlée

Objets

1.2. Notion de classe1.2. Notion de classe

Page 15: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 15/303

  1515

• Exemple 1 : Définition d’une classe PointExemple 1 : Définition d’une classe Point – Définition du corps de la classe Point :Définition du corps de la classe Point :

class Point {class Point { // instructions de définition des champs et des méthodes // instructions de définition des champs et des méthodesde la classede la classe}}

 – Définition des champs de la classe :Définition des champs de la classe :

Un point est représenté par 2 coordonnées:Un point est représenté par 2 coordonnées:class Point {class Point {

int x;int x;int y;int y;

}}

1.2. Notion de classe1.2. Notion de classe

Page 16: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 16/303

  1616

• Exemple 1 : Définition d’une classe PointExemple 1 : Définition d’une classe Point – Définition des méthodes de la classe :Définition des méthodes de la classe :

Un point peut être manipulé à l’aide de 3 opérations:Un point peut être manipulé à l’aide de 3 opérations:initialise, déplace, et affiche.initialise, déplace, et affiche.

• La méthode initialise:La méthode initialise: – attribut des valeurs aux coordonnées d’un pointattribut des valeurs aux coordonnées d’un point

class Point {class Point {

……void initialise(int abs, int ord) {void initialise(int abs, int ord) {

x=abs; y=ord;x=abs; y=ord;}}

……

1.2. Notion de classe1.2. Notion de classe

Page 17: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 17/303

  1717

• Exemple 1 : Définition d’une classe PointExemple 1 : Définition d’une classe Point – Définition des méthodes de la classe :Définition des méthodes de la classe :

• La méthode déplace: modifie les coordonnées d’un pointLa méthode déplace: modifie les coordonnées d’un point

class Point {class Point {

……void deplace(int dx, int dy) {void deplace(int dx, int dy) {

x+=dx; y+=dy;x+=dx; y+=dy;}}

……}}

1.2. Notion de classe1.2. Notion de classe

Page 18: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 18/303

  1818

• Exemple 1 : Définition d’une classe PointExemple 1 : Définition d’une classe Point – Définition des méthodes de la classe :Définition des méthodes de la classe :

• La méthode affiche(): affiche les coordonnées d’un pointLa méthode affiche(): affiche les coordonnées d’un point

class Point {class Point {

……void affiche() {void affiche() {

System.out.println(“Abscisse:”+x);System.out.println(“Abscisse:”+x);System.out.println(“Ordonnée:”+y);System.out.println(“Ordonnée:”+y);

}}……

}}

1.2. Notion de classe1.2. Notion de classe

Page 19: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 19/303

  1919

• Exemple 1 : Définition d’une classe PointExemple 1 : Définition d’une classe Point – La classe Point:La classe Point:

class Point {class Point {

void initialise(int abs, int ord) {void initialise(int abs, int ord) {x=abs; y=ord;x=abs; y=ord;

}}void deplace(int dx, int dy) {void deplace(int dx, int dy) {

x+=dx; y+=dy;x+=dx; y+=dy;}}void affiche() {void affiche() {

System.out.println(“Abscisse:”+x);System.out.println(“Abscisse:”+x);System.out.println(“Ordonnée:”+y);System.out.println(“Ordonnée:”+y);

}}int x;int x;  // abscisse // abscisse

int y;int y;  // ordonnée // ordonnée

1.2. Notion de classe1.2. Notion de classe

Page 20: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 20/303

  2020

• Exemple 2 : Utilisation de la classe PointExemple 2 : Utilisation de la classe Point – La classe Point va permettre d’instancier des objetsLa classe Point va permettre d’instancier des objets

de type Point, et de leur appliquer à volonté lesde type Point, et de leur appliquer à volonté lesméthodes de la classe Point.méthodes de la classe Point.

 – Cette utilisation ne peut se faire en dehors d’uneCette utilisation ne peut se faire en dehors d’uneautre méthode: la méthode main()autre méthode: la méthode main()

 – La démarche:La démarche:• Point a = new Point();Point a = new Point();

 – Déclaration de l’objet:Déclaration de l’objet: Point a;Point a; – Réservation de l’emplacement:Réservation de l’emplacement: new Point()new Point() – Quelles valeurs pour l’abscisse et l’ordonnée de a?Quelles valeurs pour l’abscisse et l’ordonnée de a?

• a.initialise(3,5); a.deplace(2,0); a.affiche();a.initialise(3,5); a.deplace(2,0); a.affiche();

1.2. Notion de classe1.2. Notion de classe

Page 21: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 21/303

  2121

• Exemple 2 : Utilisation de la classe PointExemple 2 : Utilisation de la classe Point – La classe principale, la méthode main():La classe principale, la méthode main():

public class PremierProgramme {public class PremierProgramme {public static void main(String [] args) {public static void main(String [] args) {

Point a1;Point a1;

a1 = new Point();a1 = new Point();a1.initialise(3,5);a1.initialise(3,5); a1.affiche();a1.affiche();

a1.deplace(2,0);a1.deplace(2,0); a1.affiche();a1.affiche();Point a2 = new Point();Point a2 = new Point();

a2.initialise(6,8);a2.initialise(6,8); a2.affiche();a2.affiche();}}

}}

1.2. Notion de classe1.2. Notion de classe

Page 22: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 22/303

  2222

• Exercices :Exercices : – Exercice 1: PourFeliciterExercice 1: PourFeliciter

 – Exercice 2: Bonjour, Bonjour2Exercice 2: Bonjour, Bonjour2

1.2. Notion de classe1.2. Notion de classe

Page 23: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 23/303

  2323

• 3 phases:3 phases: – CréationCréation

 – UtilisationUtilisation – NettoyageNettoyage

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

Page 24: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 24/303

  2424

• Création:Création: – Syntaxe:Syntaxe:

nom_classe nom_objet=newnom_classe nom_objet=newappel_constructeur( paramètres);appel_constructeur( paramètres);

exemple:exemple: Rectangle R = new Rectangle();Rectangle R = new Rectangle();

ClasseClasse DéclarationDéclaration InstanciationInstanciation InitialisationInitialisation

 – Choix du constructeur parmi ceux définis dans laChoix du constructeur parmi ceux définis dans laclasseclasse

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

Page 25: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 25/303

  2525

• Utilisation:Utilisation: – Syntaxe:Syntaxe:

nom_objet.nom_attribut=valeur_attribut;nom_objet.nom_attribut=valeur_attribut;nom_objet.nom_méthode(paramètres);nom_objet.nom_méthode(paramètres);exemples:exemples: Rectangle R = new Rectangle();Rectangle R = new Rectangle();

R.x=4;R.x=4;R.origine=new Point(4,5);R.origine=new Point(4,5);

la=new Rectangle().largeur;la=new Rectangle().largeur;

R.move(40,45);R.move(40,45);

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

Page 26: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 26/303

  2626

• Destruction:Destruction: – La méthode finalize():La méthode finalize():

• Destructeur qui libère l’espace mémoire par un mécanismeDestructeur qui libère l’espace mémoire par un mécanismede ramasse miettesde ramasse miettes

• Automatique dès que l’objet n’est plus utilisé Automatique dès que l’objet n’est plus utilisé

• Méthode membre de la classe Object, racine de laMéthode membre de la classe Object, racine de lahiérarchie des classeshiérarchie des classes

• Elle peut-être surchargée au sein d’une classe: toutes lesElle peut-être surchargée au sein d’une classe: toutes lesopérations de “nettoyage” qui concernent l’objet sontopérations de “nettoyage” qui concernent l’objet sontinsérées dans le corps de la méthode “finalyze()” insérées dans le corps de la méthode “finalyze()” 

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

Page 27: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 27/303

  2727

• Constructeur: DéfinitionConstructeur: Définition – moyen d’initialiser les attributs des instances lors demoyen d’initialiser les attributs des instances lors de

leur créationleur création

 – diffère des méthodes ordinaires par:diffère des méthodes ordinaires par:• porte toujours le même nom que sa classeporte toujours le même nom que sa classe• n’a pas de type de valeur de retourn’a pas de type de valeur de retour

 – appel du constructeur nécessaire à toute instanciationappel du constructeur nécessaire à toute instanciation

 – compilateur ajoute un constructeur vide sans argumentcompilateur ajoute un constructeur vide sans argumenten cas d’absence de constructeuren cas d’absence de constructeur – toute classe possède au moins un constructeurtoute classe possède au moins un constructeur – si +ieurs constructeurs, alors surchargesi +ieurs constructeurs, alors surcharge

 – un constructeur peut appeler un autreun constructeur peut appeler un autre

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

Page 28: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 28/303

  2828

• Le mot-cléLe mot-clé this: this:  – permet de référencer l'objet courant dans le corpspermet de référencer l'objet courant dans le corps

d'une de ses méthodes (exemple:préfixer attribut pourd'une de ses méthodes (exemple:préfixer attribut pouraccéder à ses variables d'instance)accéder à ses variables d'instance)

 – this this permet de désigner l'objet courantpermet de désigner l'objet courant – emploi deemploi de this this dans l'écriture des méthodes n'est pasdans l'écriture des méthodes n'est pas

obligatoireobligatoire – SouventSouvent this this est inutile: variables d'instances et lesest inutile: variables d'instances et les

appels de méthodes de la classe couranteappels de méthodes de la classe couranteimplicitement référencées par leur nomimplicitement référencées par leur nom this this 

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

Page 29: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 29/303

Page 30: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 30/303

  3030

 – Exemple complet:Exemple complet:

public class Rectangle {public class Rectangle {

public int largeur=0;public int largeur=0;public int longueur=0;public int longueur=0;public Point originepublic Point originepublic Rectangle() {public Rectangle() {

origine=new Point(0,0);origine=new Point(0,0);

}}public Rectangle(Point p) {public Rectangle(Point p) {

origine=p;origine=p;}}

1.3. Cycle de vie d’un objet1.3. Cycle de vie d’un objet

  public Rectangle(int a, int b) {public Rectangle(int a, int b) {this(new Point(0,0), a, b);this(new Point(0,0), a, b);

}}public Rectangle(Point p,int a,int b) {public Rectangle(Point p,int a,int b) {

largeur=a;largeur=a;

longueur=b;longueur=b;origine=p;origine=p;

}}}}

Page 31: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 31/303

Page 32: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 32/303

  3232

1.4. Affectation&comparaison1.4. Affectation&comparaison

d’objetsd’objets• Généralités:Généralités: – UnUn opérateur prend 1 ou plusieursopérateur prend 1 ou plusieurs

arguments et produit une valeurarguments et produit une valeur.. – Les arguments desLes arguments des opérateurs sont les typesopérateurs sont les types

de basede base

 – LesLes objets acceptent seulement lesobjets acceptent seulement lesopérateurs suivantopérateurs suivant : "=", "==", "!=": "=", "==", "!="

 – Seuls les objetsSeuls les objets StringString ont aussi les opérateursont aussi les opérateurs"+", "+=""+", "+="

 – Pas de surcharge des opérateurs.Pas de surcharge des opérateurs.

Page 33: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 33/303

  3333

•  Affectation: Affectation: – si A et B sont de type primitif alorssi A et B sont de type primitif alors

 A = B signifie: A reçoit une copie de la valeur de B A = B signifie: A reçoit une copie de la valeur de B

 – si A et B sont des objets alorssi A et B sont des objets alors A = B signifie: A et B pointent sur le même objet B A = B signifie: A et B pointent sur le même objet B

 A et B sont des "ALIAS " A et B sont des "ALIAS "

A

B47

A B47 47

1.4. Affectation&comparaison1.4. Affectation&comparaison

d’objetsd’objets

Page 34: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 34/303

  3434

• Exemple:Exemple:class Number {int i;}

public class Assignment {

public static void main(String args[]) {

Number n1 = new Number(); Number n2 = new Number();n1.i = 9; n2.i = 47;

System.out.println("1: n1.i: " + n1.i + ",n2.i: " + n2.i);

n1 = n2;

System.out.println("2: n1.i: " + n1.i + ",n2.i: " + n2.i);

n1.i = 27;

System.out.println("3: n1.i: " + n1.i + ",n2.i: " + n2.i);}}

Trace: 1: n1.i: 9, n2.i: 47

2: n1.i: 47, n2.i: 47

3: n1.i: 27, n2.i: 273: n1.i: 27, n2.i: 27

1.4. Affectation&comparaison1.4. Affectation&comparaison

d’objetsd’objets

Page 35: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 35/303

  3535

• La méthode equals():La méthode equals(): – Pour comparer l'égalité du contenu de deuxPour comparer l'égalité du contenu de deux

objets complexes on utilisera la méthodeobjets complexes on utilisera la méthodeequals() equals() ::

 – à redéfinir pour les nouveaux objetsà redéfinir pour les nouveaux objetspublic class EqualsMethod {

public static void main(String args[]) {String s1 = new String(« 47 »);String s2 = new String(« 47 »);System.out.println(s1.equals(s2));

}}truetrue

 – Exercice: implémenter les 2 programmes précédentsExercice: implémenter les 2 programmes précédents

1.4. Affectation&comparaison1.4. Affectation&comparaison

d’objetsd’objets

Page 36: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 36/303

  3636

•  Attributs Attributs – Caractéristiques individuelles qui différencient un objetCaractéristiques individuelles qui différencient un objet

d'un autre, et définissent l'état d'un objet.d'un autre, et définissent l'état d'un objet.

 – Deux types d'attributs:Deux types d'attributs:• attributs d’instanceattributs d’instance, ou variables d'instance., ou variables d'instance.ExempleExemple : int carte = TREFFLE;: int carte = TREFFLE;• attributs de classeattributs de classe, ou variables de classe: L'état d'un tel, ou variables de classe: L'état d'un tel

attribut sera le même pour toutes les instances de la classe.attribut sera le même pour toutes les instances de la classe.ExempleExemple : static int vclasse;: static int vclasse;

 – Attribut statique ne nécessite pas d’instanciation de la Attribut statique ne nécessite pas d’instanciation de laclasseclasse

Exemples:Exemples: Math.PI, System.outMath.PI, System.out

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

Page 37: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 37/303

  3737

• Attributs Attributs – Exercices:Exercices:

• Exercice 1:Exercice 1:Ecrire un programme Java qui compte puis affiche leEcrire un programme Java qui compte puis affiche lenombre d’instances d’une classe Employe donnée.nombre d’instances d’une classe Employe donnée.

• Exercice 2:Exercice 2:

Etendre ce programme afin de calculer l’IGR deEtendre ce programme afin de calculer l’IGR dechaque instance de la classe Employe.chaque instance de la classe Employe.

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

Page 38: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 38/303

Page 39: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 39/303

  3939

• MéthodesMéthodes – déterminent les actions sur ses instancesdéterminent les actions sur ses instances – Deux types de méthodes:Deux types de méthodes:

• Méthodes d ’instanceMéthodes d ’instance: opère sur un objet particulier: opère sur un objet particulier• Méthodes de classeMéthodes de classe (statique)(statique)

 – Méthode de classe peut être utilisée partout avec ouMéthode de classe peut être utilisée partout avec ousans l ’existence d ’une instance de la classesans l ’existence d ’une instance de la classe

ExemplesExemples::

static Math.random(), Math.cos()static Math.random(), Math.cos() – Exemple: classe Motorcycle:Exemple: classe Motorcycle: – démarrer le moteurdémarrer le moteur- arrêter le moteur- arrêter le moteur - accélérer- accélérer – changer de vitessechanger de vitesse - caler- caler

 – A l'inverse de A l'inverse de C++ Java ne possède pas de fonctions C++ Java ne possède pas de fonctions définies en dehors des classes définies en dehors des classes 

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

Page 40: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 40/303

  4040

• MéthodesMéthodes – Exercices:Exercices:

• Exercice 3:Exercice 3:

Reprendre le programme Harmonique afin de pouvoir appelerReprendre le programme Harmonique afin de pouvoir appelerla méthode harmonique sans instancier la classe Hamonique.la méthode harmonique sans instancier la classe Hamonique.• Exercice 4:Exercice 4:

Ecrire un programme Java qui affiche la valeur du cosinus etEcrire un programme Java qui affiche la valeur du cosinus etdu sinus d’un angle.du sinus d’un angle.

• Exercice 5:Exercice 5:Ecrire un programme Java qui affiche la valeur de la factrielleEcrire un programme Java qui affiche la valeur de la factrielled’un nombre entier saisi en argument.d’un nombre entier saisi en argument.

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

Page 41: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 41/303

  4141

• Méthodes:Méthodes: – Syntaxe : Modificateurs de création de méthodeSyntaxe : Modificateurs de création de méthode

niveau d’accèsniveau d’accès définit la visibilité de la méthode (idem attribut)définit la visibilité de la méthode (idem attribut)

staticstatic méthode de classe ou statique peut être invoquée sansméthode de classe ou statique peut être invoquée sansinstancier la classe (par défaut, méthode d’instance)instancier la classe (par défaut, méthode d’instance)abstractabstract seul son prototype figureseul son prototype figurevolatilevolatile peut être changée par un périphérique ou de manièrepeut être changée par un périphérique ou de manière

asynchrone (le compilateur ne doit pas stocker les valeursasynchrone (le compilateur ne doit pas stocker les valeursdans les registres)dans les registres)

finalfinal ne peut être surchargéene peut être surchargéenativenative écrite dans un autre langageécrite dans un autre langagesynchronizedsynchronized nécessite un moniteur (verrou, section critique)nécessite un moniteur (verrou, section critique)<<type_de_retour type_de_retour >><nom_méthode><nom_méthode>(<(<arguments>arguments>) throws <) throws <exception>exception> {{

 // // args. par valeur args. par valeur <corps><corps>

return <return <valeur>valeur>;};}

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

Page 42: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 42/303

Page 43: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 43/303

  4343

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

• Déclaration d’une classe:Déclaration d’une classe: – Syntaxe: Modificateurs de création de classeSyntaxe: Modificateurs de création de classe

publicpublic accessible par tout le mondeaccessible par tout le mondeabstractabstract classe abstraite (ne peut être instanciée)classe abstraite (ne peut être instanciée)finalfinal ne peut être sous classéene peut être sous classéeclass <class <nom_classe>nom_classe> nom de la classenom de la classeextends <extends <super>super> la classela classe super super : classe mère de la classe: classe mère de la classe

en coursen cours

implements <implements <interface>interface> interface implémentée par cette classeinterface implémentée par cette classe{{<corps de la classe><corps de la classe>}}

Page 44: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 44/303

Page 45: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 45/303

  4545

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

•  Attributs et Méthodes finaux: Attributs et Méthodes finaux: – Pourquoi des classesPourquoi des classes final final ??

• Pour la SécuritéPour la Sécurité, afin que les caractéristiques de ses, afin que les caractéristiques de ses

instances ne soient pas modifiables. Cela interdit leur sous-instances ne soient pas modifiables. Cela interdit leur sous-classement et la création d ’instance différentesclassement et la création d ’instance différentes

• Pour des raisons d ’efficacitéPour des raisons d ’efficacité, le fait d ’avoir seulement, le fait d ’avoir seulement

des instances de cette classe (et non de ses sous classes)des instances de cette classe (et non de ses sous classes)dans le système permet de les optimiserdans le système permet de les optimiser

Page 46: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 46/303

  4646

1.5. Attributs, Méthodes et Classes1.5. Attributs, Méthodes et Classes

•  Attributs et Méthodes finaux: Attributs et Méthodes finaux: – Les méthodes sont déclaréesLes méthodes sont déclarées final final pour optimiser lespour optimiser les

performances.performances.

 – Le code des méthodes déclaréesLe code des méthodes déclarées final final est placéest placédirectement au milieu du code de la méthode quidirectement au milieu du code de la méthode quil'appelle (le compilateur "sait" que ce code ne pourral'appelle (le compilateur "sait" que ce code ne pourrani être "sous-classé" ni dupliqué: polymorphisme) :ni être "sous-classé" ni dupliqué: polymorphisme) :

i.e. commande "inline" de C++i.e. commande "inline" de C++ – final final est très utile pour les méthodes d'accès auxest très utile pour les méthodes d'accès aux

attributs (recommandé en POO)attributs (recommandé en POO)

Page 47: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 47/303

  4747

• Structure lexicale:Structure lexicale: – Identificateurs:Identificateurs:

• une lettre puis combinaison alphanumérique "_","$"une lettre puis combinaison alphanumérique "_","$"

 – lettre=lettre=caractère unicode (Exemple : int µ = 10;)caractère unicode (Exemple : int µ = 10;)

 – Java distingue majuscules et minuscules.Java distingue majuscules et minuscules.• Exemple: V différent de vExemple: V différent de v

 – Terminateur ";"Terminateur ";" – CommentairesCommentaires

• // pour une ligne de commentaire // pour une ligne de commentaire• /* commentaires */ pour plusieurs lignes /* commentaires */ pour plusieurs lignes

• /** Documentation de classe et méthodes */ /** Documentation de classe et méthodes */avadoc(javadoc)

1.6. Programmation de base1.6. Programmation de base

Page 48: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 48/303

  4848

• Conventions de codage:Conventions de codage: – Nommage des variables, champs etNommage des variables, champs et

méthodesméthodes• En Java, un identificateur commence par desEn Java, un identificateur commence par des

lettres minuscules.lettres minuscules. – Exemple: getExemple: get()()

• Si l'identificateur contient plus qu'un mot, leSi l'identificateur contient plus qu'un mot, le

premier sera en minuscule, les suivantspremier sera en minuscule, les suivantscommencent par une majusculecommencent par une majuscule – Exemple:Exemple: getgetSString()tring()

1.6. Programmation de base1.6. Programmation de base

Page 49: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 49/303

  4949

• Conventions de codage:Conventions de codage: – Nommage des constantesNommage des constantes

• une constante doit être en lettre capitalesune constante doit être en lettre capitales – class ConstClass {class ConstClass { finalfinal intint MAXSIZEMAXSIZE = 100; }= 100; }

 – Nommage des classesNommage des classes• Le nom des classes commence toujours parLe nom des classes commence toujours par

une lettre majusculeune lettre majuscule – classclass CConstClass { final intonstClass { final int MAXSIZE = 100; }MAXSIZE = 100; } – classclass IIndexndexOOututOOf f BBoundsoundsEException {…}xception {…}

1.6. Programmation de base1.6. Programmation de base

Page 50: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 50/303

Page 51: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 51/303

  5151

• Types de données:Types de données: – Les tableaux:Les tableaux:

• Syntaxes:Syntaxes: – typeTab nomTab[];typeTab nomTab[]; ou bienou bien typeTab[] nomTab;typeTab[] nomTab;

nomTab[]=new typeTab[nb_elements];nomTab[]=new typeTab[nb_elements];

 – typeTab nomTab[]= new typeTab[nb_elements];typeTab nomTab[]= new typeTab[nb_elements];

 – typeTab nomTab[]= {liste éléments};typeTab nomTab[]= {liste éléments};

• Propriétés:Propriétés:

 – Si le type est une classe, ses filles sont admisesSi le type est une classe, ses filles sont admises – 1er élément d ’un tableau à l ’indice 01er élément d ’un tableau à l ’indice 0 – Dimension fixe d ’un tableau; Propriété ‘ length ’ Dimension fixe d ’un tableau; Propriété ‘ length ’  – Tableaux mono dimensionnels par définitionTableaux mono dimensionnels par définition – Tableaux multidimensionnels supportésTableaux multidimensionnels supportés

– Les classesLes classes

1.6. Programmation de base1.6. Programmation de base

Page 52: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 52/303

  5252

• Les constantes:Les constantes: – Pour déclarer une constante, utiliser le mot cléPour déclarer une constante, utiliser le mot clé

final final à l ’intérieur d ’une classeà l ’intérieur d ’une classe – Exemple:Exemple:

public class test {public class test {final int MAX = 20;final int MAX = 20;}}

1.6. Programmation de base1.6. Programmation de base

Page 53: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 53/303

  5353

• Les opérateurs:Les opérateurs: – Supportés par les objets:Supportés par les objets: "=", "==", "!=""=", "==", "!="  – Cas particulier de la classe String:Cas particulier de la classe String: "+", "+=""+", "+="  – Pas de surcharge des opérateursPas de surcharge des opérateurs – Affectation: types primitifs et objets Affectation: types primitifs et objets – Opérateurs arith., de décalage et relationnels: COpérateurs arith., de décalage et relationnels: C

 – Opérateurs logiques:Opérateurs logiques:• MéthodeMéthode equals() equals() : compare l'égalité de deux objets: compare l'égalité de deux objets• Pour l’égalité de contenu:Pour l’égalité de contenu:

 – À surcharger pour les classes <> String À surcharger pour les classes <> String

– Conversion implicite: promotion numériqueConversion implicite: promotion numérique

1.6. Programmation de base1.6. Programmation de base

Page 54: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 54/303

  5454

• Les instructions:Les instructions: – Instructions de testInstructions de test

 – Instructions répétitivesInstructions répétitives – Instructions continue et break Instructions continue et break 

• i.e. langage Ci.e. langage C

1.6. Programmation de base1.6. Programmation de base

Page 55: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 55/303

  5555

• Les instructions:Les instructions: – Instructions de testInstructions de test

 – Instructions répétitivesInstructions répétitives – Instructions continue et break Instructions continue et break 

• i.e. langage Ci.e. langage C

1.6. Programmation de base1.6. Programmation de base

Page 56: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 56/303

Page 57: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 57/303

  5757

• Classes enveloppes, classes d’emballage:Classes enveloppes, classes d’emballage:type élémentaire:type élémentaire: classe d’emballage:classe d’emballage:

booleanboolean  java.lang.Boolean java.lang.Booleancharchar  java.lang.Char java.lang.Charbytebyte  java.lang.Byte java.lang.Byteshortshort  java.lang.Short java.lang.Short

intint  java.lang.Integer java.lang.Integerlonglong  java.lang.Long java.lang.Longfloatfloat  java.lang.Float java.lang.Floatdoubledouble  java.lang.Double java.lang.Double

1.7. Classes enveloppes

Page 58: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 58/303

Page 59: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 59/303

Page 60: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 60/303

  6060

• Classes enveloppes, classes d’emballage:Classes enveloppes, classes d’emballage: – Conversions de String en nombres:Conversions de String en nombres:

• la méthode valueOf(): convertit une chaîne etla méthode valueOf(): convertit une chaîne etretourne un objetretourne un objet

• exemple:exemple:String s= “159”;String s= “159”;

Integer I = Integer.valueOf(s);Integer I = Integer.valueOf(s);Integer I = Integer.valueOf(s,16); //Integer I = Integer.valueOf(s,16); // par défaut base 10par défaut base 10

1.7. Classes enveloppes

Page 61: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 61/303

Page 62: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 62/303

  6262

• La classe StringBuffer:La classe StringBuffer: – manipule les chaînes de caractères variablesmanipule les chaînes de caractères variables

 – méthodes:méthodes:• charAt(): retourne un caractèrecharAt(): retourne un caractère• length(): nombre de caractères dans la chaînelength(): nombre de caractères dans la chaîne• capacity(): espace mémoire total allouécapacity(): espace mémoire total alloué

• append(): concatène en fin de chaîneappend(): concatène en fin de chaîne• insert(): insère une chaîneinsert(): insère une chaîne

 – Opérateur de concaténation de chaînes: +Opérateur de concaténation de chaînes: +

1.7. Classes enveloppes

Page 63: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 63/303

  6363

• La classe StringBuffer:La classe StringBuffer: – exemple: inversion de chaîneexemple: inversion de chaîne

class ReverseString {class ReverseString {public static String reverseIt(String source){public static String reverseIt(String source){int i;int i;int len = source.length();int len = source.length();StringBuffer dest = new StringBuffer(len);StringBuffer dest = new StringBuffer(len);for (i=len-1; i>=0; i--) {for (i=len-1; i>=0; i--) {

dest.append (source.charAt(i));dest.append (source.charAt(i));}}return dest.toString();return dest.toString();

}}}}

1.7. Classes enveloppes

Page 64: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 64/303

  6464

• La classe StringBuffer:La classe StringBuffer: – la méthode toString():la méthode toString():

• toString(): convertit l’objet en son équivalent StringtoString(): convertit l’objet en son équivalent String – exemple: insertion de chaîneexemple: insertion de chaîne

StringBuffer sb = new StringBuffer(“Drink Java!”);StringBuffer sb = new StringBuffer(“Drink Java!”);

sb.insert (6,”Hot “);sb.insert (6,”Hot “);System.out.println(sb.toString());System.out.println(sb.toString());

affiche la chaîne: “Drink Hot Java!” affiche la chaîne: “Drink Hot Java!” 

1.7. Classes enveloppes

Page 65: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 65/303

  6565

• Les vecteurs:Les vecteurs: – Classe de la bibliothèque Java: java.util.VectorClasse de la bibliothèque Java: java.util.Vector –

Tableau extensible d’objetsTableau extensible d’objets (éléments de type Object)(éléments de type Object)

 – Transtypage pour récupérer un élément duTranstypage pour récupérer un élément duvecteurvecteur

 – Constructeurs:Constructeurs:

new Vector()new Vector()  //capacité 10, taille *2 à chaque dépassement //capacité 10, taille *2 à chaque dépassementnew Vector(int capacité)new Vector(int capacité)  // capacité potentielle initiale n // capacité potentielle initiale nnew Vector(int capacité; int incr)// capacité potentielle capacité,new Vector(int capacité; int incr)// capacité potentielle capacité,

 // +incr à chaque dépassement // +incr à chaque dépassement

Remarque: Estimation correcte, pour une bonneRemarque: Estimation correcte, pour une bonne

performanceperformance

1.7. Classes enveloppes

Page 66: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 66/303

  6666

• Les vecteurs:Les vecteurs: – Méthodes:Méthodes:

Exemple:Vector MyNumber=new Vector();Integer ThirtyThree = new Integer(33);MyNumber.addElement(ThirtyThree);Integer ThirtyFour = new Integer(34);

String s = “chaine”; MyNumber.addElement(ThirtyFour);MyNumber.insertElementAt(s,1);int i = MyNumber.indexOf(ThirtyFour); //i==2; -1 sinonMyNumber.removeElement(s); i=MyNumber.size(); //taille du vecteur 

33

34

33

s34

33

34

0

12

1.7. Classes enveloppes

Page 67: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 67/303

  6767

Les vecteurs: Test de performance:

Pentium 200 MHx, 96 Mo, 100000 éléments

 Allocation des éléments d’un vecteur: 17910 msec

 Allocation des éléments d’un tableau: 4220 msec

  Accès aux éléments d’un vecteur: 18130 msec

  Accès aux éléments d’un tableau: 10110 msec

1.7. Classes enveloppes

Page 68: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 68/303

  6868

• La classe Date (version 1.1):La classe Date (version 1.1): – constructeurs:constructeurs:

• Date now = new Date;Date now = new Date;

• Date d1=new Date(year, month, day);Date d1=new Date(year, month, day);• Date d2=new Date(year, month, day,hour,min,sec);Date d2=new Date(year, month, day,hour,min,sec);• Date bigBang=new Date(OL); // 1er Janvier 1970Date bigBang=new Date(OL); // 1er Janvier 1970

 – méthodes:méthodes:• getYear();setYear();getMonth();setMonth();getDay();setDay();getYear();setYear();getMonth();setMonth();getDay();setDay();• getHour();setHour();getMinutes();setMinutes();getSeconds();getHour();setHour();getMinutes();setMinutes();getSeconds();

setSeconds();before(); after(); equals();setSeconds();before(); after(); equals();

• Autre classe: GregorianCalendar Autre classe: GregorianCalendar

1.7. Classes enveloppes

Page 69: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 69/303

  6969

• La classe java.util.Random:La classe java.util.Random: – Générateur de nombres aléatoiresGénérateur de nombres aléatoires

 – Utilise une valeur initiale (seed) de 48 bitsUtilise une valeur initiale (seed) de 48 bits – Exemple:Exemple:• long seed = myseed;long seed = myseed;• Random rnums=new Random(seed);Random rnums=new Random(seed);

• Méthodes:Méthodes: – nextInt():nextInt(): -2147483648 et +2147483647-2147483648 et +2147483647 – nextLong():nextLong(): -9.2. 10^18 et + 9.2. 10^18-9.2. 10^18 et + 9.2. 10^18 – nextFloat():nextFloat(): entre -1.0 et +1.0entre -1.0 et +1.0 – nextDouble():nextDouble(): entre -1.0 et +1.0entre -1.0 et +1.0

1.7. Classes enveloppes

Page 70: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 70/303

  7070

2. Héritage & Règles de visiblité2. Héritage & Règles de visiblité

2.1. Héritage2.1. Héritage

2.2. Règles de visibilité2.2. Règles de visibilité

Page 71: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 71/303

Page 72: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 72/303

  7272

2.1.2.1. HéritageHéritage

• Syntaxe:Syntaxe: – Se définit avec le mot clé :Se définit avec le mot clé : extends extends 

• LesLes constructeurs ne sont pas héritésconstructeurs ne sont pas hérités• Appel du constructeur de la classe héritée Appel du constructeur de la classe héritée super()super() obligatoireobligatoire

• Restriction au niveau des accèsRestriction au niveau des accès

 – Exemple:Exemple: class Bateaux {

String nomb ;

Bateaux(String nom){

nomb=nom; } }

 public class Voiliers extends Bateaux {

Voiliers(String s){super(s);}

}

Page 73: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 73/303

  7373

2.1. Héritage2.1. Héritage

•  Activation des méthodes de la classe mère Activation des méthodes de la classe mère – Redéfinition de méthode héritée: ajout duRedéfinition de méthode héritée: ajout du

comportement à la définition initiale et non la masquercomportement à la définition initiale et non la masquer

: évite de dupliquer un comportement.: évite de dupliquer un comportement. – L'appel de la méthode initiale utilise le mot cléL'appel de la méthode initiale utilise le mot clé super super  qui transmet l'appel à la hiérarchie des classesqui transmet l'appel à la hiérarchie des classes

• Exemple: dans une classe filleExemple: dans une classe fillevoid myMethode (String a, String b) {

// faire quelque chose ici

super.myMethode(a,b); // appel du comportement déjà défini

// faire quelque chose de plus ici}

NomClassDerivee(){super (...);//doit être la 1ère ligne

}

Page 74: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 74/303

Page 75: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 75/303

Page 76: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 76/303

  7676

2.1. Héritage2.1. Héritage

• Exemple 2: la classe ClassExemple 2: la classe Class – Identification de type à l’exécution: mémorise la classeIdentification de type à l’exécution: mémorise la classe

à laquelle chaque objet appartientà laquelle chaque objet appartient

 – Employée par Java afin de sélectionner les méthodesEmployée par Java afin de sélectionner les méthodescorrectes lors des appels de méthodescorrectes lors des appels de méthodes – Valeur de retour de la méthode: getClass() Valeur de retour de la méthode: getClass() – Méthodes associées:Méthodes associées:

String getName()String getName() String toString()String toString()Class getSuperclass()Class getSuperclass() boolean isInterface()boolean isInterface()Class[] getInterfaces()Class[] getInterfaces() Object newInstance() *Object newInstance() *

static Class forName(String className)static Class forName(String className) – Exercice 1: Ecrire un programme Java qui affiche les propriétésExercice 1: Ecrire un programme Java qui affiche les propriétés

d’une classe dont le nom est lu au clavierd’une classe dont le nom est lu au clavier

Page 77: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 77/303

  7777

• Encapsulation:Encapsulation: – Quatre modificateurs ou niveaux de contrôleQuatre modificateurs ou niveaux de contrôle

de l'encapsulation (de protection):de l'encapsulation (de protection):

• privateprivate: visibilité limitée à la: visibilité limitée à la classeclasse

• protectedprotected : visibilité limitée aux: visibilité limitée aux sous-classessous-classes etetaux membres d'un même packageaux membres d'un même package

• packagepackage : visibilité limitée aux membres d'un: visibilité limitée aux membres d'un

(friendly)(friendly) même packagemême package• publicpublic : visible par toutes les classes: visible par toutes les classes etet

packagespackages

2.2. Règles de visibilité2.2. Règles de visibilité

Page 78: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 78/303

Page 79: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 79/303

Page 80: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 80/303

  8080

• Règle de visibilité:Règle de visibilité: “ “private” (limité à une classe)private” (limité à une classe)

 – exemple 2:exemple 2:class alpha {

private int iamprivate;boolean isEqualTo(alpha Anotheralpha){

if (this.iamprivate == anotheralpha.iamprivate)return trueelse

return false;}

}

2.2. Règles de visibilité2.2. Règles de visibilité

Page 81: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 81/303

  8181

• Règle de visibilité:Règle de visibilité: “ “protected” protected” (limité à une hiérarchie de classe)(limité à une hiérarchie de classe)

 – Restriction de la visibilité d'un champ ou d'uneRestriction de la visibilité d'un champ ou d'uneméthode d'une classe aux méthodes de laméthode d'une classe aux méthodes de laclasse elle-même et àclasse elle-même et à ses descendantes ses descendantes 

 – Manipulation de variable/méthode de la classeManipulation de variable/méthode de la classe

fille, protégée ds la classe mère: toléréfille, protégée ds la classe mère: toléré – Manipulation de variable/méthode de la classeManipulation de variable/méthode de la classemère, déclarée protégée ds celle-ci: inhibémère, déclarée protégée ds celle-ci: inhibé

 – Les classes d'un même package voient lesLes classes d'un même package voient les

champs/méthodes protégées d'autres classeschamps/méthodes protégées d'autres classes

2.2. Règles de visibilité2.2. Règles de visibilité

Page 82: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 82/303

  8282

• Règle de visibilité:Règle de visibilité: “ “protected” protected” (limité à une hiérarchie de classe)(limité à une hiérarchie de classe)

 – exemple:exemple:package Greek;class alpha{

protected int iamprotected;protected void protected_Method(){

System.out.println(“Protected Method”);}

}package Greek;class gamma{

void access_Method(){alpha a = new alpha();a.iamprotected = 10; // legala.protected_Method(); // legal

}}

2.2. Règles de visibilité2.2. Règles de visibilité

Page 83: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 83/303

Page 84: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 84/303

Page 85: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 85/303

Page 86: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 86/303

  8686

• Règle de visibilité:Règle de visibilité: “ “package” / “friendly” package” / “friendly” 

(limitée aux classes d’un même package)(limitée aux classes d’un même package) – exemple:exemple:

import java.util.*;

class Person { String nom; Date dnaiss;

// nom et dnaiss friendly pardéfaut

Person(String name, Date birthday){nom = name;dnaiss = birthday;

// OK Person est unconstructeur 

// de la classe Person

class Employe extends Person{ private float salaire;Employe(String name, Date birthday, float sal){

super(name, birthday); salaire = sal;

//OK : champs nom et dnaiss friendly}}

class TestPrivate{public static void main(String[] args){Person p = new Person(“Ali", new Date(12,12,1942));p.nom = “Ali"; System.out.println(p.nom);// OK si TestPrivate est dans le même package}}

2.2. Règles de visibilité2.2. Règles de visibilité

Page 87: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 87/303

Page 88: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 88/303

Page 89: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 89/303

Page 90: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 90/303

Page 91: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 91/303

Page 92: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 92/303

Page 93: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 93/303

l h

Page 94: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 94/303

  9494

3. Polymorphisme3. Polymorphisme

• Conversion d’objets: casting impliciteConversion d’objets: casting impliciteEn Java, doit se faire de façon explicite, sauf:En Java, doit se faire de façon explicite, sauf:

 – enen cas de promotion numériquecas de promotion numérique

• Les types plusLes types plus petits petits peuvent être affectés aux pluspeuvent être affectés aux plus gros gros sanssansencombre.encombre.• Ex :Ex : longlong peut être affecté àpeut être affecté à doubledouble

 – enen cas d'inclusioncas d'inclusion de typesde typesSoit T2 inclus dans dans T1. Les déclarations suivantesSoit T2 inclus dans dans T1. Les déclarations suivantes

sont licites.sont licites.T1 v1; T2 v2 ;T1 v1; T2 v2 ;v1 = v2 ; // Affectation légale sans conversion explicitev1 = v2 ; // Affectation légale sans conversion explicite

Page 95: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 95/303

3 P l hi

Page 96: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 96/303

  9696

3. Polymorphisme3. Polymorphisme

• Conversion d’objets: casting expliciteConversion d’objets: casting explicite – ExempleExemple

// Casting explicitepublic class Bateaux {String nomb ;Bateaux(String nom){nomb=nom;}

public static void main(String argv[]){Bateaux aurore = new Bateaux("Aurore");Voiliers gramma= new Voiliers("Gramma");

BateauxAMoteurs bam =new BateauxAMoteurs("BAM");aurore = gramma;//OK voiliers < Bateaux gramma = (Voiliers)aurore;//OK car aurore est un voilier

  bam = (BateauxAMoteurs) aurore;  //Conversion impossible//Exception générée:ClassCastExeception

}

class Voiliers extends Bateaux {

Voiliers(String nom1){super(nom1);}

}

class BateauxAMoteurs extends Bateaux {BateauxAMoteurs(String nom1){super(nom1);}

}

l h3 P l hi

Page 97: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 97/303

  9797

3. Polymorphisme3. Polymorphisme

• Conversion d’objets : casting expliciteConversion d’objets : casting explicite – L’opérateur ‘instanceof’:L’opérateur ‘instanceof’:

 – Il permet de déterminer à l ’exécution le typeIl permet de déterminer à l ’exécution le typed ’un objetd ’un objet – Afin d ’éviter des conversions explicites Afin d ’éviter des conversions explicites

erronées d ’un type de base vers une de seserronées d ’un type de base vers une de ses

filles, il peut être judicieux d ’utiliser ‘filles, il peut être judicieux d ’utiliser ‘instanceof’ instanceof’  – Une exception ClassCastException est généréeUne exception ClassCastException est généréesi le casting est illégalsi le casting est illégal

Page 98: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 98/303

Page 99: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 99/303

Page 100: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 100/303

Page 101: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 101/303

Page 102: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 102/303

Page 103: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 103/303

  103103

• Définition:Définition: – méthode abstraite :méthode abstraite :

• n’est pas implémentée: seul son prototype figuren’est pas implémentée: seul son prototype figure

• implémentation faite par surcharge lors deimplémentation faite par surcharge lors del’héritagel’héritage

 – classe abstraite :classe abstraite :• contient au moins une méthode abstraitecontient au moins une méthode abstraite

(par manque d’information)(par manque d’information)• ne peut être instanciéene peut être instanciée

4.1. Classes abstraites4.1. Classes abstraites

Page 104: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 104/303

  104104

• Propriétés:Propriétés: – Ne p.e. instanciée, doit être étendue pour utilisationNe p.e. instanciée, doit être étendue pour utilisation – Une sous-classe d’une classe abstraite sera abstraite siUne sous-classe d’une classe abstraite sera abstraite si

elle ne définit pas toute méthode abstraite héritéeelle ne définit pas toute méthode abstraite héritée• Utilité:Utilité: – Permet de définir des méthodes communes dontPermet de définir des méthodes communes dont

l’implémentation diffère d’une sous-classe à l’autrel’implémentation diffère d’une sous-classe à l’autre

 – Ex: propriétés des figures géométriquesEx: propriétés des figures géométriques

4.1. Classes abstraites4.1. Classes abstraites

Page 105: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 105/303

Page 106: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 106/303

Page 107: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 107/303

  107107

•  Application: Application:• La classe EllipseLa classe Ellipse

 –

4.1. Classes abstraites4.1. Classes abstraites

class Ellpse extends Forme {private int grandAxe, petitAxe;Ellpise(int grandAxe, int petitAxe){

this.grandAxe=grandAxe; this.petitAxe=petitAxe;}float perimetre(){

float resultat = 0;float pcarre = petitAxe*petitAxe;float gcarre = grandAxe*grandAxe;float sinus,cosinus;

for (int i=0; i<1000; i++) {sinus=(float) Math.sin(i*Math.PI/2000);cosinus=(float) Math.cos(i*Math.PI/2000);resultat += Math.sqrt(pcarre*sinus*sinus+

gcarre*cosinus*cosinus);}resultat*=4*Math.PI/2000;return resultat;

}...

Page 108: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 108/303

  108108

•  Application: Application:• La classe EllipseLa classe Ellipse

 –

4.1. Classes abstraites4.1. Classes abstraites

...float surface(){

return (float) Math.PI*petitAxe*grandAxe;}public String toString() {

return(“L’ellipse de grand axe ”+grandAxe+” et de petit axe “+petitAxe);

}}

Page 109: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 109/303

  109109

•  Application: Application: – La classe RectangleLa classe Rectangle

4.1. Classes abstraites4.1. Classes abstraites

class Rectangle extends Forme {

private int longuer, largeur;

Rectangle(int longueur, int largeur) {

this.longueur=longueur;

this.largeur=largeur;

}

float perimetre() {

return 2*(longueur+largeur);

}public String toString(){

return (“Le rectangle de longueur “+longueur

+” et de largeur “+largeur);

}

}

Page 110: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 110/303

4 2 Interface4 2 Interface

Page 111: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 111/303

  111111

4.2. Interface4.2. Interface

• Problématique de l’héritage multiple:Problématique de l’héritage multiple: – Java supporte uniquement l'héritage simpleJava supporte uniquement l'héritage simple

 – Problèmes de l'héritage multiple:Problèmes de l'héritage multiple:

Float x, y;void afficher()

Void afficher()

Color coul;void afficher()

Class Point Class Couleur  

Classe Point coloré

Classe A

Classe B Classe C

Classe D

Int x, y;

Int x, x, y, y;

Les conflits de nommage La redondance de données(héritage en diamant)

4 2 Interfaces4 2 Interfaces

Page 112: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 112/303

  112112

4.2. Interfaces4.2. Interfaces

• Définition:Définition: – Spécification du comportement d’un objetSpécification du comportement d’un objet – Classe Java ne possédant que des méthodesClasse Java ne possédant que des méthodes

abstraites et des champs finaux (constants).abstraites et des champs finaux (constants).• Syntaxe:Syntaxe:

 – Un nom d’interface peut être utilisé comme unUn nom d’interface peut être utilisé comme un

nom de classe.nom de classe. – Si I est une interface, la déclaration “I i” Si I est une interface, la déclaration “I i” référencera par la variable “i” n’importe quelréférencera par la variable “i” n’importe quelobjet d’une classe implémentant l’interface “I” objet d’une classe implémentant l’interface “I” 

Page 113: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 113/303

  113113

• Propriétés:Propriétés: – LesLes méthodes abstraites doivent toutes être méthodes abstraites doivent toutes être 

implémentées implémentées par la classe qui en héritepar la classe qui en hérite

 – Les interfacesLes interfaces permettent de simuler une sorte permettent de simuler une sorte d'héritage multiple d'héritage multiple sans ses inconvénientssans ses inconvénients – Les interfacesLes interfaces fournissent une interface fournissent une interface 

générique adaptable générique adaptable à chaque classe qui enà chaque classe qui en

héritehérite – Toutes les méthodes d'une interface sont parToutes les méthodes d'une interface sont pardéfaut ‘public’: une classe qui implémente unedéfaut ‘public’: une classe qui implémente uneinterface devra déclarer ‘public’ les méthodesinterface devra déclarer ‘public’ les méthodes

de l’interface qu’elle définirade l’interface qu’elle définira

4.2. Interfaces4.2. Interfaces

Page 114: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 114/303

Page 115: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 115/303

  115115

• Exemple: Dessin de cercles et de carrés:Exemple: Dessin de cercles et de carrés: – L’interface TracableL’interface Tracable – La classe CercleLa classe Cercle – La classe CercleGraphiqueLa classe CercleGraphique – La classe CarréLa classe Carré – La classe CarréGraphiqueLa classe CarréGraphique

 – Un tableau de TracablesUn tableau de Tracables

4.2. Interfaces4.2. Interfaces

4 2 Interfaces4 2 Interfaces

Page 116: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 116/303

  116116

4.2. Interfaces4.2. Interfaces

• Exemple: Dessin de cercles et de carrés:Exemple: Dessin de cercles et de carrés: – L’interface TracableL’interface Tracable

 – Remarque:Remarque:• java.awt.Graphics java.awt.Graphics

interface Tracable {

static final int DIM_MAX = 500;

void dessine(java.awt.Graphics g);

}

4 2 Interfaces4 2 Interfaces

Page 117: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 117/303

  117117

4.2. Interfaces4.2. Interfaces

• Exemple: Dessin de cercles et de carrés:Exemple: Dessin de cercles et de carrés: – La classe CercleLa classe Cercle

class Cercle {

private int rayon;Cercle(int rayon) {

this.rayon=rayon;

}

static double circonference(Cercle cercle) {

return 2*Math.PI*cercle.rayon;

}double circonference() {return 2*Math.PI*rayon;

}

int getRayon() {return rayon;

}

}

Page 118: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 118/303

Page 119: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 119/303

4 2 Interfaces4 2 Interfaces

Page 120: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 120/303

  120120

4.2. Interfaces4.2. Interfaces

• Exemple: Dessin de cercles et de carrés:Exemple: Dessin de cercles et de carrés: – La classe CarréGraphiqueLa classe CarréGraphiqueimport java.awt.*;

class CarreGraphique extends Carre implements Tracable {int x,y;

Polygon carre=new Polygon();

java.awt.Color couleur=color.black;

CarreGraphique(int cote,int x,int y){

super(cote);

this.x=x;this.y=y;carre.addPoint(x-cote/2,y-cote/2);carre.addPoint(x+cote/2,y-cote/2);

carre.addPoint(x+cote/2,y+cote/2);

carre.addPoint(x-cote/2,y+cote/2);carre.addPoint(x-cote/2,y-cote/2);

}

...

4 2 Interfaces4 2 Interfaces

Page 121: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 121/303

  121121

4.2. Interfaces4.2. Interfaces

• Exemple: Dessin de cercles et de carrés:Exemple: Dessin de cercles et de carrés: – La classe CarréGraphiqueLa classe CarréGraphique

...CarreGraphique(int cote,int x,int y, Color couleur{

this(cote,x,y);

this.couleur=couleur;}

public void dessine(java.awt.Graphics g){

if (cote < DIM_MAX) {

g.setColor(couleur);g.drawPolygon(carre);

}

}

}

4 2 Interfaces4 2 Interfaces

Page 122: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 122/303

  122122

4.2. Interfaces4.2. Interfaces

• Exemple: Dessin de cercles et de carrés:Exemple: Dessin de cercles et de carrés: – Un tableau de TracablesUn tableau de Tracables

import java.awt.*;class EssaiTracable extends Frame {

Tracable[] desFormes = new Tracable[5];EssaiTracable(String titre){super(titre);desFormes[0] = new CercleGraphique(150,200,200,Color.orange);desFormes[1] = new CercleGraphique(20,130,150,Color.blue);desFormes[2] = new CercleGraphique(20,270,150,Color.blue);desFormes[3] = new CarreGraphique(20,200,220,Color.magenta);desFormes[4] = new CarreGraphique(30,200,300,Color.pink);}public void paint(Graphics g) {for (int i=0;i<desFormes.length;i++)desFormes[i].dessine(g);}public static void main(String[] args) {EssaiTracable monDessin=new EssaiTracable(“une tete”);monDessin.setSize(400,400);monDessin.setVisible(true);}

}

Page 123: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 123/303

4 3 Cl i4 3 Cl i t

Page 124: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 124/303

  124124

4.3. Classes internes4.3. Classes internes

• Définition:Définition: – Classe définie à l’intérieur d’une autre classeClasse définie à l’intérieur d’une autre classe

• Raisons:Raisons:

 – Un objet d’une classe interne peut accéder àUn objet d’une classe interne peut accéder àl’implémentation de l’objet qui l’a créé – y comprisl’implémentation de l’objet qui l’a créé – y comprisles données privées –.les données privées –.

 – Les classes internes peuvent être cachées auxLes classes internes peuvent être cachées auxautres classes du même package.autres classes du même package.

 – Les classes internes sont très pratiques lorsqu’onLes classes internes sont très pratiques lorsqu’onécrit des gestionnaires d’évènementsécrit des gestionnaires d’évènements

 – Classes internes anonymes: utiles pour définir desClasses internes anonymes: utiles pour définir descallbacks (mécanisme de communication entre unecallbacks (mécanisme de communication entre une

classe courante et la classe appelante)classe courante et la classe appelante)

4 3 Cl i t4 3 Cl i t

Page 125: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 125/303

  125125

4.3. Classes internes4.3. Classes internes

• Une interface Property:Une interface Property: – Construction d’un éditeur de propriété: fiche quiConstruction d’un éditeur de propriété: fiche qui

présente les propriétés de divers objets et permetprésente les propriétés de divers objets et permetde les modifier.de les modifier.

 – Propriété: ressource ayant un nom, une valeur, etPropriété: ressource ayant un nom, une valeur, etpermettant une nouvelle propriété.permettant une nouvelle propriété.

• Syntaxe:Syntaxe:interface Property {interface Property {

public String get();public String get();public void set(String s);public void set(String s);public String name();public String name();

}}

4 3 Cl i t4 3 Cl i t

Page 126: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 126/303

  126126

4.3. Classes internes4.3. Classes internes• Classe interne privée pour implémenter l’interfaceClasse interne privée pour implémenter l’interface PropertyProperty::

class Employee {class Employee {……private class SalaryProperty implements Propertyprivate class SalaryProperty implements Property

{private boolean isSet = false;{private boolean isSet = false;public String get() {…};public String get() {…};

public void set(String s) {…};public void set(String s) {…};

public String name() {…};public String name() {…};

}}public Property getSalaryProperty() {public Property getSalaryProperty() {

return new SalaryProperty();return new SalaryProperty();}}

}}

4 3 Cl i t4 3 Cl i t

Page 127: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 127/303

  127127

4.3. Classes internes4.3. Classes internes• Notation:Notation:

 – Implémentation des méthodes de la classe interne:Implémentation des méthodes de la classe interne:La méthode set():La méthode set():

public void set(String s)public void set(String s)

{{if (if (this.this.isSet) return;isSet) return;double sal = Double.parseDouble(s);double sal = Double.parseDouble(s);if (sal >0) {if (sal >0) {

  Employee.this.Employee.this.salary = sal;salary = sal;

  this.this.isSet = true;isSet = true;}}

}}

4 3 Cl i t4 3 Cl i t

Page 128: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 128/303

  128128

4.3. Classes internes4.3. Classes internes

• Représentation d’un objet d’une classe interne:Représentation d’un objet d’une classe interne: – Un objet d’une classe interne obtient toujours uneUn objet d’une classe interne obtient toujours une

référence implicite vers à l’objet créateur (pour pouvoirréférence implicite vers à l’objet créateur (pour pouvoir

accéder aux champs de l’objet externe qui a créé l’objetaccéder aux champs de l’objet externe qui a créé l’objetinterne).interne).

4 3 Cl i t4 3 Cl i t

Page 129: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 129/303

  129129

4.3. Classes internes4.3. Classes internes• Utilité, nécessité et sécurité des classes internes: solutionUtilité, nécessité et sécurité des classes internes: solution

alternativealternativeclass Employee {class Employee {private String name; private double salary;private String name; private double salary; private Date hireDay;private Date hireDay;

public Property getSalaryProperty() {return new SalaryProperty();}public Property getSalaryProperty() {return new SalaryProperty();}}}class SalaryProperty implements Propertyclass SalaryProperty implements Property

{private boolean isSet = false;{private boolean isSet = false;public String get() {public String get() {return outer.salary;return outer.salary;}; //erreur: salary est private}; //erreur: salary est private

public void set(String s) {…};public void set(String s) {…};public String name() {…};public String name() {…};SalaryProperty(Employee o) { outer = o;}SalaryProperty(Employee o) { outer = o;}private Employee outer;private Employee outer;}}

Page 130: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 130/303

Page 131: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 131/303

4 3 Cl i t4 3 Classes internes

Page 132: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 132/303

  132132

4.3. Classes internes4.3. Classes internes• Classes internes locales et anonymes:Classes internes locales et anonymes:Si 1 seule instance de la classeSi 1 seule instance de la classeSalaryProperty sera créée, il n’est pas nécessaire de lui donner un nom:SalaryProperty sera créée, il n’est pas nécessaire de lui donner un nom:

class Employee {class Employee {

private String name;private double salary;private Date hireDay;private String name;private double salary;private Date hireDay;public Property getSalaryProperty() {public Property getSalaryProperty() {

return new Property() {return new Property() {private boolean isSet = false;private boolean isSet = false;

public String get() {return “”+salary;};public String get() {return “”+salary;};public void set(String s) {public void set(String s) {

if (isSet) return; double sal = Double.parseDouble(s);if (isSet) return; double sal = Double.parseDouble(s);if (sal >0) {salary = sal; isSet = true;};if (sal >0) {salary = sal; isSet = true;};public String name() {return name+”; salaire”;};public String name() {return name+”; salaire”;};

}}}}

}

4 3 Cl i t4 3 Classes internes

Page 133: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 133/303

  133133

h

4.3. Classes internes4.3. Classes internes• Classes locales accédant à des variables locales:Classes locales accédant à des variables locales:

 Autoriser le changement du salaire un nombre de fois limité: Autoriser le changement du salaire un nombre de fois limité:public Property getSalaryProperty(final int maxSetCount) {public Property getSalaryProperty(final int maxSetCount) {

{{ class SalaryProperty implements Property {class SalaryProperty implements Property {public String get() {return “”+salary;};public String get() {return “”+salary;};public void set(String s) {public void set(String s) {

if (setCount >= maxSetCount) return;if (setCount >= maxSetCount) return;double sal = Double.parseDouble(s);double sal = Double.parseDouble(s);if (sal >0) {salary = sal; setCount++;};if (sal >0) {salary = sal; setCount++;};

public String name() {return name+”; salaire”;};}public String name() {return name+”; salaire”;};}private int setCount = 0;private int setCount = 0;}}Property p = new SalaryProperty();Property p = new SalaryProperty();return p;return p;

}}

Page 134: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 134/303

4 4 Les collections4 4 Les collections

Page 135: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 135/303

  135135

4.4. Les collections4.4. Les collections

• Les interfaces de collectionLes interfaces de collection

• Les collections concrètesLes collections concrètes

• Le cadre des collectionsLe cadre des collections

4 4 Les collections4 4 Les collections

Page 136: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 136/303

  136136

4.4 Les collections4.4 Les collections

• Définition:Définition: – Ensemble de structures de données fournies enEnsemble de structures de données fournies en

packagespackages

 – Algorithmes associés pour manipuler ces sdd Algorithmes associés pour manipuler ces sdd• Enjeux:Enjeux: – Programmation plus rapide et aiséeProgrammation plus rapide et aisée – Meilleures performances:Meilleures performances:

• rapidité d’exécutionrapidité d’exécution• consommation mémoire minimaleconsommation mémoire minimale

 – Manipulation de données de grande tailleManipulation de données de grande taille – Disposition triée des donnéesDisposition triée des données

Contrôle de l’augmentation de la taille des donnéesContrôle de l’augmentation de la taille des données

Page 137: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 137/303

Page 138: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 138/303

Page 139: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 139/303

4 4 1 Les interfaces de collection4 4 1 Les interfaces de collection

Page 140: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 140/303

  140140

• L’itérateur:L’itérateur: – La méthode remove(): Elle supprime l’élément renvoyéLa méthode remove(): Elle supprime l’élément renvoyé

par le dernier appel à next()par le dernier appel à next()

Iterator it = c.iterator();Iterator it = c.iterator();it.next(); // sauter le premier élémentit.next(); // sauter le premier élémentit.remove(); // on peut maintenant le supprimerit.remove(); // on peut maintenant le supprimerit.remove(); //erreur il faut le précéder de it.next()it.remove(); //erreur il faut le précéder de it.next()

 – Pas de méthode add(): dans une collection, la position àPas de méthode add(): dans une collection, la position à

laquelle a lieu l’ajout n’a pas d’importancelaquelle a lieu l’ajout n’a pas d’importance

itérateurÉlément renvoyé

4.4.1. Les interfaces de collection4.4.1. Les interfaces de collection

4 4 1 Les interfaces de collection4 4 1 Les interfaces de collection

Page 141: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 141/303

  141141

• Exploitation des itérateurs et collections:Exploitation des itérateurs et collections: – Écriture de méthodes pratiques générales pouvantÉcriture de méthodes pratiques générales pouvant

travailler sur n’importe quel type de collection.travailler sur n’importe quel type de collection.

 – Exemple:Exemple:public static void print(Collection c) {public static void print(Collection c) {System.out.print(« [ » );System.out.print(« [ » );Iterator it = c.iterator();Iterator it = c.iterator();

while (it.hasNext())while (it.hasNext())System.out.print(it.next()+ « »);System.out.print(it.next()+ « »);System.out.print(« ] » );System.out.print(« ] » );}}

4.4.1. Les interfaces de collection4.4.1. Les interfaces de collection

Page 142: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 142/303

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 143: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 143/303

  143143

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

• Les listes chaînées: la classe LinkedListLes listes chaînées: la classe LinkedList – Collection classée (position des objetsCollection classée (position des objets

importante)importante)

• LinkedList.add ajoute un objet en fin de listeLinkedList.add ajoute un objet en fin de liste• sous-interface ListIterator de Iterator, contenantsous-interface ListIterator de Iterator, contenantadd (l’interface Iterator est insuffisante)add (l’interface Iterator est insuffisante)

 – En java, les listes sont doublement chaînées:En java, les listes sont doublement chaînées:

interface ListIterator extends Iterator {interface ListIterator extends Iterator {void add(Object); // l’ajout a toujours lieuvoid add(Object); // l’ajout a toujours lieuObject previous();Object previous();boolean hasPrevious();…boolean hasPrevious();…

}}

Page 144: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 144/303

Page 145: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 145/303

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 146: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 146/303

  146146

• Les tables de hachage: la classe HashSetLes tables de hachage: la classe HashSet – Les classes LinkedList et Array:Les classes LinkedList et Array:

• Avantage: Spécifier l’ordre dans lequel on désire Avantage: Spécifier l’ordre dans lequel on désireorganiser des élémentsorganiser des éléments

• Inconvénient: localisation lente de l’élément recherchéInconvénient: localisation lente de l’élément recherchési sa position est inconnuesi sa position est inconnue

 – La table de hachage:La table de hachage:• Définition: Structure de données associant à chaqueDéfinition: Structure de données associant à chaque

élément un code de hachage (nombre entier associé àélément un code de hachage (nombre entier associé àtout élément,dont le calcul est très rapide)tout élément,dont le calcul est très rapide)

• Avantage: localisation rapide de tout élément de liste Avantage: localisation rapide de tout élément de liste• Inconvénient: n’accorde pas d’importance à l’ordreInconvénient: n’accorde pas d’importance à l’ordre

des élémentsdes éléments

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 147: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 147/303

  147147

• Les tables de hachage: la classe HashSetLes tables de hachage: la classe HashSet – Structure: tableau de listes chaînéesStructure: tableau de listes chaînées

• 1 liste = 1 seau (panier ou bucket)1 liste = 1 seau (panier ou bucket)

• Localisation d’un élément:Localisation d’un élément:Position d’un élément dans la tablePosition d’un élément dans la table==

code de hachage – un modulo du nombre total de sotscode de hachage – un modulo du nombre total de sots

• Exemple: Objet: code de hachage = 345; 101 seaux;Exemple: Objet: code de hachage = 345; 101 seaux;position: reste 345/101=42position: reste 345/101=42• En cas de collision de hachage, il faut comparer avec lesEn cas de collision de hachage, il faut comparer avec les

objet existantsobjet existants

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 148: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 148/303

  148148

• Les tables de hachage: la classe HashSetLes tables de hachage: la classe HashSet – Caractéristiques d’un HashSet:Caractéristiques d’un HashSet:

• Capacité initiale: (101 par défaut)Capacité initiale: (101 par défaut)

 – Nombre premier; ~150% du nombre d’éléments prévuNombre premier; ~150% du nombre d’éléments prévu – Exemple: 100 éléments; capacité 151Exemple: 100 éléments; capacité 151

• Facteur de charge: (0.75 par défaut)Facteur de charge: (0.75 par défaut) – Taux de remplissage de la tableTaux de remplissage de la table – Au delà de cette valeur, la table est automatiquement Au delà de cette valeur, la table est automatiquement

réorganisée avec le double de seauxréorganisée avec le double de seaux• Constructeurs:Constructeurs: HashSet()HashSet()

HashSet(int i)HashSet(int i)HashSet(int i, float l)HashSet(int i, float l)

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

Page 149: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 149/303

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 150: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 150/303

  150150

• Les arbres de hachage: la classe TreeSetLes arbres de hachage: la classe TreeSet – Définition: collections triées par ordre croissantDéfinition: collections triées par ordre croissant – Ajout d’un élément plus lent que s’il fallait Ajout d’un élément plus lent que s’il fallait

l’ajouter dans une table de hachage, mais plusl’ajouter dans une table de hachage, mais plusrapide qu’un tableau trié ou liste chaînéerapide qu’un tableau trié ou liste chaînée – Performances:Performances:Nombre totalNombre total Nombre de mots HashSetNombre de mots HashSet TreeSetTreeSet

de mots:de mots: uniquesuniques2819528195 59095909 5 sec5 sec 7 sec7 sec466300466300 3754537545 75 sec75 sec 98 sec98 sec

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 151: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 151/303

  151151

• Les arbres de hachage: la classe TreeSetLes arbres de hachage: la classe TreeSet – Comparaison d’objets: fonction définie dansComparaison d’objets: fonction définie dans

l’interface java.lang.Comparable, définissant unel’interface java.lang.Comparable, définissant uneseule méthode: int compareTo(Object other)seule méthode: int compareTo(Object other)

 – À implémenter si comparaison d’objet définis par le À implémenter si comparaison d’objet définis par leprogrammeurprogrammeur

 – Exemple:Exemple:class Item implements Comparable {class Item implements Comparable {

public int compareTo(Object other)public int compareTo(Object other){{ Item otherItem = (Item) other;Item otherItem = (Item) other;return partNumber –otherItem.partNumber;return partNumber –otherItem.partNumber;

}}……

}}

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 152: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 152/303

  152152

• Les arbres de hachage: la classe TreeSetLes arbres de hachage: la classe TreeSet – Ressources:Ressources:

• java.lang.Comparable java.lang.Comparable

 – int compareTo(Object other)int compareTo(Object other)• java.util.Comparator java.util.Comparator – int compare(Object a, Object b)int compare(Object a, Object b)

• java.util.SortedSet java.util.SortedSet – Comparator comparator()Comparator comparator()

 – Object first()Object first() – Object last()Object last()

• java.util.TreeSet java.util.TreeSet – TreeSet(Comparator c)TreeSet(Comparator c)

TreeSet(SortedSet elements)TreeSet(SortedSet elements)

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

4 4 2 Les collections concrètes4 4 2 Les collections concrètes

Page 153: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 153/303

  153153

• Les cartes: les classes HashMap et TreeMapLes cartes: les classes HashMap et TreeMap – Définition: collections de paires (valeursDéfinition: collections de paires (valeurs

indexées par des clés)indexées par des clés)

 – Extraction d’une vue d’une carte; 3 vues:Extraction d’une vue d’une carte; 3 vues:• Ensemble des clés: Set keySet()Ensemble des clés: Set keySet()

• Ensemble des valeurs: Collection values()

• Ensemble des paires clés/valeurs: Set entrySet()

4.4.2. Les collections concrètes4.4.2. Les collections concrètes

5. Exceptions5. Exceptions

Page 154: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 154/303

  154154

pp

• ProblématiqueProblématique – Traitement des erreurs sémantiquesTraitement des erreurs sémantiques• ErreursErreurs syntaxiques détectées à la compilation syntaxiques détectées à la compilation ..• ErreursErreurs sémantiques sémantiques uniquementuniquement à l'exécution à l'exécution :: à traiterà traiter

 – Principales approches de traitement des erreursPrincipales approches de traitement des erreurs• Test des codes de retour (ex. C) à l'appel de chaque fonctionTest des codes de retour (ex. C) à l'appel de chaque fonction• Utilisation des exceptionsUtilisation des exceptions

 – Inconvénients du traitement des erreurs par leInconvénients du traitement des erreurs par le

test des codes de retourtest des codes de retour• Risque d'oubli du traitement des valeurs de retourRisque d'oubli du traitement des valeurs de retour• Forte déperdition de code liée à des tests multiplesForte déperdition de code liée à des tests multiples• Programme souvent peut lisibleProgramme souvent peut lisible if - return - caseif - return - case ......• Valeur de retour des fonctions ne sert plus à retourner des rés. Valeur de retour des fonctions ne sert plus à retourner des rés.

5. Exceptions5. Exceptions

Page 155: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 155/303

  155155

pp

• DéfinitionDéfinition – NotionNotion

• Comportement intervenant lorsque le déroulementComportement intervenant lorsque le déroulement

du programme ne peut pas continuer dans lesdu programme ne peut pas continuer dans lesconditions normalement définiesconditions normalement définies

 – Ressources associéesRessources associées• Une exception est un objet Java à part entièreUne exception est un objet Java à part entière

créé et contenant l ’information relative aucréé et contenant l ’information relative auproblème.problème.

 – Remontée d'erreursRemontée d'erreurs• Tâche déléguée au noyau du langageTâche déléguée au noyau du langage..

Remontée d’erreurs automati ueRemontée d’erreurs automati ue

Page 156: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 156/303

5. Exceptions5. Exceptions

Page 157: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 157/303

  157157

p

• Mécanisme des exceptionsMécanisme des exceptions – Comportement:Comportement:

• Algorithme: Algorithme:si (exception générée) alorssi (exception générée) alors

l ’exception n ’est pas attrapée par la méthode en coursl ’exception n ’est pas attrapée par la méthode en courssi méthode en cours == main alors fin du programmesi méthode en cours == main alors fin du programmesinonsinon

remontée de l ’exécution à la méthode I ’ remontée de l ’exécution à la méthode I ’ 

qui a appelé la méthode I en coursqui a appelé la méthode I en coursI ’ lance une exceptionI ’ lance une exception

fin sifin sifin sifin si

5. Exceptions5. Exceptions

Page 158: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 158/303

  158158

p

• Mécanisme des exceptionsMécanisme des exceptions – Comportement:Comportement:

• Une exceptionUne exception levée levée et qui n ’est paset qui n ’est pas attrapée attrapée  provoque la fin du programme, en indiquant àprovoque la fin du programme, en indiquant àl ’utilisateur la pile de méthodes traversées parl ’utilisateur la pile de méthodes traversées parl ’exception:l ’exception: – pas de clause try...catchpas de clause try...catch

 – une méthode susceptible de lancer une exception sansune méthode susceptible de lancer une exception sansl ’attraper doit l ’indiquer dans son entête: mot clél ’attraper doit l ’indiquer dans son entête: mot clé throws throws 

5. Exceptions5. Exceptions

Page 159: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 159/303

  159159

• Attraper une exception: couple “try...catch”  Attraper une exception: couple “try...catch”  – try try : délimite la portion de code à surveiller: délimite la portion de code à surveiller

Syntaxe: Syntaxe:  try { ... I;…}try { ... I;…}

 – catch catch : capture et traite une exception: capture et traite une exception  Syntaxe: Syntaxe:  try { ... I;…}try { ... I;…}

catch (ExceptionClass e) {…}catch (ExceptionClass e) {…}

 – UnUn try try peut prendre en charge +peut prendre en charge +ieursieurs exceptionsexceptions• Chacune d'ellesChacune d'elles sera traitée par un sera traitée par un catch catch  appropriéapproprié

Page 160: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 160/303

5. Exceptions5. Exceptions

Page 161: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 161/303

  161161

• Finaliser une exception: la clause finallyFinaliser une exception: la clause finally – Ajouter un traitement commun au traitement Ajouter un traitement commun au traitement

spécialisé de chaque exception: blocspécialisé de chaque exception: bloc

d'instructions exécuté à tous les coupsd'instructions exécuté à tous les coups(exception levée ou non)(exception levée ou non)

 – Syntaxe complète de gestion d ’une exception:Syntaxe complète de gestion d ’une exception:try { // code pouvant lever une exception

…}[catch (MyExceptiontype e){ // code a exécuter

…} // si MyExceptiontype est levéecatch (Exception e) { System.out.println(e.toString());

}]finally { // code toujours exécuté

}

Page 162: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 162/303

5. Exceptions5. Exceptions

Page 163: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 163/303

  163163

• Créer ses propres exceptionsCréer ses propres exceptions – But: signaler un évènement exceptionnel d’unBut: signaler un évènement exceptionnel d’un

type non prévu par les API.type non prévu par les API.

 – Démarche:Démarche:• étendre la classe java.lang.Exceptionétendre la classe java.lang.Exception• le corps de la classe ne contient pas plus que:le corps de la classe ne contient pas plus que:

 – la définition d’un constructeurla définition d’un constructeur

 – la redéfinition de la méthode toString()la redéfinition de la méthode toString() – Exemple:Exemple:class ExceptionRien extends Exception {

public String toString() {

return “Aucune note n’est valide”;}}

5. Exceptions5. Exceptions

Page 164: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 164/303

  164164

• Créer ses propres exceptions:Créer ses propres exceptions: – Contraindre la levée d ’une exception:Contraindre la levée d ’une exception:

• Le mot cléLe mot clé throw throw permet de lever une exceptionpermet de lever une exception

• Le mot cléLe mot clé throws throws permet de fournir pour unepermet de fournir pour uneméthode donnée, la liste des exceptions:méthode donnée, la liste des exceptions: – susceptibles d ’être levées par cette méthode (obligatoire,susceptibles d ’être levées par cette méthode (obligatoire,

sauf pour les exceptions les plus courantes de l ’API).sauf pour les exceptions les plus courantes de l ’API). – qui ne seront pas attrapées par ladite méthode par unequi ne seront pas attrapées par ladite méthode par une

clause try-catchclause try-catch

5. Exceptions5. Exceptions

Page 165: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 165/303

  165165

• Conseils sur l’utilisation des exceptionsConseils sur l’utilisation des exceptions – Relancer les exceptionsRelancer les exceptions – La gestion des exceptions n’est pas supposéeLa gestion des exceptions n’est pas supposée

remplacer un test simpleremplacer un test simple – Ne faites pas une gestion ultra fine desNe faites pas une gestion ultra fine desexceptionsexceptions

 – Ne pas avoir honte de propager les exceptionsNe pas avoir honte de propager les exceptions

• Application: Application: – Classe propagationClasse propagation – Classe finallyClasse finally

6. Programmation graphique6. Programmation graphique

Page 166: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 166/303

  166166

6.1. Gestionnaires de présentation6.1. Gestionnaires de présentation6.2. Mise en oeuvre des traitements6.2. Mise en oeuvre des traitements

6.3. Programmation graphique visuelle6.3. Programmation graphique visuelle

6.1. Gestionnaires de présentation6.1. Gestionnaires de présentation

Page 167: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 167/303

  167167

6.1.1. Principaux objets graphiques6.1.1. Principaux objets graphiques6.1.2. Objets Graphiques de type Container6.1.2. Objets Graphiques de type Container

6.1.3. Rôle d'un Layout Manager6.1.3. Rôle d'un Layout Manager6.1.4. Choix d'un Layout Manager6.1.4. Choix d'un Layout Manager

6.1.5. Principaux Layout Managers6.1.5. Principaux Layout Managers

6.1.1. Principaux objets graphiques6.1.1. Principaux objets graphiques

Page 168: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 168/303

  168168

• Écriture de programmes utilisant une GUIÉcriture de programmes utilisant une GUI• Composants lourds: AWTComposants lourds: AWT

 –  Abstract Window Toolkit (package java.awt) Abstract Window Toolkit (package java.awt) – C'est le premier outil de Fenêtrage de JavaC'est le premier outil de Fenêtrage de Java

 – Objets graphiques : classe dans le package java.awt.*Objets graphiques : classe dans le package java.awt.*• Exemple : java.awt.Panel, java.awt.ButtonExemple : java.awt.Panel, java.awt.Button – Ils nécessitent l'inclusion du package java.awt:Ils nécessitent l'inclusion du package java.awt:

• import java.awt.*;import java.awt.*;

• Composants allégés: SwingComposants allégés: Swing – Fait partie des JFC (package javax.swing)Fait partie des JFC (package javax.swing) – Plut lent à s’afficherPlut lent à s’afficher – Éléments d’interface étendu et plus pratiqueÉléments d’interface étendu et plus pratique – Moins dépendant de la plate-forme d’exécution: 3 interfacesMoins dépendant de la plate-forme d’exécution: 3 interfaces

look&feel look&feel spécifiquesspécifiques

Page 169: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 169/303

6 1 1 Principaux objets graphiques6 1 1 Principaux objets graphiques

Page 170: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 170/303

  170170

• Arboresence des objets graphiques: Arboresence des objets graphiques:

JPanelJComponent

JFrame

AbstractButton JButton

JtoggleButton

JCheckBox

JList

Component

Canvas

Button

Scrollbar 

Container

Choice

List

Checkbox

TextComponent

Label

TextArea

TextField

Frame

FileDialogDialogWindowsObject

Panel

Applet

NOTE :

Les menus

sont dans une

arborescence séparée

6.1.1. Principaux objets graphiques6.1.1. Principaux objets graphiques

Page 171: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 171/303

6.1.2 Objets de types Container6.1.2 Objets de types Container

Page 172: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 172/303

  172172

• Panneau (Panel):Panneau (Panel): – Composant AWT permettant de regrouperComposant AWT permettant de regrouper

d'autres composants AWT dans la fenêtred'autres composants AWT dans la fenêtre(Frame) courante(Frame) courante

 – N'est pasN'est pas redimensionnable ni iconifiableredimensionnable ni iconifiable

 – N'existe que parce qu'il est dans une FrameN'existe que parce qu'il est dans une Frame

 – Exemple: appletExemple: applet = type de Panel spécifique= type de Panel spécifiqueapparaissant dans la fenêtre d'un navigateur.apparaissant dans la fenêtre d'un navigateur.

6.1.2 Objets de types Container6.1.2 Objets de types Container

Page 173: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 173/303

  173173

j ypj yp

• 1.5. Propriétés d’un Jpanel1.5. Propriétés d’un Jpanel – La méthode paintComponent(Graphics)La méthode paintComponent(Graphics)

Container contentPane = monCadre.getContentPane()

Component c = …; // exemple: JPanel c=new MyPanel();

t tP dd( )

class MyPanel extends JPanel {

 public void paintComponent( Graphics g)

{

super.paintComponent(g)

…;

}

Page 174: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 174/303

6.1.2 Objets de type Container6.1.2 Objets de type Container

Page 175: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 175/303

  175175

j yp

  Title 

VitreCouche du contenuBarre de menus (option)

JLayeredPane

JRootJFrame

- Gère l’aspectLook and Feel

- Contient les différentscomposants

Page 176: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 176/303

6.1.4 Choix d'un Layout Manager6.1.4 Choix d'un Layout Manager

Page 177: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 177/303

  177177

• La méthode setLayout de la classeLa méthode setLayout de la classeContainer:Container: – Permet de fixer le type de Layout ManagerPermet de fixer le type de Layout Manager – Les profiles de cette méthode :Les profiles de cette méthode :

• setLayout(FlowLayout fl);setLayout(FlowLayout fl);

• setLayout(BorderLayout bl);setLayout(BorderLayout bl);

• setLayout(GridLayout gl);setLayout(GridLayout gl);• setLayout(CardLayout cl);setLayout(CardLayout cl);

6.1.4 Choix d'un Layout Manager6.1.4 Choix d'un Layout Manager

Page 178: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 178/303

  178178

• Note :Note : – L'ajout d'un composant dans un container seL'ajout d'un composant dans un container se

fait via sa méthodefait via sa méthode addadd.. – Cette méthode est surchargée pour chaqueCette méthode est surchargée pour chaque

type de composant pouvant être ajouté à untype de composant pouvant être ajouté à uncontainer.container.

add(Component c);add(Component c);add(Component c, int i);add(Component c, int i);

add(String s, Component c);add(String s, Component c);

6 1 5 Principaux Layout Managers

Page 179: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 179/303

  179179

• Le FlowLayout ManagerLe FlowLayout Manager – Le plus simple Layout Manager (par défaut pour unLe plus simple Layout Manager (par défaut pour un

composant JPanel)composant JPanel) –

 Aligne les composants dans un container selon l'ordre de Aligne les composants dans un container selon l'ordre deleur arrivée : gauche à droite, ligne par ligneleur arrivée : gauche à droite, ligne par ligne

 – Supporte les composants de tailles différentesSupporte les composants de tailles différentes – Trois constructeurs associés au FlowLayout:Trois constructeurs associés au FlowLayout:

• public FlowLayout();public FlowLayout();

• public FlowLayout(int align);public FlowLayout(int align);• public FlowLayout(int align, int hgap, int vgap);public FlowLayout(int align, int hgap, int vgap); – align = FlowLayout.[LEFT, CENTER, RIGHT]align = FlowLayout.[LEFT, CENTER, RIGHT] – hgap et vgap = espacement horizontal et vertical (en pixel)hgap et vgap = espacement horizontal et vertical (en pixel)

6.1.5. Principaux Layout Managers

Page 180: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 180/303

6.1.5. Principaux Layout Managers

Page 181: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 181/303

  181181

• Le BorderLayout Manager:Le BorderLayout Manager: – Layout Manager parLayout Manager par défautdéfaut, associé à l’objet, associé à l’objet

contentPane contentPane d’une fenêtre Jframe (ajout dans la zoned’une fenêtre Jframe (ajout dans la zonepar défaut: le centre)par défaut: le centre)

 – Aligner les composants selon l'une des zones Aligner les composants selon l'une des zonesgéographiques :géographiques : North, South, East, West, CenterNorth, South, East, West, Center• Un seulUn seul composant par zone géographiquecomposant par zone géographique• Largeur comp. North / South = largeur du Lay. Man.Largeur comp. North / South = largeur du Lay. Man.

•Hauteur comp. West/East = hauteur du Lay. Man.Hauteur comp. West/East = hauteur du Lay. Man.

• Composant de la zone Center: comble le resteComposant de la zone Center: comble le reste – 2 constructeurs pour créer des BorderLayout2 constructeurs pour créer des BorderLayout

• public BorderLayout();public BorderLayout();• public BorderLayout(int hgap, int vgap);public BorderLayout(int hgap, int vgap);

 –h t d t à l' t h i t l t ti lhgap et vgap correspondent à l'espacement horizontal et vertical

6.1.5. Principaux Layout Managers

Page 182: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 182/303

6.1.5. Principaux Layout Managers

Page 183: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 183/303

  183183

• Le GridLayout ManagerLe GridLayout Manager – Subdivise unSubdivise un container en lignes et en colonnescontainer en lignes et en colonnes..

Chaque composant ajouté dans le container est misChaque composant ajouté dans le container est misdans une des cases, de gauche à droitedans une des cases, de gauche à droite

 – La taille de chaque case est identiqueLa taille de chaque case est identique – 2 constructeurs permettent de créer des GridLayout2 constructeurs permettent de créer des GridLayout

• public GridLayout(int rows, int cols);public GridLayout(int rows, int cols);• public GridLayout(int rows, int cols, int hgap, int vgap);public GridLayout(int rows, int cols, int hgap, int vgap);

 – rowsrows etet colscols correspondent aux nombres de lignes et colonnescorrespondent aux nombres de lignes et colonnes – hgaphgap etet vgapvgap correspondent à l'espacement horizontal etcorrespondent à l'espacement horizontal et

verticalvertical

6.1.5. Principaux Layout Managers

6.1.5. Principaux Layout Managers

Page 184: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 184/303

  184184

• Le GridLayout ManagerLe GridLayout Managerimport java.awt.*; import java.awt.event.*;import javax.swing.*;class PlafPanel extends JPanel{

 public PlafPanel(){ b1 = new JButton("bouton1"); b2 = newJButton("bouton2");

 b3 = new JButton("bouton3"); b4 = newJButton("bouton4");

 b5 = new JButton("bouton5");setLayout(new GridLayout(3,2));add(b1); add(b2); add(b3); add(b4); add(b5);

 }

 private JButton b1; private JButton b2;private JButton b3; private JButton b4;private JButton b5;

}

class PlafFrame extends JFrame {PlafFrame(){

setTitle("PlafTest"); setSize(300,200);Container contentPane =

getContentPane();JPanel c = new PlafPanel();

contentPane.add(c);}}

 public class TestGridLayout{ public static void main(String[] args){

JFrame frame = new PlafFrame();

frame.show(); }}

6.1.5. Principaux Layout Managers

6.1.5. Principaux Layout Managers

Page 185: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 185/303

  185185

• Le GridBagLayout ManagerLe GridBagLayout Manager – Variante de GridLayout Variante de GridLayout – Chaque composant peutChaque composant peut avoir une tailleavoir une taille

différentedifférente.. – Nécessite l'initialisation d’une ou plusieursNécessite l'initialisation d’une ou plusieurs

variables de la classe GridBagConstraints.variables de la classe GridBagConstraints.NONE, RELATIVE, HORIZONTAL, …,NONE, RELATIVE, HORIZONTAL, …,

CENTER, ..., BOTHCENTER, ..., BOTH – Application Application

6.1.5. Principaux Layout Managers

6.1.5. Principaux Layout Managers

Page 186: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 186/303

  186186

• Le CardLayout ManagerLe CardLayout Manager – Permet d'empiler des composants dans un containerPermet d'empiler des composants dans un container

sous forme de carte.sous forme de carte.

 – Composants ne sont pas visibles simultanément:Composants ne sont pas visibles simultanément:affichage de la carte souhaitée par programmationaffichage de la carte souhaitée par programmationTaille de chaque case identiqueTaille de chaque case identique

 – 2 constructeurs:2 constructeurs:

• public CardLayout();public CardLayout();• public CardLayout( int hgap, int vgap);public CardLayout( int hgap, int vgap); – hgaphgap etet vgapvgap : espacement horizontal et vertical: espacement horizontal et vertical

6.1.5. Principaux Layout Managers

Page 187: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 187/303

6.1.5. Principaux Layout Managers

Page 188: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 188/303

  188188

• Le BoxLayout Manager:Le BoxLayout Manager: – Permet de placer une seule ligne ou colonne dePermet de placer une seule ligne ou colonne de

composants avec plus de souplesse que le GridLayoutcomposants avec plus de souplesse que le GridLayout

 – La classe Box:La classe Box:• Conteneur dont le gestonnaire par défaut est BoxLayoutConteneur dont le gestonnaire par défaut est BoxLayout

• Création d’un nouveau conteneur avec BoxLayout:Création d’un nouveau conteneur avec BoxLayout: – Box b = Box.createHorizontalBox();Box b = Box.createHorizontalBox();Ou

 –  Box b = Box.createVerticalBox();

• Ajout de composants:

 b.add(boutonok);

 b.add(boutonannuler);

6.1.5. Principaux Layout Managers

6.1.5. Principaux Layout Managers

Page 189: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 189/303

  189189

• Le BoxLayout Manager:Réserves:Le BoxLayout Manager:Réserves:• par défaut, il n’y a pas d’espace entre les composants d’unpar défaut, il n’y a pas d’espace entre les composants d’un

BoxLayout.BoxLayout.• Les réserves (Les réserves (filler filler ) permettent d’espacer les éléments:) permettent d’espacer les éléments:

 – Strut: ajoute peu d’espace entre composantsStrut: ajoute peu d’espace entre composantsb.add(boutonok);b.add(boutonok);b.add(Box.createHorizontalStru(5)); //createVerticalStrut()b.add(Box.createHorizontalStru(5)); //createVerticalStrut()b.add(boutonannuler);b.add(boutonannuler);

 – RigidArea: analogue à une paire de StrutRigidArea: analogue à une paire de Strutb.add(Box.createRigidArea(new Dimension(5, 12));b.add(Box.createRigidArea(new Dimension(5, 12));

 – Glue: effet opposé de StrutGlue: effet opposé de Strutb.add(boutonok);b.add(boutonok);b.add(Box.createGlue(5));b.add(Box.createGlue(5));  //createHorizontalGlue(); //createHorizontalGlue();

 //createVerticalGlue(); //createVerticalGlue();b.add(boutonannuler);b.add(boutonannuler);

C Ali X Ali YC Ali X Ali Y

6 5 c pau ayout a age s

6.2. Programmation graphique6.2. Programmation graphique

Page 190: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 190/303

  190190

6.2.1. Définitions6.2.1. Définitions6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)6.2.4. Exemples6.2.4. Exemples

Page 191: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 191/303

6.2.1 Définitions6.2.1 Définitions

Page 192: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 192/303

  192192

• EvénementEvénement – Objet décrivant ce qui s'est passé lorsqu'un utilisateurObjet décrivant ce qui s'est passé lorsqu'un utilisateur

interagit avec un composant graphique (bouton, champinteragit avec un composant graphique (bouton, champ

texte, …) appartenant à une interface graphiquetexte, …) appartenant à une interface graphique – Exemples :Exemples :

• Les événements sourisLes événements souris – Mouvement de la souris vers un composant graphiqueMouvement de la souris vers un composant graphique – Clic sur un composant graphiqueClic sur un composant graphique

• Les événements ClaviersLes événements Claviers – Appui sur une touche Appui sur une touche – Relachement d'une toucheRelachement d'une touche

6.2.1 Définitions6.2.1 Définitions

Page 193: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 193/303

  193193

•  Adaptateur: Adaptateur: – Toute instance d’une classe implémentant uneToute instance d’une classe implémentant une

interface héritée de EventListenerinterface héritée de EventListener

 – Il existe une interface qui hérite de EventListenerIl existe une interface qui hérite de EventListenerpour chaque type d’évènement pouvant se produirepour chaque type d’évènement pouvant se produire – Moyen efficace pour traiter les évènements depuis laMoyen efficace pour traiter les évènements depuis la

version 1.1 de Javaversion 1.1 de Java

6.2.2 Modèle d'évènements JDK1.16.2.2 Modèle d'évènements JDK1.1

Page 194: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 194/303

  194194

• La notion de délégationLa notion de délégation – Il sépare l'écoute et le traitement d'un évènement.Il sépare l'écoute et le traitement d'un évènement. – LeLe traitement d'un événementtraitement d'un événement estest déléguédélégué àà

une classe distincte qui implémente l'interface desune classe distincte qui implémente l'interface desclasse dites écouteurs.classe dites écouteurs.• Exemple :Exemple : ActionListener ActionListener est une interface dont laest une interface dont la

méthode à implémenter estméthode à implémenter est actionPerformedactionPerformed

• NOTE : Il est conseillé de définir ses classes commeNOTE : Il est conseillé de définir ses classes commeétant des classes internes à la classe principale pourétant des classes internes à la classe principale pourfaciliter l'accès aux champs de cette dernière.faciliter l'accès aux champs de cette dernière.

6.2.2 Modèle d'évènements JDK1.16.2.2 Modèle d'évènements JDK1.1

Page 195: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 195/303

  195195

• La notion de délégationLa notion de délégation – Chaque composantChaque composant désirant écouterdésirant écouter doit pardoit par

contre se faire enregistrer via sa méthodecontre se faire enregistrer via sa méthode

addXXXListener(). XXX représente le typeaddXXXListener(). XXX représente le typed'événement.d'événement.• Exemple :Exemple : addadd Action ActionListener(ActionListener) pourListener(ActionListener) pour

les événements de type ACTION.les événements de type ACTION.

•Note :Note : un composant ne réagit à un événement que s'ilun composant ne réagit à un événement que s'ils'est enregistré pour l'écouters'est enregistré pour l'écouter

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 196: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 196/303

  196196

• Gestion des évènements:Gestion des évènements: – Intervenants (sous AWT/Swing):Intervenants (sous AWT/Swing):

 – Objet écouteur:Objet écouteur: listener interface listener interface  – Source d’évènement: objet graphiqueSource d’évènement: objet graphique

 – Mécanisme sous-jacent:Mécanisme sous-jacent:1.1. Production d’un événement : envoie de l’objet à tous lesProduction d’un événement : envoie de l’objet à tous les

écouteurs recensésécouteurs recensés2.2. Les objets écouteurs déterminent leur réponseLes objets écouteurs déterminent leur réponse

Frame/JFrame

Panel/JPanelButton/JButton

ActionListener,MouseListener 

XXXListener (ECOUTEUR)

é é d A i é é S i i d é é é

Objet AWT/Swing

6.2.2. Modèle d’évènements JDK1.16.2.2. Modèle d’évènements JDK1.1

Page 197: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 197/303

  197197

• Notification d’un évènement:Notification d’un évènement:

ButtonPanel JButton

ActionEvent

getObject

addActionListener 

actionPerformed

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 198: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 198/303

  198198

• Un écouteur de fenêtre:Un écouteur de fenêtre:

MyFrame

Terminator 

windowClosing, windowClosed, …

addWindowListener 

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 199: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 199/303

  199199

• Capture des événements de fenêtre:Capture des événements de fenêtre: Classe interne:

public class MyFrame extends JFrame {public MyFrame() {

addWindowListener(new Terminator());}…class Terminator implements WindowListener {

public void windowClosed(WindowsEvent e) {}public void windowIconified(WindowsEvent e) {}public void windowOpened(WindowsEvent e) {}public void windowClosing(WindowsEvent e) {System.exit(0);}public void windowDeiconified(WindowsEvent e) {}public void windowActivated(WindowsEvent e) {}public void windowDeactivated(WindowsEvent e) {}

}…}

Page 200: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 200/303

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 201: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 201/303

  201201

• Les adaptateursLes adaptateurs – Java offre pour les Listener Interface ayant plusJava offre pour les Listener Interface ayant plus

d'une méthode à redéfinir des classes appeléesd'une méthode à redéfinir des classes appelées

 Adaptateurs Adaptateurs.. Ces classes implémentent lesCes classes implémentent lesméthodes de ces listener Interface avec unméthodes de ces listener Interface avec uncode videcode vide..

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 202: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 202/303

  202202

• Capture des événements de fenêtre:Capture des événements de fenêtre: Classe adaptateur:

public class MyFrame extends JFrame {public MyFrame() {addWindowListener(new Terminator());

}…class Terminator extends WindowAdaptor {

public void windowClosing(WindowsEvent e) {

System.exit(0);}}

…}

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 203: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 203/303

  203203

• Hiérarchie des évènements:Hiérarchie des évènements:EventObject

AWT

Event

ComponentEvent

ActionEvent

AdjustmentEvent

ItemEvent

TextEvent

InputEventContainer Event FocusEvent PaintEvent WindowEvent

MouseEvent

KeyEvent

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 204: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 204/303

  204204

• Gestion d'événements multiples:Gestion d'événements multiples: – 1 év. p.e. écouté par +ieurs composants1 év. p.e. écouté par +ieurs composants

• Exemple :Exemple : Button bcarre, bracine;Button bcarre, bracine;......bcarre.addActionListener(new ActionL());bcarre.addActionListener(new ActionL());bracine.addActionListener(new ActionL());bracine.addActionListener(new ActionL());

• Le traitement lié à chaque composant sera pris en charge parLe traitement lié à chaque composant sera pris en charge parla méthode à redéfinir (la méthode à redéfinir (actionPerformedactionPerformed))

 – 1 composant peut écouter +ieurs types d'év.1 composant peut écouter +ieurs types d'év.• Exemple:Exemple: TextField tf;TextField tf;

......tf.addMouseListener(new MouseL());tf.addMouseListener(new MouseL());tf.addActionListener(new ActionL());tf.addActionListener(new ActionL());

Page 205: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 205/303

6.2.2. Modèle d’évènements JDK 1.16.2.2. Modèle d’évènements JDK 1.1

Page 206: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 206/303

  206206

• Avantages et incovénients Avantages et incovénients – InconvénientsInconvénients

• Modèle assez complexeModèle assez complexe comparé à celui ducomparé à celui duJDK1.0JDK1.0

• il fautil faut implementer toutes les methodesimplementer toutes les methodes d'und'unListener Interface même si on n'en a besoin queListener Interface même si on n'en a besoin qued'une. Les classes XXXadapter permettent ded'une. Les classes XXXadapter permettent derésoudre ce problème.résoudre ce problème.

Incompatible avec le modèle du JDK1.0Incompatible avec le modèle du JDK1.0

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 207: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 207/303

  207207

• Principaux types d'évènements et Statut:Principaux types d'évènements et Statut: – Evémenements classés par typeEvémenements classés par type,, – Filtrage automatique sans passer par desFiltrage automatique sans passer par des

tests fastidieuxtests fastidieux.. – Les types d'événements :Les types d'événements :

• ActionEvent, ItemEvent, MouseEvent, KeyEvent, ActionEvent, ItemEvent, MouseEvent, KeyEvent,

TextEvent, ComponentEvent, ContainerEvent,TextEvent, ComponentEvent, ContainerEvent,WindowsEvent, FocusEventWindowsEvent, FocusEvent

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 208: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 208/303

  208208

• Les principaux types d'événements et leurLes principaux types d'événements et leurStatutStatut

Classe d'événements Les attributs et les méthodes

ActionEvent String getActionCommand()// Rend le Label du composant associé à une action

int getModifiers()// rend une valeur entière correspondant à// la touche alternative : actionEvent.SHIFT_MASK,// actionEvent.CTRL_MASK, actionEvent.ALT_MASK 

// actionEvent.META_MASK 

Object getSource()// rend le nom de la variable de l'objet source

AdjustementEvent Adjustable getAdjustable()(ajustement des scrollbar // rend le composant qui a généré l'événement

 par exemple)

int getAdjustmentType()// Rend le type d'adjustment survenu. La valeur peut - être// l'une des constantes suivantes définie dans la classe// AdjustementEvent :UNIT_INCREMENT,// UNIT_DECREMENT, BLOCK_INCREMENT, BLOCK_DECREMENT, TRACK.

int getValue()

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 209: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 209/303

  209209

• Les principaux types d'événements et leurLes principaux types d'événements et leurStatutStatut

Classe d'événements Les attributs et les méthodes

ComponentEvent Component getComponent()// rend le composant ayant généré l'événement

ContainerEvent Component getChild()// rend le composant dont l'ajout ou la suppression déclenche cet événement.Container getContainer()// rend le container ayant déclenché l'événement.

FocusEvent boolean isTemporary()// Rend vrai si un composant a perdu temporairement le focus// (curseur). Il recouvrera dès qu'on reviendra dans sa fenêtre.Component getComponent()// définit dans la classe ComponentEvent. Cette méthode

// Rend le type de composant ayant perdu ou reçu le focus.

ItemEvent Object getItem()// Rend l'objet le label associé à un item dont l'état a changé.ItemSelectable getItemSelectable()// Rend le composant qui a généré l'événement.int getStateChange()//Rend le nouvel état de l'item : SELECTED ou DESELECTED

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 210: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 210/303

  210210

• Les principaux types d'événements et leurLes principaux types d'événements et leurStatutStatut

Classe d'événements Les attributs et les méthodes

KeyEvent int getKeyChar()void setKeyChar(char)// Lit ou assigne le caractère associé à la touche appuyée. Caractères unicodes : 2 octets.int getKeyCode()

void setKeyCode(int)// Lit ou affecte le code d'une touche. La classe KeyEvent// définit des constantes associées à chaque touche. Exemple :// VK_A pour la touche A, VK_ESCAPE pour la touche ESCAPE.Méthodes héritées de InputEvent

int getWhen()// Retourne l'heure à laquelle l'événement est arrivé.

 boolean isAltDown()

 boolean isControlDown() boolean isMetaDown() boolean isShiftDown()// Test l'état d'un touche alternative.void setModifiers(int)// Assigne l'état d'une touche alternative.Méthode héritée de Component

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 211: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 211/303

  211211

• Les principaux types d'événements et leurLes principaux types d'événements et leurStatutStatut

Classe d'événements Les attributs et les méthodes

MouseEventint getClickCount()// rend le nombre de clicks consécutifs opérés par l'utilisateur int getX()int getY()

Point getPoint()// Rend les positions X et Y du lieu ou est survenu l'événement. boolean isPopupTrigger()// Rend vrai si l'événement cause l'affichage d'un menu popupMéthodes héritées de InputEvent

int getWhen()// Retourne l'heure à laquelle l'événement est arrivé.

 boolean isAltDown()

 boolean isControlDown() boolean isMetaDown() boolean isShiftDown()// Test l'état d'un touche alternative.void setModifiers(int)// Assigne l'état d'une touche alternative.Méthode héritée de Component

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 212: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 212/303

  212212

• Les principaux types d'événements et leurLes principaux types d'événements et leurStatutStatut

Classe d'événements Les attributs et les méthodes

TextEvent getSource() // hérités Event object ???// Rend le nom de la variable de l'objet de type texte.

WindowsEvent getWindows()// Rend le nom de la fenêtre ayant générée l'événement.

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 213: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 213/303

  213213

• Les interfaces de Gestion d'événementsLes interfaces de Gestion d'événementsEvénément Nom interface Listener Méthodes d'interface du listener (à redéfinir)

ActionEvent ActionListener actionPerformed(ActionEvent)

AdjustementEvent AdjustementListener adjustementValueChanged(AdjustementEvent)

ComponentEvent ComponentListener componentHidden(ComponentEvent)componentShown(ComponentEvent)componentMoved(ComponentEvent)

componentResized(ComponentEvent)

ContainerEvent ContainerListener componentAdded(ContainerEvent)

FocusEvent FocusListener focusGained(FocusEvent), focusLost(FocusEvent)

KeyEvent KeyListener keyPressed(KeyEvent), keyReleased(KeyEvent)keyTyped(KeyEvent)

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 214: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 214/303

  214214

• Les interfaces de Gestion d'événementsLes interfaces de Gestion d'événements

Evénément Nom interface Listener Méthodes d'interface du listener (à redéfinir)

MouseEvent MouseMotionListener mouseDragged(MouseEvent)

mouseMoved(MouseEvent)

WindowsEvent WindowsListener windowsOpened(WindowsEvent)windowsOpened(WindowsEvent)windowsOpened(WindowsEvent)windowsOpened(WindowsEvent)windowsOpened(WindowsEvent)windowsOpened(WindowsEvent)windowsOpened(WindowsEvent)

ItemEvent ItemListener itemStateChanged(ItemEvent)

TextEvent TextListener textValueChanged(TextEvent)

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 215: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 215/303

  215215

• Les adaptateursLes adaptateurs

Interface avec adaptateurs Nom de l'adaptateur

ComponentListener ComponentAdapter  

ContainerListener ContainerAdapter  

FocusListener FocusAdapter  

KeyListener KeyAdapter  

MouseListener MouseAdapter  

MouseMotionListener MouseMotionListenerAdapter 

WindowsListener WindowsListenerAdapter  

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 216: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 216/303

  216216

• Les composants et les événements qu'ilsLes composants et les événements qu'ilssupportentsupportent

Composants Evénements survenant sur le composant

Adjustable AdjustableEvent

Applet ContainerEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Button ActionEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Canvas FocusEvent, KeyEvent, MouseEvent, ComponentEventCheckBox ItemEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

CheckBoxMenuItem ActionEvent, ItemEvent

Choice ItemEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Component FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Container ContainerEvent, FocusEvent, KeyEvent, MouseEvent,ComponentEvent

Dialog ContainerEvent, WindowsEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

FileDialog ContainerEvent, WindowsEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Frame ContainerEvent, WindowsEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

6.2.3. Récapitulation (JDK 1.1)6.2.3. Récapitulation (JDK 1.1)

Page 217: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 217/303

  217217

• Les composants et les événements qu'ilsLes composants et les événements qu'ilssupportent (suite)supportent (suite)

Composants Evénements survenant sur le composant

Label FocusEvent, KeyEvent, MouseEvent, ComponentEvent

List ActionEvent, FocusEvent, KeyEvent, MouseEvent, ItemEvent, ComponentEvent

Menu ActionEvent

MenuItem ActionEvent

Panel ContainerEvent, FocusEvent, KeyEvent, MouseEvent,ComponentEvent

PopoMenu ActionEvent

ScrollBar AdjustmentEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Scrollpane ContainerEvent, FocusEvent, KeyEvent, MouseEvent,ComponentEvent

TextArea TextEvent, FocusEvent, KeyEvent, MouseEvent,ComponentEvent

TextComponent TextEvent, FocusEvent, KeyEvent, MouseEvent,ComponentEvent

TextField ActionEvent, TextEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

Windows ContainerEvent, WindowsEvent, FocusEvent, KeyEvent, MouseEvent, ComponentEvent

6.2.4. Exemples6.2.4. Exemples

Page 218: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 218/303

  218218

• BoutonsBoutons• Boutons radioBoutons radio• Cases à cocherCases à cocher

• SourisSouris• Champs de texteChamps de texte• ListesListes

• Etiquettes,Etiquettes,• etc.etc.

6.2.4. Exemples6.2.4. Exemples

Page 219: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 219/303

  219219

• JTextArea:JTextArea:  t2=new JTextArea(10,15);

t2.setEditable(false);JScrollPane j2=new JScrollPane(t2);j2.setHorizontalScrollBarPolicy(

  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

j2.setVerticalScrollBarPolicy(JScrollPane. VERTICAL_SCROLLBAR_NEVER);

b.add(j2);

Container c=getContentPane();c.add(b);setSize(425,200); show();

}

public static void main(String[] args) {TextAreaDemo app = new TextAreaDemo();app.addWindowListener(new WindowAdapter()

{public void windowClosing(WindowEvent e){System.exit(0);}}); } }

import java.awt.*; import java.awt.event.*;import javax.swing.*;public class TextAreaDemo extends JFrame {

private JTextArea t1,t2; private JButton cp;public TextAreaDemo() {

super("TextAreaDemo"); String s="Start";Box b=Box.createHorizontalBox();

t1=new JTextArea(s,10,15);//lignes, colonnes  JScrollPane j1=new JScrollPane(t1);

j1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );

j1.setVerticalScrollBarPolicy(  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

b.add(j1);

cp = new JButton("Copy>>>");cp.addActionListener( new ActionListener() {

public void actionPerformed(ActionEvent e){t2.setText(t1.getSelectedText());}});

b.add(cp);

  t2=new JTextArea(10,15);t2.setEditable(false);JScrollPane j2=new JScrollPane(t2);j2.setHorizontalScrollBarPolicy(

  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

j2.setVerticalScrollBarPolicy(JScrollPane. VERTICAL_SCROLLBAR_NEVER);

b.add(j2);

Container c=getContentPane();c.add(b);setSize(425,200); show();

}

public static void main(String[] args) {TextAreaDemo app = new TextAreaDemo();app.addWindowListener(new WindowAdapter()

{public void windowClosing(WindowEvent e){System.exit(0);}}); } }

import java.awt.*; import java.awt.event.*;import javax.swing.*;public class TextAreaDemo extends JFrame {

private JTextArea t1,t2; private JButton cp;public TextAreaDemo() {

super("TextAreaDemo"); String s="Start";Box b=Box.createHorizontalBox();

t1=new JTextArea(s,10,15);//lignes, colonnesJScrollPane j1=new JScrollPane(t1);j1.setHorizontalScrollBarPolicy(

JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);j1.setVerticalScrollBarPolicy(

JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

b.add(j1);

cp = new JButton("Copy>>>");cp.addActionListener( new ActionListener() {

public void actionPerformed(ActionEvent e){t2.setText(t1.getSelectedText());}});

b.add(cp);

6.2.4. Exemples6.2.4. Exemples

Page 220: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 220/303

  220220

• Sous-classe personnalisée de JPanel:Sous-classe personnalisée de JPanel:import java.awt.*;import java.awt.event.*;import javax.swing.*;class CustomPanel extends JPanel {

public static final int CERCLE=1,CARRE=2;

private int forme=0;public void paintComponent(Graphics g){super.paintComponent(g);g.setColor(Color.pink);if (forme == 1) g.drawOval(50,50,50,50);if (forme == 2) g.drawRect(50,50,50,50);

}public void dessiner(int f) {forme = f; repaint();}

}

class CustomPanelTest extends JFrame {JButton cercle; JButton carre;JPanel buttonPanel; CustomPanel myPanel;CustomPanelTest() {

cercle=new JButton("Cercle"); carre=new JButton("Carre");myPanel = new CustomPanel();myPanel.setBackground(Color.green);

  cercle.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {

myPanel.dessiner(CustomPanel.CERCLE);}});carre.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

myPanel.dessiner(CustomPanel.CARRE);}});buttonPanel = new JPanel();buttonPanel.add(cercle); buttonPanel.add(carre);Container c = getContentPane();c.setLayout(new BorderLayout());c.add(myPanel,BorderLayout.CENTER);c.add(buttonPanel,BorderLayout.SOUTH);setSize(300,150);show();}

public static void main(String[] args) {CustomPanelTest app = new CustomPanelTest();app.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){System.exit(0);}});

}}

import java.awt.*;import java.awt.event.*;import javax.swing.*;class CustomPanel extends JPanel {

public static final int CERCLE=1,CARRE=2;

private int forme=0;public void paintComponent(Graphics g){super.paintComponent(g);g.setColor(Color.pink);if (forme == 1) g.drawOval(50,50,50,50);if (forme == 2) g.drawRect(50,50,50,50);

}public void dessiner(int f) {forme = f; repaint();}

}

class CustomPanelTest extends JFrame {JButton cercle; JButton carre;JPanel buttonPanel; CustomPanel myPanel;CustomPanelTest() {

cercle=new JButton("Cercle"); carre=new JButton("Carre");myPanel = new CustomPanel();myPanel.setBackground(Color.green);

cercle.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {

myPanel.dessiner(CustomPanel.CERCLE);}});carre.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

myPanel.dessiner(CustomPanel.CARRE);}});buttonPanel = new JPanel();buttonPanel.add(cercle); buttonPanel.add(carre);Container c = getContentPane();c.setLayout(new BorderLayout());c.add(myPanel,BorderLayout.CENTER);c.add(buttonPanel,BorderLayout.SOUTH);setSize(300,150);show();}

public static void main(String[] args) {CustomPanelTest app = new CustomPanelTest();app.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){System.exit(0);}});

}}

6.2.4. Exemples6.2.4. Exemples

Page 221: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 221/303

  221221

• Sous-classe active de JPanel:Sous-classe active de JPanel:import java.awt.*; import java.awt.event.*;import javax.swing.*;class SelfContainedPanel extends JPanel {private int x,y; int xOrigine,yOrigine;boolean dessine=false;

public void paintComponent(Graphics g) {super.paintComponent(g);g.setColor(Color.yellow);if (dessine)

g.drawOval(xOrigine,yOrigine,x-xOrigine,y-yOrigine);g.drawString("Position: x="+x+" y="+y,10,10);

}public void draw(int x,int y){this.x=x;this.y=y; repaint();}public Dimension getPreferredSize(){

return new Dimension(200,200);}}class SelfContainedPanelTest extends JFrame {

SelfContainedPanel myPanel;SelfContainedPanelTest() {

myPanel = new SelfContainedPanel();myPanel.setSize(myPanel.getPreferredSize());myPanel.setBackground(Color.green);

  myPanel.addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e){myPanel.xOrigine=e.getX();myPanel.yOrigine=e.getY();}}

);myPanel.addMouseMotionListener(

new MouseMotionListener(){public void mouseDragged(MouseEvent e){

if (myPanel.dessiner == false) myPanel.dessine=true;myPanel.draw(e.getX(),e.getY());}

public void mouseMoved(MouseEvent e){if (myPanel.dessiner == true) myPanel.dessine=false;myPanel.draw(e.getX(),e.getY());}}

);Container c=getContentPane();c.setLayout(new FlowLayout());c.add(myPanel); setSize(300,150); show();

}public static void main(String[] args) {

SelfContainedPanelTest app=new SelfContainedPanelTest();app.addWindowListener( new WindowAdapter(){

public void windowClosing(WindowEvent e) {System.exit(0);}});}}

import java.awt.*; import java.awt.event.*;import javax.swing.*;class SelfContainedPanel extends JPanel {private int x,y; int xOrigine,yOrigine;boolean dessine=false;

public void paintComponent(Graphics g) {super.paintComponent(g);g.setColor(Color.yellow);if (dessine)

g.drawOval(xOrigine,yOrigine,x-xOrigine,y-yOrigine);g.drawString("Position: x="+x+" y="+y,10,10);

}public void draw(int x,int y){this.x=x;this.y=y; repaint();}public Dimension getPreferredSize(){

return new Dimension(200,200);}}class SelfContainedPanelTest extends JFrame {

SelfContainedPanel myPanel;SelfContainedPanelTest() {

myPanel = new SelfContainedPanel();myPanel.setSize(myPanel.getPreferredSize());myPanel.setBackground(Color.green);

myPanel.addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e){myPanel.xOrigine=e.getX();myPanel.yOrigine=e.getY();}}

);myPanel.addMouseMotionListener(

new MouseMotionListener(){public void mouseDragged(MouseEvent e){

if (myPanel.dessiner == false) myPanel.dessine=true;myPanel.draw(e.getX(),e.getY());}

public void mouseMoved(MouseEvent e){if (myPanel.dessiner == true) myPanel.dessine=false;myPanel.draw(e.getX(),e.getY());}}

);Container c=getContentPane();c.setLayout(new FlowLayout());c.add(myPanel); setSize(300,150); show();

}public static void main(String[] args) {

SelfContainedPanelTest app=new SelfContainedPanelTest();app.addWindowListener( new WindowAdapter(){

public void windowClosing(WindowEvent e) {System.exit(0);}});}}

6.2.4. Exemples6.2.4. Exemples

Page 222: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 222/303

  222222

• JSlider:JSlider:import java.awt.*; import java.awt.event.*;import javax.swing.*; import javax.swing.event.*;class SliderDemo extends JFrame {

private JSlider diameter; private OvalPanel myPanel;public SliderDemo(){

super("Slider Demo");  diameter=new JSlider(SwingConstants.HORIZONTAL,0,200,10);

diameter.setMajorTickSpacing(10); //unitédiameter.setPaintTicks(true); //échellediameter.addChangeListener(

new ChangeListener() {public void stateChanged(ChangeEvent e) {

  myPanel.setDiameter(diameter.getValue());}});myPanel=new OvalPanel();myPanel.setBackground(Color.yellow);Container c=getContentPane();c.add(diameter,BorderLayout.SOUTH);c.add(myPanel,BorderLayout.CENTER);setSize(220,270); show();

}

 public static void main(String[] args){SliderDemo app=new SliderDemo();app.addWindowListener(

new WindowAdapter(){public void windowClosing(WindowEvent e){

System.exit(0);}});

}}class OvalPanel extends JPanel {

private int diameter = 10;public void paintComponent(Graphics g){

super.paintComponent(g);g.fillOval(10,10,diameter,diameter);}public void setDiameter(int d){

diameter = d;repaint();

}}

Orientation, Min, Max, Init

import java.awt.*; import java.awt.event.*;import javax.swing.*; import javax.swing.event.*;class SliderDemo extends JFrame {

private JSlider diameter; private OvalPanel myPanel;public SliderDemo(){

super("Slider Demo");  diameter=new JSlider(SwingConstants.HORIZONTAL,0,200,10);

diameter.setMajorTickSpacing(10); //unitédiameter.setPaintTicks(true); //échellediameter.addChangeListener(

new ChangeListener() {public void stateChanged(ChangeEvent e) {

  myPanel.setDiameter(diameter.getValue());}});myPanel=new OvalPanel();myPanel.setBackground(Color.yellow);Container c=getContentPane();c.add(diameter,BorderLayout.SOUTH);c.add(myPanel,BorderLayout.CENTER);setSize(220,270); show();

}

public static void main(String[] args){SliderDemo app=new SliderDemo();app.addWindowListener(

new WindowAdapter(){public void windowClosing(WindowEvent e){

System.exit(0);}});

}}class OvalPanel extends JPanel {

private int diameter = 10;public void paintComponent(Graphics g){

super.paintComponent(g);g.fillOval(10,10,diameter,diameter);}public void setDiameter(int d){

diameter = d;repaint();

}}

6.2.4. Exemples6.2.4. Exemples

Page 223: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 223/303

  223223

• Application & Applet: Application & Applet:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class AppletApplication extends JApplet {

JPanel buttonPanel; private JButton trace,efface;DrawPanel drawingPanel; private boolean cercle=false;private int width=300; private int heigth=200;public void init(){

buttonPanel = new JPanel();trace = new JButton("Trace");efface=new JButton("Efface");buttonPanel.setLayout(new FlowLayout());buttonPanel.add(trace); buttonPanel.add(efface);trace.addActionListener(new ActionTrace());efface.addActionListener(new ActionTrace());drawingPanel = new DrawPanel();Container c=getContentPane();c.setLayout(new FlowLayout());c.add(buttonPanel); c.add(drawingPanel);

}private class ActionTrace implements ActionListener {public void actionPerformed(ActionEvent e) {

if (e.getSource() == trace) drawingPanel.trace=true;else drawingPanel.trace=false;drawingPanel.redraw();}

}public void setWidth(int w){width=w;}public void setHeigth(int h){heigth=h;}

public static void main(String[] args){ int width,heigth;if (args.length != 2) {width=300;heigth=200;}else {width = Integer.parseInt(args[0]);heigth=Integer.parseInt(args[1]);}JFrame applicationWindow = new JFrame("applet running app.");applicationWindow.addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e){System.exit(0);}});AppletApplication appletObject=new AppletApplication();appletObject.setWidth(width); appletObject.setHeigth(heigth);appletObject.init(); appletObject.start();

  Container c = applicationWindow.getContentPane();  c.setLayout(new FlowLayout()); c.add(appletObject);

applicationWindow.setSize(width,heigth);applicationWindow.show(); }}

class DrawPanel extends JPanel {boolean trace=false;DrawPanel(){setSize(getPreferredSize());setBackground(Color.green);}public void paintComponent(Graphics g){

super.paintComponent(g); g.drawString("Applet",10,10);if (trace) g.drawOval(50,50,100,100);else {g.setColor(getBackground()); g.drawOval(50,50,100,100);}}

public Dimension getPreferredSize(){return new Dimension(200,200);}

import java.awt.*;import java.awt.event.*;import javax.swing.*;public class AppletApplication extends JApplet {

JPanel buttonPanel; private JButton trace,efface;DrawPanel drawingPanel; private boolean cercle=false;private int width=300; private int heigth=200;public void init(){

buttonPanel = new JPanel();trace = new JButton("Trace");efface=new JButton("Efface");buttonPanel.setLayout(new FlowLayout());buttonPanel.add(trace); buttonPanel.add(efface);trace.addActionListener(new ActionTrace());efface.addActionListener(new ActionTrace());drawingPanel = new DrawPanel();Container c=getContentPane();c.setLayout(new FlowLayout());c.add(buttonPanel); c.add(drawingPanel);

}private class ActionTrace implements ActionListener {public void actionPerformed(ActionEvent e) {

if (e.getSource() == trace) drawingPanel.trace=true;else drawingPanel.trace=false;drawingPanel.redraw();}

}public void setWidth(int w){width=w;}public void setHeigth(int h){heigth=h;}

public static void main(String[] args){ int width,heigth;if (args.length != 2) {width=300;heigth=200;}else {width = Integer.parseInt(args[0]);heigth=Integer.parseInt(args[1]);}JFrame applicationWindow = new JFrame("applet running app.");applicationWindow.addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e){System.exit(0);}});AppletApplication appletObject=new AppletApplication();appletObject.setWidth(width); appletObject.setHeigth(heigth);appletObject.init(); appletObject.start();Container c = applicationWindow.getContentPane();c.setLayout(new FlowLayout()); c.add(appletObject);applicationWindow.setSize(width,heigth);applicationWindow.show(); }}

class DrawPanel extends JPanel {boolean trace=false;DrawPanel(){setSize(getPreferredSize());setBackground(Color.green);}public void paintComponent(Graphics g){

super.paintComponent(g); g.drawString("Applet",10,10);if (trace) g.drawOval(50,50,100,100);else {g.setColor(getBackground()); g.drawOval(50,50,100,100);}}

public Dimension getPreferredSize(){return new Dimension(200,200);}

6.3. Programmation Visuelle6.3. Programmation VisuelleGraphiqueGraphique

Page 224: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 224/303

6.3.1. Swing6.3.1. Swing

6.3.2. SWT6.3.2. SWT

6.3.3. Java2D6.3.3. Java2D6.3.4. Java3D6.3.4. Java3D

7. Programmation multithread7. Programmation multithread

Page 225: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 225/303

  225225

7.1. Définition7.1. Définition

7.2. Création et destruction d’un thread7.2. Création et destruction d’un thread

7.3. Gestion des threads7.3. Gestion des threads7.4. Groupe de threads7.4. Groupe de threads

7.5. Synchronisation7.5. Synchronisation

7.6. Exemple: modèle producteur-7.6. Exemple: modèle producteur-consommateurconsommateur

7.7. Application7.7. Application

7.1. Définition7.1. Définition

Page 226: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 226/303

  226226

• Java est un langage multithread: plusieurs threadsJava est un langage multithread: plusieurs threadspeuvent être exécutés simultanémentpeuvent être exécutés simultanément

• L’utilisation de threads peut améliorer:L’utilisation de threads peut améliorer: –

Le temps de réponse, l’efficacité,Le temps de réponse, l’efficacité,

 – La structure, la lisibilité, la conception d’unLa structure, la lisibilité, la conception d’unprogramme.programme.

• Les threads isolent les traitements et augmententLes threads isolent les traitements et augmentent

l’abstraction.l’abstraction.• Sur un système multiprocesseur, chaque threadSur un système multiprocesseur, chaque threadpeut être exécuté sur un processeurpeut être exécuté sur un processeur

7.1. Définition7.1. Définition

Page 227: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 227/303

  227227

• Les threads sont appelés « processusLes threads sont appelés « processuslégers »:légers »: – Flux séquentiel de contrôle dans un programmeFlux séquentiel de contrôle dans un programme

 – Plusieurs threads peuvent être associés àPlusieurs threads peuvent être associés àl’espace d’adressage d’un même processus,l’espace d’adressage d’un même processus,partageant ainsi plusieurs variables etpartageant ainsi plusieurs variables etméthodes, tout en possédant leurs propresméthodes, tout en possédant leurs propres

variables locales.variables locales. – Ne peuvent s'exécuter que dans le contexteNe peuvent s'exécuter que dans le contexted'un programme principal.d'un programme principal.

7.1. Définition7.1. Définition

Page 228: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 228/303

  228228

• Programmation multi-thread:Programmation multi-thread: – Prend avantage des ressources allouées auPrend avantage des ressources allouées au

programme de même que de sonprogramme de même que de son

environnementenvironnement

7.1. Définition7.1. Définition

Page 229: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 229/303

  229229

• Les threads sont utilisés pour laLes threads sont utilisés pour laprogrammation parallèle, ou pseudo parallèleprogrammation parallèle, ou pseudo parallèle(système multi-tâche, multi-traitement)(système multi-tâche, multi-traitement)

 – La programmation concurrente sous-entend lesLa programmation concurrente sous-entend lesmécanismes de synchronisation et d’exclusionmécanismes de synchronisation et d’exclusionmutuellemutuelle

 – Exemple :Exemple :• caissiers d'une banque et la maj de compte

• navigateur web : Chargement et lecture de pages

7.1. Définition7.1. Définition

Page 230: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 230/303

  230230

• Thread vs processus (définition):Thread vs processus (définition): – Processus: unité fonctionnelle à part entièreProcessus: unité fonctionnelle à part entière

 – Thread: "processus interne" à un processusThread: "processus interne" à un processus

• Thread vs processus (gestion):Thread vs processus (gestion): – Lancement d'un processus coûteux en

ressources machine (temps, taille mémoire, en

charge de l'OS), – Thread utilise mêmes ressources machine de sonprocessus

7.2.7.2. Création et destructionCréation et destructiond’un threadd’un thread

Page 231: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 231/303

  231231

• Classe Thread: définie dans le package java.langClasse Thread: définie dans le package java.lang• Syntaxe :Syntaxe :

public class Thread extends Object implements Runnablepublic class Thread extends Object implements Runnablepublic interface Runnable {public interface Runnable { public abstract void run()public abstract void run() }}

•  Actions à effectuer: Actions à effectuer: – Définies dans le corps du thread (la méthodeDéfinies dans le corps du thread (la méthode run() run() )).. – Chaque thread commence son exécution parChaque thread commence son exécution par

l’exécution de sa méthode publique run().l’exécution de sa méthode publique run().• Le code de l'instance d'un thread s'exécute enLe code de l'instance d'un thread s'exécute en

"parallèle" des autres threads existants."parallèle" des autres threads existants.

7.2.7.2. Création et destructionCréation et destructiond’un threadd’un thread

Page 232: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 232/303

  232232

• 2 techniques:2 techniques: – Dériver la classe ThreadDériver la classe Thread

• Utilisée quand la classe à paralléliser n’a pas besoinUtilisée quand la classe à paralléliser n’a pas besoin

d’hériter d’une autre classed’hériter d’une autre classe – Implémenter l’interface java.lang.RunnableImplémenter l’interface java.lang.Runnable• Permet de dériver d’une autre classe (pas d’héritagePermet de dériver d’une autre classe (pas d’héritage

multiple en java) (exemple: les applets)multiple en java) (exemple: les applets)

• Permet de partager les données entre les différentsPermet de partager les données entre les différentstreadstreads

7.2.7.2. Création et destructionCréation et destructiond’un threadd’un thread

Page 233: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 233/303

  233233

• 1ère technique:1ère technique: Dériver la classe ThreadDériver la classe Thread – Redéfinir le corps de la méthode run()Redéfinir le corps de la méthode run()

(la classe Thread n’est pas abstraite)(la classe Thread n’est pas abstraite)

 – Instancier la classe en un objetInstancier la classe en un objet – Lancer le thread:Lancer le thread:• La méthode start() La méthode start() 

 – Visualiser les résultats (option): Visualiser les résultats (option):

• La méthode sleep() La méthode sleep()  – ExempleExemple class Thread implements Runnable {}

class Animation extends Thread {}start()run()

7.2.7.2. Création et destructionCréation et destructiond’un threadd’un thread

Page 234: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 234/303

  234234

• 2ème technique:2ème technique: Implémenter l’interface RunnableImplémenter l’interface Runnable – Définir le corps de la méthode run()Définir le corps de la méthode run() – Créer un thread: new Thread(…, Runnable,…) 

(constructeur liant le thread à la classe) – Lancer le thread: Méthode start()  – Exemple

Thread myThreadstart()

class Animation implements Runnable {

myThread = new Thread(Animation);myThread. start();run();

}crée

7.2.7.2. Création et destructionCréation et destructiond’un threadd’un thread

Page 235: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 235/303

  235235

• Résumé:Résumé:

Les attributs de la classesont partagés par tous lesthreads qui y sont placés.

L'héritage reste possible :on peut implémenter autant d'interfaces que

l'on souhaite.

implements

 java.lang.Runnable

On ne peut plus hériter 

d'une autre classe.

Chaque thread a ses

 propres donnéesextends java.lang.Thread

InconvénientsAvantages

7.3. Gestion des threads7.3. Gestion des threads

Page 236: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 236/303

  236236

• Cycle de vie d’un Thread:Cycle de vie d’un Thread: – Les états d’un thread:Les états d’un thread:

• NouveauNouveau

•ExévutableExévutable

• BloquéBloqué• MortMort

nouveau

mort

démarrer  start()

la méthode run se termine stop()

Page 237: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 237/303

7.3. Gestion des threads7.3. Gestion des threads

Page 238: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 238/303

  238238

• Contrôle des Thread:Contrôle des Thread:• void suspend() void suspend() : arrête le thread jusqu’à réception: arrête le thread jusqu’à réception

d’un resume() envoyé par un autre threadd’un resume() envoyé par un autre thread(obsolète).(obsolète).

• void resume() void resume() : reprend l’exécution de ce thread.: reprend l’exécution de ce thread.Cette méthode n’est valide qu’après que suspend()Cette méthode n’est valide qu’après que suspend()ait été invoquée (obsolète).ait été invoquée (obsolète).

• static void sleep() static void sleep() : stoppe le thread courant: stoppe le thread courantpendant un temps déterminé. Il peut être réveillépendant un temps déterminé. Il peut être réveilléavant l’heure par une autre méthode. Dans ce cas,avant l’heure par une autre méthode. Dans ce cas,le flux de programme ayant stoppé le thread recoitle flux de programme ayant stoppé le thread recoitune exception InterruptedException.une exception InterruptedException.

7.3. Gestion des threads7.3. Gestion des threads

Page 239: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 239/303

  239239

• Contrôle des Thread:Contrôle des Thread:• void interrupt() void interrupt() : permet de réveiller une tâche: permet de réveiller une tâche

endormie parendormie par sleep() sleep() ,, wait() wait() ouou suspend() suspend() en luien luienvoyant une exception InterruptedException.envoyant une exception InterruptedException.

• void join() void join() : attend que le thread spécifié ait cessé: attend que le thread spécifié ait cesséd’être vivant.d’être vivant.

• void join(long millis) void join(long millis) : attend que le thread spécifié: attend que le thread spécifié

ait cessé d’être vivant, ou que le nombre spécifié deait cessé d’être vivant, ou que le nombre spécifié demillisecondes spécifié soit écoulé.millisecondes spécifié soit écoulé.

• isAlive() isAlive() : renvoie true si le thread est démarré et: renvoie true si le thread est démarré etn’est pas encore terminé.n’est pas encore terminé.

7.3. Gestion des threads7.3. Gestion des threads

Page 240: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 240/303

  240240

• Contrôle des Thread:Contrôle des Thread:• static void yield() static void yield() : arrête le thread courant le temps: arrête le thread courant le temps

d’exécuter d’autres tâches en attente de priorité aud’exécuter d’autres tâches en attente de priorité aumoins égale à celle de ce thread.moins égale à celle de ce thread.

• void wait() void wait() ,, notify() notify() : méthodes héritées de la classe: méthodes héritées de la classeObject.Object. wait() wait() arrête le thread auquel appartientarrête le thread auquel appartientl’objet jusqu’à ce que la méthodel’objet jusqu’à ce que la méthode notify() notify() de cetde cetobjet soit appelée par un autre thread,objet soit appelée par un autre thread,

déverrouillant ainsi le thread. Ne peuvent êtredéverrouillant ainsi le thread. Ne peuvent êtreappelé que dans une méthode synchronisée.appelé que dans une méthode synchronisée.

• void notifyall() void notifyall() : déverrouille les thread qui ont: déverrouille les thread qui ontappeléappelé wait() wait() sur cet objet.sur cet objet.

7.3. Gestion des threads7.3. Gestion des threads

Page 241: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 241/303

  241241

• Identification d’un Thread:Identification d’un Thread: – Un nom Un nom :: Si aucun nom ne lui est attribué lors de saSi aucun nom ne lui est attribué lors de sa

création, il reçoit le nom Thread- suivi ducréation, il reçoit le nom Thread- suivi du

numéro d’ordre de sa créationnuméro d’ordre de sa création.. – Une cible Une cible :: Une cible est un objet instance d'une classeUne cible est un objet instance d'une classe

implémentant l'interface Runnableimplémentant l'interface Runnable

 – Un groupe : Un groupe est une instance de la classe

 java.lang.ThreadGroup. – Constructeur : les 3 paramètres pour créer un thread

sont : le nom, la cible et s’il appartient à ungroupe. 

7.3. Gestion des threads7.3. Gestion des threads

Page 242: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 242/303

  242242

• Identification d’un Thread: les constructeursIdentification d’un Thread: les constructeurs – ThreadThread()() – ThreadThread(Runnable)(Runnable)

 – ThreadThread(Runnable, String)(Runnable, String) – ThreadThread(String)(String) – ThreadThread(ThreadGroup, Runnable)(ThreadGroup, Runnable) – ThreadThread(ThreadGroup, Runnable, String)(ThreadGroup, Runnable, String) – ThreadThread(ThreadGroup, String)(ThreadGroup, String)

7.3. Gestion des threads7.3. Gestion des threads

Page 243: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 243/303

  243243

• Scheduling, priorité d’un Thread:Scheduling, priorité d’un Thread:• Java offre la possibilité de fixer les priorités desJava offre la possibilité de fixer les priorités des

différents "threads" d'un processus: la priorité d’undifférents "threads" d'un processus: la priorité d’un

thread est héritée du thread créateurthread est héritée du thread créateur• Le partage du temps entre "threads" dépend duLe partage du temps entre "threads" dépend du

S.E :S.E : – Le niveau de priorité détermine le rapport entre les tempsLe niveau de priorité détermine le rapport entre les temps

alloués à chaque thread exemple: Unix et Windowsalloués à chaque thread exemple: Unix et Windows – Les "threads" actifs de plus hautes priorité se partagent la CPU.Les "threads" actifs de plus hautes priorité se partagent la CPU.

7.3. Gestion des threads7.3. Gestion des threads

Page 244: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 244/303

  244244

• Scheduling, priorité d’un Thread:Scheduling, priorité d’un Thread:• Attributs : Attributs :

 – static int MIN_PRIORITY=1,static int MIN_PRIORITY=1,

 – static int MAX_PRIORITY=10,static int MAX_PRIORITY=10, – static int NORM_PRIORITY=5 est la priorité par défautstatic int NORM_PRIORITY=5 est la priorité par défaut

• void setPriority(int) void setPriority(int) : méthode modifiant la priorité du: méthode modifiant la priorité dureceveur.receveur.

• int getPriority() int getPriority() permet de connaître la priorité d'unpermet de connaître la priorité d'un"thread“"thread“

• ExempleExemple

7.4. Groupe de threads7.4. Groupe de threads

Page 245: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 245/303

  245245

• La création desLa création des groupes de threadsgroupes de threads permet depermet defaciliter la gestion des threads au niveau de:faciliter la gestion des threads au niveau de: – PrioritésPriorités – Changement d’étatsChangement d’états

• Technique:Technique: – créer un groupe: instancier objet de la classecréer un groupe: instancier objet de la classe ThreadGroupThreadGroup – attacher des threads au groupe: constructeur adéquat de laattacher des threads au groupe: constructeur adéquat de la

classeclasse ThreadThread qui prend comme paramètre le nom duqui prend comme paramètre le nom du

groupe.groupe. – invoquer alors les méthodes de contrôle d'exécutioninvoquer alors les méthodes de contrôle d'exécution

des threads sur l'objet de groupe, identiques à lades threads sur l'objet de groupe, identiques à la

classe Thread :classe Thread : suspend()suspend(),, resume()resume(),, stop()stop(), ..., ...

7.4. Groupe de threads7.4. Groupe de threads

Page 246: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 246/303

  246246

• Arborescence de threads: Arborescence de threads: – Au démarrage, le système crée un groupe nommé Au démarrage, le système crée un groupe nommé

``main``: chaque thread nouvellement crée``main``: chaque thread nouvellement créedevient membre de ce groupe.devient membre de ce groupe.

• Appartenance de thread à un groupe: Appartenance de thread à un groupe: – Le plus grand groupe dans java est le ``main``Le plus grand groupe dans java est le ``main`` – Création de sous-groupes à partir du groupe main:Création de sous-groupes à partir du groupe main:

Les groupes de threads peuvent contenir nonLes groupes de threads peuvent contenir non

seulement des simples threads mais aussi desseulement des simples threads mais aussi desgroupes de threadsgroupes de threads

7.4. Groupe de threads7.4. Groupe de threads

Page 247: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 247/303

  247247

7.5. Synchronisation7.5. Synchronisation

Page 248: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 248/303

  248248

• Exclusion mutuelle:Exclusion mutuelle: – Mécanisme d’exclusion mutuelle : moniteur.Mécanisme d’exclusion mutuelle : moniteur.

• Sécurisation d’une méthode:Sécurisation d’une méthode: – L'accès simultané par deux threads à une ressourceL'accès simultané par deux threads à une ressource

critique critique peut être gênantpeut être gênant – Pour gérer la concurrence d'accès à une méthode,Pour gérer la concurrence d'accès à une méthode,

définition d’une section critique : utilisation du modificateurdéfinition d’une section critique : utilisation du modificateur"synchronized" à la déclaration de la méthode (De cette"synchronized" à la déclaration de la méthode (De cettemanière, on crée un moniteur)manière, on crée un moniteur)

 – L'exécution d'une méthode "synchronized"L'exécution d'une méthode "synchronized" est près de 10est près de 10fois plus lentefois plus lente que celle d'une méthode classique.que celle d'une méthode classique.N'utilisez cette technique qu'à bon escient.N'utilisez cette technique qu'à bon escient.

7.5. Synchronisation7.5. Synchronisation

Page 249: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 249/303

  249249

• Exemple:Exemple:class s {

int cellule1, cellule2, cellule3 ;synchronized int somme(){

return cellule1+ cellule2+ cellule3 ;}synchronized void init_valeur(int a1, int a2, int a3){

cellule1=a1 ;cellule2=a2 ;cellule3=a3 ;

}...}

7.5. Synchronisation7.5. Synchronisation

Page 250: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 250/303

  250250

• Sécurisation d’un bloc :Sécurisation d’un bloc : – l’utilisation de méthodes synchronisées tropl’utilisation de méthodes synchronisées trop

longues peut créer une baisse d’efficacité. il estlongues peut créer une baisse d’efficacité. il est

possible avec java de placer n’importe quel blocpossible avec java de placer n’importe quel blocdans un moniteur, ce qui réduit la longueur desdans un moniteur, ce qui réduit la longueur dessections critiques.sections critiques.

 – Syntaxe :Syntaxe :synchronized (MonObjet) {synchronized (MonObjet) {

//section critique//section critique

}}

7.5. Synchronisation7.5. Synchronisation

Page 251: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 251/303

  251251

• Sécurisation d’un bloc :Sécurisation d’un bloc :exempleexemple imprimante partagéeimprimante partagée

 – Deux utilisateurs peuvent y accéder en même temps:Deux utilisateurs peuvent y accéder en même temps:il est préférable que le premier arrivé puisse lail est préférable que le premier arrivé puisse la

verrouiller le temps que son impression soit terminée.verrouiller le temps que son impression soit terminée. – Dans le cas contraire, l'imprimante risqueraitDans le cas contraire, l'imprimante risquerait

d'imprimer alternativement une page d'un utilisateur,d'imprimer alternativement une page d'un utilisateur,puis une page d'un autre, et ainsi de suite.puis une page d'un autre, et ainsi de suite.

=> S'il s'agit d'imprimer deux documents de cent=> S'il s'agit d'imprimer deux documents de centpages chacun, il n'y a plus qu'à trier.pages chacun, il n'y a plus qu'à trier.

7.6. Exemple: modèle7.6. Exemple: modèleproducteur-consommateurproducteur-consommateur

Page 252: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 252/303

  252252

• Synchronisation wait et notify:Synchronisation wait et notify:• La synchronisation de processus utilise les signauxLa synchronisation de processus utilise les signaux

modélisés par les méthodes wait() et notify(). Ellemodélisés par les méthodes wait() et notify(). Ellerepose sur l’exclusion mutuelle, qui permet à deuxrepose sur l’exclusion mutuelle, qui permet à deux

processus de s ‘exécuter en section critique.processus de s ‘exécuter en section critique.• Les méthodes wait et notify sont héritées de la classeLes méthodes wait et notify sont héritées de la classeObject. Elles doivent être utilisées à l’intérieur deObject. Elles doivent être utilisées à l’intérieur desections critiques.sections critiques.

• En exécutant la méthode wait(), un thread libère lesEn exécutant la méthode wait(), un thread libère lesressources et passe à l’état endormi (sleep). Pendant ceressources et passe à l’état endormi (sleep). Pendant cetemps, un autre thread entre en section critique. Unetemps, un autre thread entre en section critique. Unefois celui-ci achevé, il appelle la méthode notify dufois celui-ci achevé, il appelle la méthode notify duthread initial pour le réveiller.thread initial pour le réveiller.

7.7. Application7.7. Application

Page 253: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 253/303

  253253

• L’horlogeL’horloge

8. Entrées/Sorties simples8. Entrées/Sorties simples

Page 254: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 254/303

  254254

8.1. Les flux8.1. Les flux8.2. Gestion des E/S8.2. Gestion des E/S

8.3. Manipulation des fichiers8.3. Manipulation des fichiers8.4. Gestion du flux de données8.4. Gestion du flux de données

8.5. Gestion de l’accès aléatoire à un8.5. Gestion de l’accès aléatoire à un

fichierfichier8.6. Flux de texte8.6. Flux de texte

8.1. Les flux8.1. Les flux

Page 255: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 255/303

  255255

• Définition:Définition: – Flux d’entrée:Flux d’entrée:

• objet à partir duquel on peut lire une suite d’octetsobjet à partir duquel on peut lire une suite d’octets

 – Flux de sortie:Flux de sortie:• objet vers lequel on peut écrire une suite d’octetsobjet vers lequel on peut écrire une suite d’octets

8.1. Les flux8.1. Les flux

Page 256: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 256/303

  256256

• Mise en œuvre:Mise en œuvre: – Les classes abstraites InputStream et OutputStreamLes classes abstraites InputStream et OutputStream

implémentent ces deux types de fluximplémentent ces deux types de flux – Les flux d’octets conviennent mal au traitementLes flux d’octets conviennent mal au traitement

d’informations codées en Unicode (2 octets): introductiond’informations codées en Unicode (2 octets): introductiondes super-classes spéciales Reader et Writer pour traiter 2des super-classes spéciales Reader et Writer pour traiter 2octets au lieu de caractères d’1 octetoctets au lieu de caractères d’1 octet

 – Java fait dériver à partir de ces 4 classes abstraites, uneJava fait dériver à partir de ces 4 classes abstraites, unemultitude de classes concrètes spécialisées dans lemultitude de classes concrètes spécialisées dans le

traitement des différents formats de données stockées danstraitement des différents formats de données stockées dansles fichiersles fichiers

8.1. Les flux8.1. Les flux

Page 257: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 257/303

  257257

• La faune des flux:La faune des flux:InputStream

ByteArrayInputStream

FileInputStream

PipedInputStream

Filter InputStream

SequenceInputStream

StringBuffer InputStream

ObjectInputStream

BufferedInputStream

CheckedInputStream

DigestInputStream

Inflater InputStream

LineNumber InputStream

Pushback InputStream

DataInputStream

GZIPInputStream ZipInputStream

Jar InputStream

ObjectInput

RandomAccessFile

DataInput

DataOutput

•Package java.io:nombre de classes dévoluesà la gestion des flux important

8.1. Les flux8.1. Les fluxDataInput

DataOutput

Page 258: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 258/303

  258258

• La faune des flux:La faune des flux:OutputStream

ByteArrayOutputStream

FileOutOutputStream

PipedOutputStream

Filter OutputStream

ObjectOutputStream

GZIPOutputStream

ZipOutputStream

Jar OutputStream

ObjectOutput

BufferedOutputStream

CheckedOutputStream

DigestOutputStream

Deflater OutputStream

DataOutputStream

Deflater OutputStream

8.1. Les flux8.1. Les flux

f d flf d fl R d

Page 259: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 259/303

  259259

• La faune des flux:La faune des flux: Reader 

LineNumber Reader 

Pushback Reader 

FileReader 

BufferedReader 

CharArrayReader 

Filter Reader 

PipedReader 

StringReader 

InputStreamReader 

Writer 

FileWriter 

BufferedWriter 

CharArrayWriter 

Filter Writer 

PipedWriter 

StringWriter 

OutputStreamWriter 

PrintWriter 

8.2. Gestion des E/S8.2. Gestion des E/S

M d d' è d é è fl dM d d' è d é è fl déd é (S )

Page 260: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 260/303

  260260

• Mode d'accès aux données: accès par flux deMode d'accès aux données: accès par flux dedonnées (données (Stream Stream ):): – Définition: accéder aux données sous la forme d'un fluxDéfinition: accéder aux données sous la forme d'un flux

séquentielséquentiel – La POO utilisée par Java permet de manipuler les donnéesLa POO utilisée par Java permet de manipuler les données

entrantes ou sortantes avec les mêmes classes, quelque soitentrantes ou sortantes avec les mêmes classes, quelque soitle type de source de données (qu'elle soit en mémoire, dansle type de source de données (qu'elle soit en mémoire, dansun fichier ou sur Internet) :un fichier ou sur Internet) :

 – Exemple: lecture de données d'un flux; utiliser les méthodesExemple: lecture de données d'un flux; utiliser les méthodesdes classesdes classes InputStreamInputStream,, FilterInputStreamFilterInputStream ou de sesou de ses

classes dérivéesclasses dérivées – Exemple: écriture dans un flux de données; utiliser lesExemple: écriture dans un flux de données; utiliser les

méthodes des classesméthodes des classes OutputStreamOutputStream,,FilterOutputStreamFilterOutputStream ou de ses classes dérivées.ou de ses classes dérivées.

8.2. Gestion des E/S8.2. Gestion des E/S

M d d' è d é è lé t iM d d' è d é è lé t i

Page 261: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 261/303

  261261

• Mode d'accès aux données: accès aléatoireMode d'accès aux données: accès aléatoire((Random Random ):): – Définition: permet d'accéder aux données dans n'importeDéfinition: permet d'accéder aux données dans n'importe

quel ordre.quel ordre. –  Vous pouvez à tout moment aller en avant ou en arrière pour Vous pouvez à tout moment aller en avant ou en arrière pour

lire ou écrire une partie des données.lire ou écrire une partie des données. – Mode d'accès comparable à celui utilisé pour la mémoire viveMode d'accès comparable à celui utilisé pour la mémoire vive – Son usage est plus spécifique : Java fournit uniquement laSon usage est plus spécifique : Java fournit uniquement la

classeclasse RandomAccessFileRandomAccessFile qui permet d'accéder à unequi permet d'accéder à une

position quelconque dans un fichierposition quelconque dans un fichier – Certains types de source de données, comme les pipelinesCertains types de source de données, comme les pipelinesou les URL ne peuvent supporter ce mode d'accèsou les URL ne peuvent supporter ce mode d'accès

8.2. Gestion des E/S8.2. Gestion des E/S

G ti d l' è d é lG ti d l' è d é l

Page 262: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 262/303

  262262

• Gestion de l'accès aux données avec lesGestion de l'accès aux données avec lesexceptions:exceptions: – LesLes exceptionsexceptions permettent de programmer de manière pluspermettent de programmer de manière plus

simple et surtout plus maintenable une séquencesimple et surtout plus maintenable une séquenced'instructions devant effectuer des entrées/sorties.d'instructions devant effectuer des entrées/sorties.

 – Nombre de contrôles important (il faut vérifier à chaqueNombre de contrôles important (il faut vérifier à chaqueaccès à un flux de données ou un fichier si tout s'est bienaccès à un flux de données ou un fichier si tout s'est biendéroulé).déroulé).

 – Une programmation n'utilisant pas les exceptions est doncUne programmation n'utilisant pas les exceptions est donctruffée de contrôles après chaque instruction, ce qui entruffée de contrôles après chaque instruction, ce qui en

réduit la lisibilité.réduit la lisibilité. – La plupart des méthodes d'entrée/sortie déclenche uneLa plupart des méthodes d'entrée/sortie déclenche une

exception de classeexception de classe IOExceptionIOException ou de ses dérivéesou de ses dérivéesEOFExceptionEOFException,, FileNotFoundExceptionFileNotFoundException,,InterruptedIOExceptionInterruptedIOException ouou UTFDataFormatExceptionUTFDataFormatException

8.2. Gestion des E/S8.2. Gestion des E/S

import java.io.*;class Classe1 {void lireFichier (String fichier) {

Page 263: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 263/303

  263263

void lireFichier (String fichier) {try { // Suite d'instructions accédant au fichier et

// ne s'occupant pas de la gestion des erreurs// Tentative d'ouvrir un fichier // Lecture dans le fichier }

catch (FileNotFoundException e) { // Exception déclenchée si le fichier n'existe pas

}catch (EOFException e) { // Exception déclenchée si la fin du fichier est atteinte

}catch (IOException e) { // Exception déclenchée si un autre problème survient

// pendant l'accès au fichier }

finally { // Le bloc finally est toujours exécuté ce qui permet d'être sûr 

// que la fermeture du fichier sera effectuéetry { // Fermeture du fichier si le fichier a été ouvert}

catch (IOException e) { // Exception déclenchée si un problème survient pendant lafermeture }} }

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

L'i t f j i Fil FiltL'i t f j i Fil Filt

Page 264: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 264/303

  264264

• L'interface java.io.FilenameFilterL'interface java.io.FilenameFilter – Interface utilisée pour permettre d'accepter ou deInterface utilisée pour permettre d'accepter ou de

rejeter un fichier issu d'une liste.rejeter un fichier issu d'une liste. – Une instance d'une classe implémentant cette interfaceUne instance d'une classe implémentant cette interface

est requise par les méthodes list () de la classeest requise par les méthodes list () de la classe FileFile etetsetFilenameFilter () de la classesetFilenameFilter () de la classe FileDialogFileDialog..

• MéthodeMéthode – public booleanpublic boolean acceptaccept ((FileFile dir,dir, StringString name):name): CetteCette

méthode doit renvoyer true si le fichier name seméthode doit renvoyer true si le fichier name setrouvant dans le répertoire dir est accepté.trouvant dans le répertoire dir est accepté.

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

L l j i FilL l j i Fil

Page 265: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 265/303

  265265

• La classe java.io.File:La classe java.io.File: – Définition:Définition:

• Représente un chemin d'accès au système de fichiers localReprésente un chemin d'accès au système de fichiers local• Effectue des opérations sur celui-ci (autorisation d'accès enEffectue des opérations sur celui-ci (autorisation d'accès en

lecture/écriture, liste des fichiers d'un répertoire,...)lecture/écriture, liste des fichiers d'un répertoire,...)• Ce chemin d'accès peut désigner un fichier ou un répertoire.Ce chemin d'accès peut désigner un fichier ou un répertoire.

 – Exception éventuellement déclenchée:Exception éventuellement déclenchée:SecurityExceptionSecurityException (si le gestionnaire de sécurité(si le gestionnaire de sécuritéactif leur interdit d'être exécuté).actif leur interdit d'être exécuté).

 – La description des chemins d'accès (séparateurs,La description des chemins d'accès (séparateurs,description des disques,...) utilise les conventions dudescription des disques,...) utilise les conventions dusystème sur lequel est exécutée la Machine Virtuelle.système sur lequel est exécutée la Machine Virtuelle.

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

L l j i FilL l j i Fil

Page 266: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 266/303

  266266

• La classe java.io.File:La classe java.io.File: – ChampsChamps

publicpublic staticstatic final Stringfinal String separator;separator;

publicpublic staticstatic final char final char separatorChar;separatorChar;

La chaîne ou le caractère utilisé comme séparateur deLa chaîne ou le caractère utilisé comme séparateur defichier (égal généralement à / ou \).fichier (égal généralement à / ou \).

publicpublic staticstatic final Stringfinal String pathSeparator;pathSeparator;

publicpublic staticstatic final char final char pathSeparatorChar;pathSeparatorChar;

La chaîne ou le caractère utilisé comme séparateur deLa chaîne ou le caractère utilisé comme séparateur deplusieurs chemins d'accès (égal généralement à ;).plusieurs chemins d'accès (égal généralement à ;).

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

L l j i FilL l j i Fil

Page 267: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 267/303

  267267

• La classe java.io.File:La classe java.io.File: – ConstructeursConstructeurspublic File (public File (StringString path)path) 

public File (public File (StringString dir,dir, StringString name)name)

public File (File dir,public File (File dir, StringString name)name) 

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

La classe java io File:La classe java io File:MéthodesMéthodes

Page 268: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 268/303

  268268

• La classe java.io.File:La classe java.io.File: – MéthodesMéthodes

publicpublic StringString getNamegetName()() : nom du fichier ou du répertoire d'un chemin: nom du fichier ou du répertoire d'un chemind'accès.d'accès.

publicpublic StringString getPathgetPath()() : chemin d'accès d'un objet de classe File.: chemin d'accès d'un objet de classe File.

publicpublic StringString getAbsolutePathgetAbsolutePath()() : chemin d'accès absolu.: chemin d'accès absolu.publicpublic StringString getParentgetParent ()() : chemin d'accès du répertoire parent au chemin: chemin d'accès du répertoire parent au chemind'accès de l'objet de classe File, ou null s'ild'accès de l'objet de classe File, ou null s'il

n'existe pas.n'existe pas.public booleanpublic boolean existsexists () throws() throws SecurityExceptionSecurityException 

public booleanpublic boolean isFileisFile () throws() throws SecurityExceptionSecurityException 

public booleanpublic boolean isDirectoryisDirectory () throws() throws SecurityExceptionSecurityException 

public booleanpublic boolean isAbsoluteisAbsolute ()() Ces méthodes renvoient true, si le cheminCes méthodes renvoient true, si le chemind'accèsd'accès existe, s'il correspond à un fichier ou àexiste, s'il correspond à un fichier ou à unun

répertoire, ou si le chemin d'accès est absolurépertoire, ou si le chemin d'accès est absolu

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

La classe java io File:La classe java io File:

Page 269: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 269/303

  269269

• La classe java.io.File:La classe java.io.File: – MéthodesMéthodes

public booleanpublic boolean canReadcanRead() throws() throws SecurityExceptionSecurityException 

public booleanpublic boolean canWritecanWrite() throws() throws SecurityExceptionSecurityException Ces méthodes renvoient true, si le chemin d'accèsCes méthodes renvoient true, si le chemin d'accès

est accessible en lecture ou en écriture.est accessible en lecture ou en écriture.public longpublic long lastModifiedlastModified() throws() throws SecurityExceptionSecurityException 

Renvoie la date de dernière modification du fichier.Renvoie la date de dernière modification du fichier.Cette date n'étant pas exprimé dans la mêmeCette date n'étant pas exprimé dans la même échelleéchelleque celle utilisée par la classeque celle utilisée par la classe DateDate, elle ne, elle ne peut êtrepeut être

utilisée que pour comparer des dates deutilisée que pour comparer des dates de différents fichiers.différents fichiers.public longpublic long lengthlength() throws() throws SecurityExceptionSecurityException ::

taille du chemin d'accès représentant un fichier.taille du chemin d'accès représentant un fichier.

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

La classe java io File:La classe java io File:

Page 270: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 270/303

  270270

• La classe java.io.File:La classe java.io.File: – MéthodesMéthodes

public booleanpublic boolean deletedelete() throws() throws SecurityExceptionSecurityException 

public booleanpublic boolean renameTorenameTo(File dest) throws(File dest) throws SecurityExceptionSecurityException Ces méthodes permettent de supprimer ou deCes méthodes permettent de supprimer ou de

renommer un chemin d'accès, et renvoient true sirenommer un chemin d'accès, et renvoient true sil'opération s'est effectuée correctement.l'opération s'est effectuée correctement.

public booleanpublic boolean mkdir mkdir () throws() throws SecurityExceptionSecurityException 

public booleanpublic boolean mkdirsmkdirs() throws() throws SecurityExceptionSecurityException Ces méthodes permettent de créer le répertoireCes méthodes permettent de créer le répertoire

ou les répertoires représentés par le cheminou les répertoires représentés par le chemin d'accèsd'accèset renvoient true si l'opération s'estet renvoient true si l'opération s'est effectuéeeffectuéecorrectement.correctement.

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

La classe java io File:La classe java io File:Méth dMéth d

Page 271: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 271/303

  271271

• La classe java.io.File:La classe java.io.File: – MéthodesMéthodes

publicpublic StringString [ ][ ] listlist() throws() throws SecurityExceptionSecurityException 

publicpublic StringString [ ][ ] listlist((FilenameFilter FilenameFilter  filter) throwsfilter) throws SecurityExceptionSecurityException 

renvoient un tableau de chaînes de caractères dont les éléments sontrenvoient un tableau de chaînes de caractères dont les éléments sontles fichiers et les répertoires contenus dans le répertoire représentéles fichiers et les répertoires contenus dans le répertoire représentépar un chemin d'accès. Les répertoires . et .. sont exclus de cettepar un chemin d'accès. Les répertoires . et .. sont exclus de cetteliste.liste.

La seconde méthode permet d'appliquer le filtre filter pour neLa seconde méthode permet d'appliquer le filtre filter pour nerécupérer que les fichiers et les répertoires autorisés par la méthoderécupérer que les fichiers et les répertoires autorisés par la méthodeaccept () de la classe de l'objet filter implémentant l'interfaceaccept () de la classe de l'objet filter implémentant l'interfaceFilenameFilterFilenameFilter..

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

La classe java io File:La classe java io File:Méth dMéthodes

Page 272: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 272/303

  272272

• La classe java.io.File:La classe java.io.File: – MéthodesMéthodes

public intpublic int hashCodehashCode()()

public booleanpublic boolean equalsequals ((ObjectObject obj)obj)

publicpublic StringString toStringtoString ()() 

Ces méthodes outrepassent celles de la classeCes méthodes outrepassent celles de la classe ObjectObject, pour renvoyer, pour renvoyerun code de hash, comparer un chemin d'accès à un objet ouun code de hash, comparer un chemin d'accès à un objet ourenvoyer une chaîne de caractères égale au chemin d'accès.renvoyer une chaîne de caractères égale au chemin d'accès.

8.3. Manipulation des fichiers8.3. Manipulation des fichiers

• La classe java io FileDescriptorLa classe java io FileDescriptorél f l é d d f h ( d

Page 273: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 273/303

  273273

• La classe java.io.FileDescriptorLa classe java.io.FileDescriptor – Classe finale représentant un descripteur de fichier. (Une instance deClasse finale représentant un descripteur de fichier. (Une instance decette classe permet de manipuler un fichier ouvert ou les E/S std)cette classe permet de manipuler un fichier ouvert ou les E/S std)

 – Méthodes getFD() de classesMéthodes getFD() de classes FileInputStreamFileInputStream,, FileOutputStreamFileOutputStream etet RandomAccessFileRandomAccessFile permettent d'obtenir 1 instance de classepermettent d'obtenir 1 instance de classe

FileDescriptor et les champs static in, out et err associésFileDescriptor et les champs static in, out et err associés

• ChampsChamps

publicpublic staticstatic final FileDescriptor final FileDescriptor inin 

publicpublic staticstatic final FileDescriptor final FileDescriptor outout 

publicpublic staticstatic final FileDescriptor final FileDescriptor err err  

• ConstructeurConstructeur – publicpublic FileDescriptor FileDescriptor  ()()

• MéthodesMéthodespublic booleanpublic boolean validvalid ()()

8.4. Gestion du flux de données8.4. Gestion du flux de données

Principe:Principe:è éè d é

Page 274: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 274/303

  274274

• Principe:Principe: – Accès aux données Accès aux données• soit en lecture grâce aux classes qui dérivent de la classesoit en lecture grâce aux classes qui dérivent de la classe

abstractabstract InputStreamInputStream

•soit en écriture grâce aux classes qui dérivent de lasoit en écriture grâce aux classes qui dérivent de laclasse abstractclasse abstract OutputStreamOutputStream..

 – Dans chacun des cas, ces classes se divisent en 2Dans chacun des cas, ces classes se divisent en 2catégories:catégories:• Les classes qui permettent de se lier à une source deLes classes qui permettent de se lier à une source de

données spécifiquedonnées spécifique• Les classes de filtre sur un flux de données

8.4.1. Accès en lecture8.4.1. Accès en lecture

Classes dérivant de InputStream:Classes dérivant de InputStream:

•Classes  •Paramètres des constructeurs 

•Chemin d'accès à un fichier (classe String)

Page 275: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 275/303

  275275

• Classes dérivant de InputStream:Classes dérivant de InputStream: – la classela classe FileInputStreamFileInputStream : accès en lecture à un: accès en lecture à un

fichierfichier – la classela classe StringBufferInputStreamStringBufferInputStream pour parcourirpour parcourir

une chaîne de caractères sous forme de flux deune chaîne de caractères sous forme de flux dedonnéesdonnées – la classela classe ByteArrayInputStreamByteArrayInputStream pour parcourir unpour parcourir un

tableau d'octets sous forme de flux de donnéestableau d'octets sous forme de flux de données – la classela classe PipedInputStreamPipedInputStream pour accéder à un fluxpour accéder à un flux

de données sous forme de pipelinede données sous forme de pipeline – la classela classe SequenceInputStreamSequenceInputStream pour accéder auxpour accéder aux

données de plusieurs flux de données les uns aprèsdonnées de plusieurs flux de données les uns aprèsles autres.les autres.

•FileInputStreamChemin d accès à un fichier (classe String)

•Fichier décrit par une instance de la classe File •Descripteur de fichier (classe FileDescriptor )

•StringBufferInputStream  •Chaîne de caractères (classe String)

•ByteArrayInputStream •Tableau d'octets (de type byte [])

•PipedInputStream  •Aucun pour créer un pipeline d'entrée•Sortie d'un pipeline (classe PipedOutputStream)

•SequenceInputStream •Une énumération de flux de données de classeInputStream •Deux flux de données de classe InputStream 

8.4.1. Accès en lecture8.4.1. Accès en lecture

Remarques:Remarques:

Page 276: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 276/303

  276276

• Remarques:Remarques: – Entrée Standard : accessible soit directement par leEntrée Standard : accessible soit directement par lechamp static in de la classechamp static in de la classe SystemSystem (classe(classeInputStreamInputStream), soit par le champ static in (classe), soit par le champ static in (classe

FileDescriptorFileDescriptor).). – L'accès en lecture aux sockets et à un fichier accessibleL'accès en lecture aux sockets et à un fichier accessible

via une URL s'effectue grâce à la méthodevia une URL s'effectue grâce à la méthodegetInputStream () des classesgetInputStream () des classes SocketSocket etet

URLConnectionURLConnection, qui renvoie une instance d'une classe, qui renvoie une instance d'une classedérivée de InputStream.dérivée de InputStream.

8.4.1. Accès en lecture8.4.1. Accès en lecture

• Classes de filtre sur un flux de données quiClasses de filtre sur un flux de données quidérivent de la classedérivent de la classe FilterInputStreamFilterInputStream ::

Page 277: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 277/303

  277277

• Classes de filtre sur un flux de données quiClasses de filtre sur un flux de données quidérivent de la classedérivent de la classe FilterInputStreamFilterInputStream :: – BufferedInputStreamBufferedInputStream pour accéder à un flux depour accéder à un flux de

données en utilisant une zone mémoire tampon (données en utilisant une zone mémoire tampon (buffer buffer )) – DataInputStreamDataInputStream pour lire dans un flux de donnéespour lire dans un flux de données

des données d'un des types de base de Java ou desdes données d'un des types de base de Java ou deschaînes de caractèreschaînes de caractères

 – LineNumberInputStreamLineNumberInputStream pour permettre de compterpour permettre de compterles lignes d'un flux de donnéesles lignes d'un flux de données

 – PushBackInputStreamPushBackInputStream pour permettre d'accéder à unpour permettre d'accéder à unflux de données avec la possibilité de revenir en arrièreflux de données avec la possibilité de revenir en arrièred'un octet.d'un octet.

 – etc…etc…

8.4.1. Accès en lecture8.4.1. Accès en lecture

• Empilement de flux filtrés:Empilement de flux filtrés:

Page 278: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 278/303

  278278

• Empilement de flux filtrés:Empilement de flux filtrés: – Grâce à ce système il devient possible d’utiliser n'importeGrâce à ce système il devient possible d’utiliser n'importequel filtre sur une source de données, et même cumulerquel filtre sur une source de données, et même cumulerles filtres les uns derrière les autresles filtres les uns derrière les autres

8.4.1. Accès en lecture8.4.1. Accès en lecture

• La classe java.io.InputStream:La classe java.io.InputStream:

Page 279: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 279/303

  279279

• La classe java.io.InputStream:La classe java.io.InputStream:  – super-classe abstract de toutes les classes permettantsuper-classe abstract de toutes les classes permettant

d'accéder à d'un flux de données en lecture.d'accéder à d'un flux de données en lecture.

8.4.1. Accès en lecture8.4.1. Accès en lecture• Méthodes de la classe java.io.InputStream:Méthodes de la classe java.io.InputStream:

– public abstract intpublic abstract int readread () throws() throws IOExceptionIOException Lit un octet dans leLit un octet dans leflux de données Renvoie -1 si la fin est atteinteflux de données. Renvoie -1 si la fin est atteinte.

Page 280: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 280/303

  280280

  public abstract intpublic abstract int () throws() throws pp Lit un octet dans leLit un octet dans leflux de données. Renvoie 1 si la fin est atteinte.flux de données. Renvoie 1 si la fin est atteinte. – public intpublic int readread (byte [ ] tab) throws(byte [ ] tab) throws IOExceptionIOException Lit tab.lengthLit tab.length

octets dans le tableau tab. Si la fin est atteinte pendant la lecture,octets dans le tableau tab. Si la fin est atteinte pendant la lecture,tab est remplit avec les octets lus. Renvoie le nombre d'octets lustab est remplit avec les octets lus. Renvoie le nombre d'octets lusou -1 si la fin est atteinte.ou -1 si la fin est atteinte.

 – public intpublic int readread (byte [ ] tab, int offset, int length) throws(byte [ ] tab, int offset, int length) throwsIOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException Lit length octetsLit length octetsdans le tableau tab, en le remplissant à partir de l'indice offset. Si ladans le tableau tab, en le remplissant à partir de l'indice offset. Si lafin est atteinte pendant la lecture, tab est remplit avec les octetsfin est atteinte pendant la lecture, tab est remplit avec les octetslus. Renvoie le nombre d'octets lus ou -1 si la fin est atteinte.lus. Renvoie le nombre d'octets lus ou -1 si la fin est atteinte.

 – public longpublic long skipskip (long n) throws(long n) throws IOExceptionIOException Saute n octets plusSaute n octets plusloin dans la lecture du flux de données. Renvoie le nombre d'octetsloin dans la lecture du flux de données. Renvoie le nombre d'octetseffectivement sautés.effectivement sautés.

 – public intpublic int availableavailable () throws() throws IOExceptionIOException Renvoie le nombreRenvoie le nombred'octets que les méthodes read () peuvent actuellement lire sansd'octets que les méthodes read () peuvent actuellement lire sansblo uer le thread courant.bloquer le thread courant.

8.4.1. Accès en lecture8.4.1. Accès en lecture• Méthodes de la classe java.io.InputStream:Méthodes de la classe java.io.InputStream:

– public voidpublic void closeclose () throws() throws IOExceptionIOException Ferme l'accès au flux deFerme l'accès au flux de

Page 281: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 281/303

  281281

  public voidpublic void () throws() throws pp Ferme l accès au flux deFerme l accès au flux dedonnées.données.

 – public synchronized voidpublic synchronized void mark mark (int readlimit) Marque la position(int readlimit) Marque la positioncourante dans le flux de données, pour qu'un appel à la méthodecourante dans le flux de données, pour qu'un appel à la méthodereset () provoque un retour en arrière à cette position. readlimitreset () provoque un retour en arrière à cette position. readlimit

permet de préciser le nombre d'octets maximum que l'on peut lirepermet de préciser le nombre d'octets maximum que l'on peut lireavant que la marque soit invalide, c'est-à-dire la taille maximum duavant que la marque soit invalide, c'est-à-dire la taille maximum duretour en arrière qu'il est possible de faire.retour en arrière qu'il est possible de faire.

 – public synchronized voidpublic synchronized void resetreset () throws() throws IOExceptionIOException Repositionne la position courante dans le flux de données sur laRepositionne la position courante dans le flux de données sur ladernière marque positionnée par la méthode mark (). Si aucunedernière marque positionnée par la méthode mark (). Si aucunemarque n'a été positionnée ou si la marque est invalide, unemarque n'a été positionnée ou si la marque est invalide, uneexception IOException est déclenchée.exception IOException est déclenchée.

 – public booleanpublic boolean markSupportedmarkSupported () Renvoie true si le flux de() Renvoie true si le flux dedonnées autorise l'utilisation des méthodes mark () et reset ().données autorise l'utilisation des méthodes mark () et reset ().

8.4.1. Accès en lecture8.4.1. Accès en lecture

• La classe java io DataInputStream:La classe java io DataInputStream:dé i d ldé i d l Filt I tStFilte Inp tSt eam tt I tStInp tSt eam

Page 282: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 282/303

  282282

• La classe java.io.DataInputStream:La classe java.io.DataInputStream: – dérive des classesdérive des classes FilterInputStreamFilterInputStream etet InputStreamInputStream implémente l'interfaceimplémente l'interface DataInput (DataInput (permet de lire à partir d'un fluxpermet de lire à partir d'un fluxde données autres chose que des octets).de données autres chose que des octets).

• ConstructeurConstructeur – public DataInputStream (public DataInputStream (InputStreamInputStream in)in) Construit une instance deConstruit une instance dela classe DataInputStream dont la lecture sera effectuée sur le fluxla classe DataInputStream dont la lecture sera effectuée sur le flux

de données in.de données in.

• MéthodesMéthodes – public final void read (byte [ ] tab) throwspublic final void read (byte [ ] tab) throws IOExceptionIOException 

 – public final void read (byte [ ] tab, int offset, int length) throwspublic final void read (byte [ ] tab, int offset, int length) throwsIOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException

8.4.1. Accès en lecture8.4.1. Accès en lecture

Méthodes de la classeMéthodes de la classe FilterInputStreamFilterInputStream::– public final void readFully (byte [ ] tab) throwspublic final void readFully (byte [ ] tab) throws IOExceptionIOException

Page 283: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 283/303

  283283

od d a aod d a a pp  public final void readFully (byte [ ] tab) throwspublic final void readFully (byte [ ] tab) throws IOExceptionIOException 

 – public final void readFully (byte [ ] tab, int offset, int length) throwspublic final void readFully (byte [ ] tab, int offset, int length) throwsIOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException 

 – public final boolean readBoolean () throwspublic final boolean readBoolean () throws IOExceptionIOException 

 – public final byte readByte () throwspublic final byte readByte () throws IOExceptionIOException  – ……

 – public final char readChar () throwspublic final char readChar () throws IOExceptionIOException 

 – ……

 – public final double readDouble () throwspublic final double readDouble () throws IOExceptionIOException 

 – public finalpublic final StringString readLine () throwsreadLine () throws IOExceptionIOException  – public finalpublic final StringString readUTF () throwsreadUTF () throws IOExceptionIOException 

 – public final staticpublic final static StringString readUTF (DataInput in) throwsreadUTF (DataInput in) throwsIOExceptionIOException 

 – public final int skipBytes (int n) throwspublic final int skipBytes (int n) throws IOExceptionIOException 

• Classes dérivant de OutputStream:Classes dérivant de OutputStream:

8.4.2. Accès en écriture8.4.2. Accès en écriture

•Classes •Paramètres des constructeurs

Page 284: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 284/303

  284284

• Classes dérivant de OutputStream:Classes dérivant de OutputStream: – Elles permettent de se lier à un type de source deElles permettent de se lier à un type de source de

données spécifique :données spécifique :

 – la classela classe FileOutputStreamFileOutputStream pour accéder en écriture àpour accéder en écriture àun fichierun fichier – la classela classe ByteArrayOutputStreamByteArrayOutputStream pour écrire dans unpour écrire dans un

tableau d'octets sous forme de flux de donnéestableau d'octets sous forme de flux de données

 – la classela classe PipedOutputStreamPipedOutputStream pour accéder à un fluxpour accéder à un fluxde données sous forme de pipelinede données sous forme de pipeline

•FileOutputStream •Chemin d'accès à un fichier (classe String)•Fichier décrit par une instance de la classe File•Descripteur de fichier (classe FileDescriptor )

•ByteArrayOutputStream •Aucun pour créer un tableau d'octets par défaut•Taille minimum du tableau d'octets

•PipedOutputStream •Aucun pour créer un pipeline de sortie•Entrée d'un pipeline (classe PipedInputStream)

• Remarques:Remarques:

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 285: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 285/303

  285285

• Remarques:Remarques: – Accès aux trois autres types de sources de données Accès aux trois autres types de sources de données

restantes (les sorties standards, les sockets et un fichierrestantes (les sorties standards, les sockets et un fichiervia une URL) :via une URL) :

 – Sorties standard et d'erreur :Sorties standard et d'erreur :• soit directement par les champs static out et err de la classesoit directement par les champs static out et err de la classeSystemSystem (de classe(de classe PrintStreamPrintStream),),

• soit par les champs static out et err de la classesoit par les champs static out et err de la classeFileDescriptorFileDescriptor. Ces dernièrs champs étant eux-même de. Ces dernièrs champs étant eux-même de

classe FileDescriptor, l'écriture sur les sorties standard peutclasse FileDescriptor, l'écriture sur les sorties standard peutdémarrer en créant une instance de classedémarrer en créant une instance de classe FileOutputStreamFileOutputStream,,par exemple avec l'instruction new FileOutputStreampar exemple avec l'instruction new FileOutputStream(FileDescriptor.out).(FileDescriptor.out).

• Remarques:Remarques:

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 286: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 286/303

  286286

• Remarques:Remarques: – Sockets et fichier accessible via une URL : méthodeSockets et fichier accessible via une URL : méthode

getOutputStream() des classesgetOutputStream() des classes SocketSocket etetURLConnectionURLConnection (qui renvoie une instance d'une classe(qui renvoie une instance d'une classe

dérivée de InputStream)dérivée de InputStream)

• Classes de filtre sur un flux de données :Classes de filtre sur un flux de données :

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 287: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 287/303

  287287

• Classes de filtre sur un flux de données :Classes de filtre sur un flux de données :(dérivent de la classe(dérivent de la classe FilterOutputStream)FilterOutputStream) – BufferedOutputStreamBufferedOutputStream pour écrire sur un flux depour écrire sur un flux de

données en utilisant une zone mémoire tampon (données en utilisant une zone mémoire tampon (buffer buffer ))

 – DataOutputStreamDataOutputStream pour écrire dans un flux depour écrire dans un flux dedonnées des données d'un des types de base Java oudonnées des données d'un des types de base Java oudes chaînes de caractèresdes chaînes de caractères

 – PrintStreamPrintStream pour écrire au format texte les types depour écrire au format texte les types de

base Javabase Java

• Classes de filtre sur un flux de données :Classes de filtre sur un flux de données :

(dérivent de la classe(dérivent de la classe FilterOutputStream)FilterOutputStream)

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 288: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 288/303

  288288

(dérivent de la classe(dérivent de la classe te OutputSt ea )te OutputSt ea ) – Remarques:Remarques:

• les constructeurs de ces classes prennent tous en paramètre unles constructeurs de ces classes prennent tous en paramètre unobjet de classeobjet de classe OutputStreamOutputStream..

• La classe OutputStream étant la super classe de toutes lesLa classe OutputStream étant la super classe de toutes lesclasses d'écriture sur les flux de données, on peut donc passerclasses d'écriture sur les flux de données, on peut donc passeren paramètre une instance de n'importe quelle classe qui enen paramètre une instance de n'importe quelle classe qui endérive.dérive.

• La classe java.io.OutputStream:La classe java.io.OutputStream: super classe abstract desuper classe abstract de

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 289: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 289/303

  289289

• j pj p super classe abstract desuper classe abstract detoutes les classes qui permettent d'écrire sur un flux detoutes les classes qui permettent d'écrire sur un flux dedonnées en lecture.données en lecture.

• Méthodes de la classe java.io.OutputStream:Méthodes de la classe java.io.OutputStream:

 – public abstract voidpublic abstract void writewrite (int b) throws(int b) throws IOExceptionIOExceptionE it t t l fl d d éE it t t l fl d d é

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 290: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 290/303

  290290

• Ecrit un octet sur le flux de données.Ecrit un octet sur le flux de données. – public voidpublic void writewrite (byte [ ] tab) throws(byte [ ] tab) throws IOExceptionIOException 

• Ecrit les octets du tableau tab sur le flux de données.Ecrit les octets du tableau tab sur le flux de données. 

 – public voidpublic void writewrite (byte [ ] tab, int offset, int length) throws(byte [ ] tab, int offset, int length) throwsIOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException

• Ecrit length octets du tableau tab sur le flux de données, à partirEcrit length octets du tableau tab sur le flux de données, à partirde offset.de offset.

 – public voidpublic void flushflush () throws() throws IOExceptionIOException 

• Ecrit physiquement sur le flux de données quand zone tamponEcrit physiquement sur le flux de données quand zone tamponutilisée.utilisée.

 – public voidpublic void closeclose () throws() throws IOExceptionIOException • Ferme l'accès au flux de données.Ferme l'accès au flux de données.

• La classe java.io.FileOutputStream:La classe java.io.FileOutputStream: dérive dedérive deOutputStreamOutputStream C

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 291: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 291/303

  291291

pp• ConstructeursConstructeurs

 – publicpublic FileOutputStreamFileOutputStream ((StringString path) throwspath) throws SecurityExceptionSecurityException,,FileNotFoundExceptionFileNotFoundException 

 – publicpublic FileOutputStreamFileOutputStream ((FileFile file) throwsfile) throws SecurityExceptionSecurityException,,FileNotFoundExceptionFileNotFoundException 

Ces constructeurs permettent de créer une instance de classeCes constructeurs permettent de créer une instance de classeFileOutputStream à partir du chemin d'accès à un fichier path ouFileOutputStream à partir du chemin d'accès à un fichier path oud'une instance de classed'une instance de classe FileFile. Si le fichier n'existe pas il est créé.. Si le fichier n'existe pas il est créé. – publicpublic FileOutputStreamFileOutputStream ((FileDescriptor FileDescriptor  fdObj) throwsfdObj) throws

SecurityExceptionSecurityException Construit une instance de classe FileInputStream à partir d'unConstruit une instance de classe FileInputStream à partir d'undescripteur de fichier fdObj.descripteur de fichier fdObj.

• MéthodesMéthodes

 – Méthodes de la classeMéthodes de la classe OutputStreamOutputStream outrepassées pour qu'ellesoutrepassées pour qu'elles

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 292: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 292/303

  292292

s'appliquent à l'écriture dans un fichier:s'appliquent à l'écriture dans un fichier:• public voidpublic void writewrite (int b) throws(int b) throws IOExceptionIOException

• public voidpublic void writewrite (byte [ ] tab) throws(byte [ ] tab) throws IOExceptionIOException 

• public voidpublic void writewrite (byte [ ] tab, int offset, int length) throws(byte [ ] tab, int offset, int length) throws IOExceptionIOException,,IndexOutOfBoundsExceptionIndexOutOfBoundsException 

 – public voidpublic void closeclose () throws() throws IOExceptionIOException  – public finalpublic final FileDescriptor FileDescriptor  getFDgetFD () throws() throws IOExceptionIOException : Permet: Permet

d'obtenir un descripteur de fichier.d'obtenir un descripteur de fichier.

 – protected voidprotected void finalizefinalize () throws() throws IOExceptionIOException

• La classe java.io.DataOutputStream:La classe java.io.DataOutputStream: dérivedérivedes classesdes classes FilterOutputStreamFilterOutputStream etet

é

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 293: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 293/303

  293293

des classesdes classes pp etetOutputStreamOutputStream implémente l'interfaceimplémente l'interfaceDataOutputDataOutput, ce qui permet d'écrire sur un flux de, ce qui permet d'écrire sur un flux dedonnées autres chose que des octets.données autres chose que des octets.

• Champ:Champ: – protected int writtenprotected int written ConstructeurConstructeur – public DataOutputStream (public DataOutputStream (OutputStreamOutputStream out)out) ConstruitConstruit

une instance de la classe DataOutputStream dontune instance de la classe DataOutputStream dont

l'écriture sera effectuée sur le flux de données outl'écriture sera effectuée sur le flux de données out

• Méthodes:Méthodes:– public synchronized void write (int b) throwspublic synchronized void write (int b) throws IOExceptionIOException

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 294: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 294/303

  294294

• Méthodes:Méthodes:  public synchronized void write (int b) throwspublic synchronized void write (int b) throws IOExceptionIOException 

 – public synchronized void write (byte [ ] tab, int offset, intpublic synchronized void write (byte [ ] tab, int offset, intlength) throwslength) throws IOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException 

 – public final void writeBoolean (boolean v) throwspublic final void writeBoolean (boolean v) throwsIOExceptionIOException

 – public final void writeByte (int v) throwspublic final void writeByte (int v) throws IOExceptionIOException 

 – ……

 – public final void writeDouble (double v) throwspublic final void writeDouble (double v) throws IOExceptionIOException 

 – public final void writeBytes (public final void writeBytes (StringString s) throwss) throws IOExceptionIOException 

 – public final void writeChars (public final void writeChars (StringString s) throwss) throws IOExceptionIOException 

 – public final void writeUTF (public final void writeUTF (StringString str) throwsstr) throws IOExceptionIOException 

•Méthodes:Méthodes:– Implémentation des méthodes de l'interfaceImplémentation des méthodes de l'interface

8.4.2. Accès en écriture8.4.2. Accès en écriture

Page 295: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 295/303

  295295

•   Implémentation des méthodes de l interfaceImplémentation des méthodes de l interfaceDataOutputDataOutput. La méthode write (byte [ ] tab) est. La méthode write (byte [ ] tab) estimplémentée par la classeimplémentée par la classe FilterOutputStreamFilterOutputStream..

 – public void flush () throwspublic void flush () throws IOExceptionIOException Méthodes de laMéthodes de laclasseclasse FilterOutputStreamFilterOutputStream outrepassées pour qu'ellesoutrepassées pour qu'elless'appliquent à ce filtre.s'appliquent à ce filtre.

 – public final int size ()public final int size () Renvoie le nombre d'octets écritsRenvoie le nombre d'octets écrits

sur le flux de données depuis la création du filtre.sur le flux de données depuis la création du filtre.

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• La classe java.io.RandomAccessFile:La classe java.io.RandomAccessFile: classeclasse

Page 296: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 296/303

  296296

• jj classeclasseimplémentant les interfacesimplémentant les interfaces DataInputDataInput etetDataOuputDataOuput

• Constructeurs:Constructeurs:• public RandomAccessFile (String path, String mode)

throws SecurityException, IOException,

IllegalArgumentException

• public RandomAccessFile (File file, String mode)

throws SecurityException, IOException,

IllegalArgumentException

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• Méthodes:Méthodes:bli fi lbli fi l Fil D iFil D i t FDtFD () h() th

Page 297: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 297/303

  297297

•  – public finalpublic final FileDescriptor FileDescriptor  getFDgetFD () throws() throwsIOExceptionIOException Permet d'obtenir un descripteur dePermet d'obtenir un descripteur defichier.fichier.

 – public longpublic long getFilePointer getFilePointer  () throws() throws IOExceptionIOException Renvoie la position courante dans le fichier.Renvoie la position courante dans le fichier. – public voidpublic void seekseek (long pos) throws(long pos) throws IOExceptionIOException 

Déplace la position courante en pos dans leDéplace la position courante en pos dans lefichier.fichier.

 – public longpublic long lengthlength () throws() throws IOExceptionIOException RenvoieRenvoiela taille courante du fichier.la taille courante du fichier.

 – public voidpublic void closeclose () throws() throws IOExceptionIOException FermeFermel'accès au fichier.l'accès au fichier.

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• Méthodes:Méthodes:

Page 298: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 298/303

  298298

• – public abstract intpublic abstract int readread () throws() throws IOExceptionIOException 

• Lit 1 octet dans le flux de données, renvoie -1 si la fin estLit 1 octet dans le flux de données, renvoie -1 si la fin estatteinte.atteinte.

 – public intpublic int readread (byte [ ] tab) throws(byte [ ] tab) throws IOExceptionIOException • Lit tab.length octets dans le tableau tab. Si la fin est atteinteLit tab.length octets dans le tableau tab. Si la fin est atteinte

pendant la lecture, tab est remplit avec les octets lus. Renvoiependant la lecture, tab est remplit avec les octets lus. Renvoiele nombre d'octets lus ou -1 si la fin est atteinte.le nombre d'octets lus ou -1 si la fin est atteinte.

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• Méthodes:Méthodes:

Page 299: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 299/303

  299299

 – public intpublic int readread (byte [ ] tab, int offset, int length) throws(byte [ ] tab, int offset, int length) throwsIOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException • Lit length octets dans le tableau tab, en le remplissant à partirLit length octets dans le tableau tab, en le remplissant à partir

de l'indice offset. Si la fin est atteinte pendant la lecture, tabde l'indice offset. Si la fin est atteinte pendant la lecture, tabest remplit avec les octets lus. Renvoie le nombre d'octets lusest remplit avec les octets lus. Renvoie le nombre d'octets lusou -1 si fin.ou -1 si fin.

 – public intpublic int skipBytesskipBytes (int n) throws(int n) throws IOExceptionIOException • Méthode de l'interfaceMéthode de l'interface DataInputDataInput implémentée pour qu'elleimplémentée pour qu'elle

déplace de n octets la position courante dans le fichier. n peutdéplace de n octets la position courante dans le fichier. n peutêtre positif ou négatif (pour revenir en arrière). Renvoie n.être positif ou négatif (pour revenir en arrière). Renvoie n.

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• Méthodes:Méthodes:I lé t ti d t éth d d l'i t fI lé t ti d t éth d d l'i t f

Page 300: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 300/303

  300300

Implémentation des autres méthodes de l'interfaceImplémentation des autres méthodes de l'interfaceDataInputDataInput::

 – public final voidpublic final void readFullyreadFully (byte [ ] tab) throws(byte [ ] tab) throws IOExceptionIOException 

 – public final voidpublic final void readFullyreadFully (byte [ ] tab, int offset, int length)(byte [ ] tab, int offset, int length)throwsthrows IOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException 

 – public final booleanpublic final boolean readBooleanreadBoolean () throws() throws IOExceptionIOException 

 – ……

 – public final doublepublic final double readDoublereadDouble () throws() throws IOExceptionIOException  – public finalpublic final StringString readLinereadLine () throws() throws IOExceptionIOException 

 – public finalpublic final StringString readUTFreadUTF () throws() throws IOExceptionIOException

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• Méthodes:Méthodes:Implémentation des méthodes de l'interfaceImplémentation des méthodes de l'interface DataOutputDataOutput

Page 301: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 301/303

  301301

 – Implémentation des méthodes de l interfaceImplémentation des méthodes de l interface DataOutputDataOutput.. – public voidpublic void writewrite (int b) throws(int b) throws IOExceptionIOException 

 – public voidpublic void writewrite (byte [ ] tab) throws(byte [ ] tab) throws IOExceptionIOException 

 – public voidpublic void writewrite (byte [ ] tab, int offset, int length)(byte [ ] tab, int offset, int length)throwsthrows IOExceptionIOException,, IndexOutOfBoundsExceptionIndexOutOfBoundsException 

 – public final voidpublic final void writeBooleanwriteBoolean (boolean v)(boolean v)throwsthrows IOExceptionIOException 

 – public final voidpublic final void writeBytewriteByte (int v) throws(int v) throws IOExceptionIOException 

 – …… – public final voidpublic final void writeByteswriteBytes ((StringString s) throwss) throws IOExceptionIOException

 – public final voidpublic final void writeCharswriteChars ((StringString s) throwss) throws IOExceptionIOException

 – public final voidpublic final void writeUTFwriteUTF ((StringString str) throwsstr) throws IOExceptionIOException

8.5. Gestion de l’accès8.5. Gestion de l’accèsaléatoire à un fichieraléatoire à un fichier

• Méthodes:Méthodes: Implémentation des autres méthodes deImplémentation des autres méthodes del'interfacel'interface DataInputDataInput::

Page 302: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 302/303

  302302

l interfacel interface DataInputDataInput:: – public final voidpublic final void readFullyreadFully (byte [ ] tab) throws(byte [ ] tab) throwsIOExceptionIOException 

 – public final voidpublic final void readFullyreadFully (byte [ ] tab, int offset, int(byte [ ] tab, int offset, intlength)length) throwsthrows IOExceptionIOException,,IndexOutOfBoundsExceptionIndexOutOfBoundsException 

 – public final booleanpublic final boolean readBooleanreadBoolean () throws() throws IOExceptionIOException 

 – ……

 – public final doublepublic final double readDoublereadDouble () throws() throws IOExceptionIOException 

 – public finalpublic final StringString readLinereadLine () throws() throws IOExceptionIOException 

 – public finalpublic final StringString readUTFreadUTF () throws() throws IOExceptionIOException

8.6. Flux de texte8.6. Flux de texte

Page 303: poly java 2009

8/8/2019 poly java 2009

http://slidepdf.com/reader/full/poly-java-2009 303/303