Chapitre 5: Améliorer les Classes Présentation pour Java Software Solutions Foundations of Program Design Deuxième Edition par John Lewis et William Loftus.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Gestion des événements (suite)
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages.
Approfondissement du langage
(Classes prédéfinies – API Java)
C.
MIKHAYLOVA Vera Exposé Java principe de fonctionnement Lundi 17 mai 2004 DEUG 1ère année Science du langage Paris III.
JAV - TD 6 Structures de données JAVA
Introduction à la POO: Les classes vs les objets
Principes de programmation (suite)
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Langage Oriente Objet Cours 4.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
POO : Objets et classes (Rappels)
Langage Oriente Objet Cours 2.
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
Structures de données IFT-2000
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la programmation objet Langage Java
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Objectifs À la fin de ce cours, vous serez capables de :
La notion de type revisitée en POO
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Cours 7 Classes locales Clonage Divers: tableaux.
Créer des packages.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
12/04/ Le polymorphisme Cours 8 Cours 8.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Introduction au langage C Fonctions et Procédures
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours LCS N°4 Présenté par Mr: LALLALI
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Héritage Conception par Objet et programmation Java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Flash MX – Séance 2 Interactions & ActionScript David Rapin Si28 P06.
Chapitre 4: Classes Présentation pour Java Software Solutions Foundations of Program Design Deuxième Edition par John Lewis et William Loftus Java Software.
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
Chapitre 6: Tableaux et Vecteurs Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis et William Loftus.
Transcription de la présentation:

Chapitre 5: Améliorer les Classes Présentation pour Java Software Solutions Foundations of Program Design Deuxième Edition par John Lewis et William Loftus Java Software Solutions est publié par Addison-Wesley Presentation slides are copyright 2000 by John Lewis and William Loftus. All rights reserved. Instructors using the textbook may use and modify these slides for pedagogical purposes.

2 Améliorer les Classes b Nous pouvons maintenant explorer des aspects variés des classes et objets plus en détails b Le Chapitre 5 se concentre sur: référence à un objet et aliasréférence à un objet et alias passage d’objets en paramètrespassage d’objets en paramètres le modificateur staticle modificateur static Classes imbriquéesClasses imbriquées interfaces et polymorphismeinterfaces et polymorphisme événements et auditeurs (listeners)événements et auditeurs (listeners) animationanimation

3 Références b Rappel du Chapitre 2, une référence à un objet contient l’adresse mémoire d’un objet b Plutôt qu’utiliser une adresse arbitraire, nous illustrons une référence graphiquement comme un “pointeur” sur un objet ChessPiece bishop1 = new ChessPiece(); bishop1

4 Affectation Revisitée b Une affectation prend une copie de la valeur et la stocke dans une variable b Pour les types de bases : num2 = num1; Avant num1 5 num2 12 Après num1 5 num2 5

5 Affectation de Référence b Pour une référence à un objet, l’affectation copie l’emplacement en mémoire : bishop2 = bishop1; Avant bishop1bishop2 Après bishop1bishop2

6 Alias b Deux références ou plus qui réfère au même objet sont des alias l’une de l’autre b Un objet (et ses données) peut être accédé en utilisant des variables différentes b Les alias sont utiles, mais doivent être gérés avec précautions b Un changement à l’état d’un objet (ses variables) à travers une référence le change pour tous ses alias

7 Ramasse-miettes b Lorsqu’un objet n’a plus de référence valide vers lui, il ne peut plus être accédé par le programme b Il devient alors inutile, et est donc considéré comme une miette b Java effectue périodiquement le ramassage automatique des miettes, retournant la mémoire d’un objet au système pour usage futur b Avec d’autres langages, le ramassage des miettes est la responsabilité du programmeur

Passage d’Objets aux Méthodes b Les paramètres des méthodes de Java sont passés par valeurs b Ça implique qu’une copie du paramètre actuel (la valeur passée) est stocker dans le paramètre formel (dans l’entête de la méthode) b Le passage de paramètres est essentiellement une affectation b Lorsque un objet est passé à une méthode, le paramètre actuel et le paramètre formel deviennent des alias

Passage d’Objets aux Méthodes b Les changements à un paramètre dans une méthode peuvent avoir des effets permanents ou non (à l’extérieur de la méthode) b Voir ParameterPassing.java (page 226) ParameterPassing.java b Voir ParameterTester.java (page 228) ParameterTester.java b Voir Num.java (page 230) Num.java b Noter la différence entre changer une référence et changer l’objet sur lequel pointe cette référence

10 Le modificateur static b Au Chapitre 2 nous avons discuté de méthodes statiques (aussi appelées méthodes de classe) qui peuvent être appelées avec le nom de la classe, plutôt qu’avec le nom d’un objet de la classe  Par exemple, les méthodes de la classe Math sont statiques  Pour rendre une méthode statique, nous appliquons le modificateur static à la définition de la méthode  Le modificateur static peut aussi être appliqué à des b Cela associe la variable ou la méthode avec la classe plutôt qu’avec un objet

11 Méthodes Statiques public static int triple (int num) { int result; result = num * 3; return result; } class Helper Parce qu’elle est statique, la méthode peut être appelée ainsi : value = Helper.triple (5);

12 Méthodes Statiques b L’ordre des modificateurs peut être interchangée, mais par convention les modificateurs de visibilité sont placés en premiers  Rappel : la méthode main est statique; elle est appelée par le système sans créer un objet b Les méthodes statiques ne peuvent référencer des variables d’instance, car les variables d’instance n’existe que lorsqu’un objet existe b Par contre, elles peuvent référencer des variables statiques ou des variables locales

13 Variables Statiques b Les variables statiques sont quelques fois appelées variables de classes b Normalement, chaque objet a sa propre espace de données  Si une variable est déclarée static, il n’existe qu’une seule copie de cette variable private static float price;  L’espace memoire d’une variable static est créée aussitôt que la classe dans laquelle elle est declarée est chargée

Variables Statiques  Tous les objets de la classe partage l’accès à la variable static  Lorsqu’un objet change la valeur d’une variable static, elle change pour tous les autres  Les méthodes et variables static vont souvent ensemble b Voir CountInstances.java (page 233) CountInstances.java b Voir MyClass.java (page 234) MyClass.java

Classes Imbriquées b En plus contenir des données et des méthodes, une classe peut aussi contenir d’autres classes b Une classe déclarée à l’intérieur d’une autre classe est appelée une classe imbriquées Outer Class Nested Class

Classes Imbriquées b Une classe imbriquée a accès aux variables et méthodes de la classe classe externe, même s’ils sont déclarés privées b Dans certaines situations, ça rend l’implémentation de ces classes plus faciles car elle peuvent facilement partager des informations b De plus, la classe imbriquée peut être protégée d’un usage externe par la classe externe b C’est une relation spéciale et devrait être utilisée avec précaution

Classes Imbriquées b Une classe imbriquée produit un fichier de bytecode séparé b Si une classe imbriquée nommée Inside est déclarée dans une classe externe appelée Outside, deux fichiers bytecode seront produits: Outside.class Outside$Inside.class  Une classe imbriquée peut être déclarée static, dans ce cas elle ne peut faire référence aux variables ou méthodes d’une instance b Une classe imbriquée non statique est nommée class interne

Interfaces b Une interface Java est une collection de méthodes abstraites et de constantes b Une méthode abstraite est une entête de méthode sans corps de méthode  Une méthode abstraite peut être déclarée en utilisant le modificateur abstract, mais comme toutes les méthodes d’une interface sont abstraites, il n’est pas nécessaire b Une interface est utilisée pour définir formellement un ensemble de méthodes qu’une classe peut implémenter

Interfaces public interface Doable { public void doThis(); public int doThat(); public void doThis2 (float value, char ch); public boolean doTheOther (int num); } interface est un mot réservé aucune méthode d’une interface n’a de definition (corps) Chaque entête de methode est suivit d’un point-virgule

Interfaces b Un interface ne peut être instantiée b Les méthodes d’une interface ont une visibilité publique par défaut b Une classe implémente formellement une interface en l’affirmant dans l’entête de la classel’affirmant dans l’entête de la classe fournissant des implémentations pour chaque méthode abstraite de l’ interfacefournissant des implémentations pour chaque méthode abstraite de l’ interface b Si une classe affirme qu’elle implémente une interface, elle doit définir tous les méthodes de l’interface sinon le compilateur produira des erreurs.

Interfaces public class CanDo implements Doable { public void doThis () { // whatever } public void doThat () { // whatever } // etc. } implements est un mot réservé Chaque méthode listée dans Doable est définie

Interfaces b Une class implémentant une interface peut aussi implémenter d’autres méthodes b Voir Speaker.java (page 236) Speaker.java b Voir Philosopher.java (page 237) Philosopher.java b Voir Dog.java (page 238) Dog.java b Une classe peut implémenter de multiples interfaces  Les interfaces sont énumérées après le mot-clé implements, séparées par des virgules b La classe doit implémenter toutes les méthodes d’une interfaces énumérée dans l’entête

Polymorphisme via Interfaces b Un nom d’interface peut servir de type pour une variable de référence à un objet Doable obj;  La référence obj peut être utilisée pour pointer n’importe quel objet de n’importe quelle classe qui implémente l’interface Doable  La version de doThis qui est invoquée à la ligne suivante dépend du type d’objet auquel obj fait référence: obj.doThis();

Polymorphisme via Interfaces b Cette référence est polymorphique, ce qui peut être défini comme "prenant plusieurs formes"  Cette ligne de code pourrait exécuter des méthodes différentes à des temps différent si obj pointe vers un autre objet b Voir Talking.java (page 240) Talking.java b À noter, les références polymorphiques doivent être resolues a l’exécution; on appelle ça dynamic binding b L’utilisation prudente références polymorphiques peut conduire à la conception élégante et robuste de logiciels

Interfaces b La librairie standard de classes de Java contient plusieurs interfaces qui sont utiles en certaines situations  L’interface Comparable contient une méthode abstraite nommée compareTo, qui est utilisée pour comparer deux objets  La classe String implémente Comparable qui nous donne la possibilité de placer des String en ordre alphabétique  L’interface Iterator contient des méthodes permettant à l’usager de ce déplacer dans une collection d’objets facilement

Événements b Un event est un objet qui représente des activités auxquels nous pourrions vouloir réagir b Par exemple, nous pourrions vouloir que notre programme accomplisse certaines actions lors des occurrences suivantes: La souris bougeLa souris bouge Un bouton de souris est activéUn bouton de souris est activé La souris est traînée (drag)La souris est traînée (drag) Un bouton est cliquéUn bouton est cliqué Une clé du clavier est enfoncéeUne clé du clavier est enfoncée un timer expireun timer expire b Souvent, les événements correspondent a des actions de l’usager, mais pas toujours

Événements b La librairie standard de classes de Java contient plusieurs classes représentant des événements typique b Certains objets, tel un applet ou un bouton graphique, gênèrent (fire) un événement lors de leurs occurences b D’autres objets, nommés listeners, réagissent aux événements b Nous pouvons écrire des objets auditeurs (listener) pour faire tout ce que nous voulons lors de l’occurrence d’un événement

Événements et auditeurs Generator Cet objet peut générer un evenement Listener Cet objet attend et réagit a un événement Event Lors de l’occurrence d’un événement, le générateur appelle la méthode appropriée pour l’auditeur, passant un objet qui décrit l’événement

Interfaces Auditeurs (Listener) b Nous pouvons créer un objet listener en écrivant une classe qui implémente une interface listener b La librairie standard de classes de Java contient plusieurs interfaces correspondant à des catégories d’événements  Par exemple, l’interface MouseListener contient des méthodes correspondant aux événements de la souris b Après la création d’un auditeur, nous ajoutons l’auditeur à la composante qui pourrait générer l’événement afin de créer la relation formelle entre le générateur et l’auditeur

Événements de Souris b Les suivants sont des événements de souris: mouse pressed - le bouton est appuyermouse pressed - le bouton est appuyer mouse released - le bouton est relâchémouse released - le bouton est relâché mouse clicked - le bouton est appuyé et relâchémouse clicked - le bouton est appuyé et relâché mouse entered – le pointeur de la souris passe au dessus d’une composante particulièremouse entered – le pointeur de la souris passe au dessus d’une composante particulière mouse exited - le pointeur quitte une composante particulièremouse exited - le pointeur quitte une composante particulière b Tout programme peut écouter pour certains, aucun, ou tous ces événements b Voir Dots.java (page 246) Dots.java b Voir DotsMouseListener.java (page 248) DotsMouseListener.java

Événements Déplacements de Souris b Les suivants sont des événements de déplacements de la souris : mouse moved – la souris se déplacemouse moved – la souris se déplace mouse dragged – la souris bouge pendant que le bouton est gardé enfoncémouse dragged – la souris bouge pendant que le bouton est gardé enfoncé  Il existe une interface MouseMotionListener b Une classe peut servir de générateur et d’auditeur b Une classe peut servir d’auditeur pour de plusieurs types d’événements b Voir RubberLines.java (page 249) RubberLines.java

Evenements de Touches b Les suivants sont des événements de touches: key pressed – une touche du clavier est enfoncéekey pressed – une touche du clavier est enfoncée key released - une touche du clavier est relâchéekey released - une touche du clavier est relâchée key typed - une touche du clavier est enfoncée et relâchéekey typed - une touche du clavier est enfoncée et relâchée  L’interface KeyListener s’occupe des événements de touches b Les classes listener sont souvent implémentées comme classes internes, imbriquées dans les composantes qu’elles écoutent b Voir Direction.java (page 253) Direction.java

Animations b Une animation est une séries de photos ou d’images qui changent constamment afin de créer l’illusion de mouvement b Nous pouvons créer des animations avec Java en changeant une image quelques peu avec le temps  La vitesse d’une animation Java est habituellement contrôlée par un objet Timer  La classe Timer est définie dans le package javax.swing

Animations  Un objet Timer génère un ActionEvent à chaque n millisecondes (où n est fixé par le créateur d’objet)  L’interface ActionListener contient une méthode actionPerformed  Lorsque le timer expire (generant un ActionEvent ) l’animation peut être mise à jour b Voir Rebound.java (page 258) Rebound.java