poly java 2009
-
Upload
markettemarkette -
Category
Documents
-
view
231 -
download
3
Transcript of 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
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
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
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
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
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
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
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
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):
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 29/303
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;
}}}}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 31/303
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.
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
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 38/303
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 42/303
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>}}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 44/303
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
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)
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 50/303
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
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 56/303
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 58/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 59/303
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 61/303
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
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
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
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
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
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
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
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
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é
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 71/303
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);}
}
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
}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 74/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 75/303
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
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é
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 78/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 79/303
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é
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é
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é
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 83/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 84/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 85/303
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é
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 87/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 88/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 89/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 90/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 91/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 92/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 93/303
l h
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 95/303
3 P l hi
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 98/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 99/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 100/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 101/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 102/303
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 105/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 106/303
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;
}...
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);
}}
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);
}
}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 110/303
4 2 Interface4 2 Interface
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
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”
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 114/303
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
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
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;
}
}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 118/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 119/303
4 2 Interfaces4 2 Interfaces
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
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
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);}
}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 123/303
4 3 Cl i4 3 Cl i t
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
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
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
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
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
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;}}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 130/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 131/303
4 3 Cl i t4 3 Classes internes
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
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;
}}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 134/303
4 4 Les collections4 4 Les collections
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 137/303
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 138/303
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
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
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
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
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();…
}}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 144/303
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
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
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
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
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
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
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
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 156/303
5. Exceptions5. Exceptions
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
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
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é
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 160/303
5. Exceptions5. Exceptions
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é
}
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 162/303
5. Exceptions5. Exceptions
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
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
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
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
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
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
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
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
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
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
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)
…;
}
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
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
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 180/303
6.1.5. Principaux Layout Managers
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 182/303
6.1.5. Principaux Layout Managers
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 187/303
6.1.5. Principaux Layout Managers
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
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
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
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
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
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
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
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
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
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
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
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) {}
}…}
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
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
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
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
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());
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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()
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
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
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
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
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
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
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
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
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
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 247/303
247247
7.5. Synchronisation7.5. Synchronisation
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
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
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
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
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
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
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
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
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
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
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
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 )
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
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
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) {
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
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
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
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
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
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:
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:
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
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
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
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 é
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)
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:
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 ::
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:
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:
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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:
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:
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
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
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::
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
8/8/2019 poly java 2009
http://slidepdf.com/reader/full/poly-java-2009 303/303