Conception objet en Java avec BlueJ une approche interactive. 10. Techniques d abstraction avancées Classes abstraites et interfaces

Documents pareils
2. Comprendre les définitions de classes

4. Groupement d objets

Héritage presque multiple en Java (1/2)

Utiliser Java sans BlueJ

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmer en JAVA. par Tama

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

INITIATION AU LANGAGE JAVA

TP1 : Initiation à Java et Eclipse

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Objets et Programmation. origine des langages orientés-objet

Auto-évaluation Programmation en Java

GOL502 Industries de services

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

F. Barthélemy. 17 mai 2005

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Généralités sur le Langage Java et éléments syntaxiques.

Programmation Par Objets

Chapitre VI- La validation de la composition.

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Développement Logiciel

Programmation en Java IUT GEII (MC-II1) 1

Java Licence Professionnelle CISII,

Rapport de Projet Béatrice Frey et Cyril Crassin Printemps Projet Fourmis. Université de Technologie de Belfort-Montbéliard

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Initiation à JAVA et à la programmation objet.

Problèmes liés à la concurrence

Premiers Pas en Programmation Objet : les Classes et les Objets

Langage Java. Classe de première SI

Un ordonnanceur stupide

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

as Architecture des Systèmes d Information

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TD/TP PAC - Programmation n 3

Projet Active Object

Package Java.util Classe générique

Programmation avec des objets : Cours 7. Menu du jour

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Projet de programmation (IK3) : TP n 1 Correction

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

Environnements de développement (intégrés)

Bases Java - Eclipse / Netbeans

Une introduction à la technologie EJB (2/3)

Chapitre 10. Les interfaces Comparable et Comparator 1

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Corrigé des exercices sur les références

Programmation Objet Java Correction

Java 1.5 : principales nouveautés

TD2 Programmation concurrentielle

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Programmation par composants (1/3) Programmation par composants (2/3)

Java Licence Professionnelle CISII,

Traduction des Langages : Le Compilateur Micro Java

TD/TP PAC - Programmation n 3

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Diagramme de classes

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Plan du cours. Historique du langage Nouveautés de Java 7

Tp 1 correction. Structures de données (IF2)

Classe Interne, Anonyme & Enumération

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

IRL : Simulation distribuée pour les systèmes embarqués

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Génie Logiciel avec Ada. 4 février 2013

4 Exemples de problèmes MapReduce incrémentaux

Patrons de Conception (Design Patterns)

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Remote Method Invocation Les classes implémentant Serializable

Création d objet imbriqué sous PowerShell.

RMI le langage Java XII-1 JMF

Développement d un interpréteur OCL pour une machine virtuelle UML.

UML. Diagrammes de classes (suite) Delphine Longuet.

Synchro et Threads Java TM

Threads. Threads. USTL routier 1

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Urbanisation de système d'information. PLM 3 (Product Lifecycle Management) Élaborations, versions, variantes, configurations

Web Tier : déploiement de servlets

Corrigés des premiers exercices sur les classes

Programmation par les Objets en Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Une introduction à Java

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Programme Compte bancaire (code)

Cours de Master Recherche

Programmation. fonctionnelle, impérative, logique et orientée objet

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

OCL - Object Constraint Language

Transcription:

Conception objet en Java avec BlueJ une approche interactive 10. Techniques d abstraction avancées Classes abstraites et interfaces David J. Barnes, Michael Kölling Traduction et adaptation française : Patrice Moreaux POLYTECH Annecy-Chambéry France Adapté pour le cours de «Programmation objet» enseigné par Amine Brikci-Nigassa Université de Tlemcen Rédigé avec

Principaux concepts abordés Classes abstraites Interfaces Héritage multiple Conception objet en Java avec BlueJ une approche interactive 2

Simulations (1) Des programmes souvent employés pour simuler des activités du monde réel : Trafic urbain Climat, météorologie Phénomènes nucléaires Variations boursières Modifications de l environnement Conception objet en Java avec BlueJ une approche interactive 3

Simulations (2) Elles sont souvent seulement partielles. Elles sont une vue simplifiée. Plus de détails peuvent engendrer une meilleure précision Mais exigent plus de ressources : Traitements Temps de simulation Conception objet en Java avec BlueJ une approche interactive 4

Intérêts des simulations Aide à la prévision : Météorologie. Permet d expérimenter : Plus sûrement, moins cher, plus vite. Exemple : «Comment la vie sauvage serait-elle affectée si une autoroute traversait ce parc national?» Conception objet en Java avec BlueJ une approche interactive 5

Simulations prédateur-proie L équilibre entre les espèces est souvent subtil. Beaucoup de proies signifie beaucoup de nourriture. Beaucoup de nourriture entraîne plus de prédateurs. Plus de prédateurs mangent plus de proies. Moins de proies signifie moins de nourriture. Moins de nourriture implique Conception objet en Java avec BlueJ une approche interactive 6

Le projet foxes-and-rabbits Conception objet en Java avec BlueJ une approche interactive 7

Principales classes Fox (renard) Modèle simple d un type de prédateur. Rabbit (lapin) Modèle simple d un type de proie. Simulator Gère la tâche globale de simulation. Maintient une collection de renards et de lapins. Conception objet en Java avec BlueJ une approche interactive 8

Autres classes Field (terrain) Représente un terrain à 2 dimensions. Location (position) Représente une position 2D. SimulatorView, FieldStats, Counter (compteur) Gèrent des statistiques et présentent une vue du terrain. Conception objet en Java avec BlueJ une approche interactive 9

Exemple de vue Conception objet en Java avec BlueJ une approche interactive 10

État d un lapin public class Rabbit { // champs statiques non reproduits. // caractéristiques particulières // (champs d instance). // L âge du lapin. private int age; // Lapin vivant ou mort. private boolean alive; // Position du lapin private Location location; } // Méthodes non reproduites. Conception objet en Java avec BlueJ une approche interactive 11

Comportement d un lapin Géré par la méthode run. L âge est incrémenté à chaque «pas» de simulation. Un lapin peut mourir à ce moment-là. Les lapin(e)s assez âgé(e)s peuvent mettre bas. De nouveaux lapins peuvent naître à ce moment-là. Conception objet en Java avec BlueJ une approche interactive 12

Simplifications du comportement des lapins Un seul genre. En fait toutes femelles Un même lapin peut mettre bas à chaque pas. Tous les lapins meurent au même âge. Autres? Conception objet en Java avec BlueJ une approche interactive 13

État d un renard public class Fox { // champs statiques non reproduits // âge du renard private int age; // renard vivant ou mort. private boolean alive; // Position du renard private Location location; // Niveau d alimentation du renard, // augmente en mangeant des lapins. private int foodlevel; } // Méthodes non reproduites. Conception objet en Java avec BlueJ une approche interactive 14

Comportement d un renard Géré par la méthode hunt (chasser). Les renards vieillissent et mettent bas aussi. Ils peuvent avoir faim. Ils chassent pour de la nourriture dans les positions adjacentes. Si un lapin y est trouvé, il est tué et le niveau d'alimentation du renard augmente. Conception objet en Java avec BlueJ une approche interactive 15

Configuration des renards Simplifications identiques à celles des lapins. Chasser et manger peuvent être modélisés de différentes manières. Le niveau de nourriture doit-il être additif? Un renard affamé chasse-t-il plus qu un autre? Ces simplifications sont-elles toujours acceptables? Conception objet en Java avec BlueJ une approche interactive 16

La classe Simulator Trois parties principales : Initialisation dans le constructeur La méthode populate Chaque animal reçoit un âge initial aléatoire. La méthode simulateonestep Itération sur les populations séparées de renards et de lapins. Conception objet en Java avec BlueJ une approche interactive 17

Le pas de mise à jour for(iterator<rabbit> it = rabbits.iterator(); it.hasnext(); ) { Rabbit rabbit = it.next(); rabbit.run(newrabbits); if(! rabbit.isalive()) { it.remove(); } } for(iterator<fox> it = foxes.iterator(); it.hasnext(); ) { Fox fox = it.next(); fox.hunt(newfoxes); if(! fox.isalive()) { it.remove(); } } classe Simulator, méthode simulateonestep() Conception objet en Java avec BlueJ une approche interactive 18

Ce qu il faudrait améliorer Fox et Rabbit ont de fortes ressemblances mais n ont pas de superclasse commune. Le pas de mise à jour contient des portions de code similaires. Simulator est fortement couplée à des classes spécifiques. Elle «en sait beaucoup» sur le comportement des renards et des lapins. Conception objet en Java avec BlueJ une approche interactive 19

La superclasse Animal Placer les champs communs dans Animal : age, alive, location Renommage de méthode pour gérer le masquage d information run et hunt deviennent act (agir, jouer son rôle). Simulator peut être maintenant découplée de manière importante. Conception objet en Java avec BlueJ une approche interactive 20

Itération modifiée (découplée) for(iterator<animal> it = animals.iterator() ; it.hasnext() ; ) { Animal animal = it.next(); animal.act(newanimals); // Supprimer les animaux morts de la simulation if(! animal.isalive()) { it.remove(); } } Conception objet en Java avec BlueJ une approche interactive 21

La méthode act de Animal Le contrôle de type statique (par le compilateur) impose une méthode act dans Animal. Il n y a pas d implémentation commune évidente. Définir alors act comme abstraite : abstract public void act(list<animal> newanimals); Conception objet en Java avec BlueJ une approche interactive 22

Classes et méthodes abstraites Les méthodes abstraites comportent le mot abstract dans leur signature. Elles n ont pas de corps. Elles rendent leur classe abstraite. Les classes abstraites ne peuvent pas être instanciées. Les sous-classes concrètes fournissent l implémentation. Conception objet en Java avec BlueJ une approche interactive 23

La classe Animal public abstract class Animal { // champs non reproduits /** * faire agir l animal c est-à-dire: * lui faire faire ce qu il veut/doit faire. */ abstract public void act(list<animal> newanimals); } // autres méthodes non reproduites Conception objet en Java avec BlueJ une approche interactive 24

Encore plus d abstraction Conception objet en Java avec BlueJ une approche interactive 25

Dessin sélectif Les acteurs ne peuvent pas tous être dessinés. Seuls certains sont «dessinables». // Que tous les acteurs jouent leur rôle. for(actor actor : actors) { actor.act(...); } // Dessiner tous les dessinables. for(drawable item : drawables) { item.draw(...); } Conception objet en Java avec BlueJ une approche interactive 26

Dessin sélectif (héritage multiple) Conception objet en Java avec BlueJ une approche interactive 26

Héritage multiple Situation : une classe hérite directement de plusieurs ancêtres. Comment résoudre les conflits de définitions? Conception objet en Java avec BlueJ une approche interactive 27

Héritage multiple combodrive.burn(); appelle quelle méthode? Conception objet en Java avec BlueJ une approche interactive

Héritage multiple Chaque langage possède sa solution au problème. Java interdit l héritage multiple de classes. Java autorise l héritage multiple dans les interfaces. Pas de conflit d implémentations. Conception objet en Java avec BlueJ une approche interactive

Une interface Actor public interface Actor { /** * Réalise le comportement quotidien de l'acteur. * @param newactors Une liste pour stocker les acteurs * nouvellement créés. */ void act(list<actor> newactors); } /** * L'acteur est-il toujours actif? * @return true si toujours actif, false autrement. */ boolean isactive(); Conception objet en Java avec BlueJ une approche interactive 28

Les classes implémentent une interface public class Fox extends Animal implements Drawable {... } public class Hunter implements Actor, Drawable {... } Conception objet en Java avec BlueJ une approche interactive 29

Interfaces comme types Les classes qui implémentent n héritent pas du code, mais elles deviennent sous-type du type interface. Donc le polymorphisme est disponible pour les interfaces comme pour les classes. Conception objet en Java avec BlueJ une approche interactive 30

Propriétés des interfaces Toutes les méthodes sont abstraites. Elles n'ont pas de constructeur. Toutes les méthodes sont publiques. Tous les attributs sont publics, statiques et finaux (final). Conception objet en Java avec BlueJ une approche interactive 31

Interfaces comme spécifications Forte séparation entre fonctionnalités et implémentation. Mais les types des paramètres et du retour sont fixés. Les clients interagissent indépendamment de l implémentation. Mais les clients peuvent choisir entre plusieurs implémentations. Conception objet en Java avec BlueJ une approche interactive 32

Implémentations alternatives implémente implémente Conception objet en Java avec BlueJ une approche interactive 33

La classe Class La méthode getclass() de Object renvoie un objet de type Class. Le suffixe.class permet d'obtenir une constante littérale objet de type Class : Fox.class Utilisée dans SimulatorView : Map<Class, Color> colors ; String getname() pour le nom de la classe. Conception objet en Java avec BlueJ une approche interactive

Classe abstraite ou interface? Si la classe doit contenir l'implémentation de certaines méthodes classe abstraite. Dans les autres cas, les deux choix sont possibles. Si vous avez le choix, préférez en général l'interface, car les interfaces permettent l'héritage multiple. Conception objet en Java avec BlueJ une approche interactive

Résumé (1) L héritage peut fournir une implémentation partagée : Classes abstraites et concrètes L héritage permet le partage de type : Classes et interfaces Conception objet en Java avec BlueJ une approche interactive 34

Résumé (2) Les méthodes abstraites permettent le contrôle statique de type sans exiger d implémentation. Les classes abstraites fonctionnent comme des superclasses incomplètes. Pas d instance Les classes abstraites favorisent le polymorphisme. Conception objet en Java avec BlueJ une approche interactive 35

Interfaces Les interfaces fournissent la spécification sans l implémentation. Les interfaces sont totalement abstraites. Les interfaces favorisent le polymorphisme. Les interfaces Java autorisent l héritage multiple. Conception objet en Java avec BlueJ une approche interactive 36

1. Introduction 2. Classes 3. Interactions d objets 4. Collections et itérateurs 5. Bibliothèques de classes 6. Tests, mise au point 7. Conception des classes 8. Héritage 1 9. Héritage 2 10. Classes abstraites et interfaces Sommaire général 11. Construction d'interfaces graphiques 12. Gestion des erreurs 13. Conception des applications 14. Une étude de cas Conception objet en Java avec BlueJ une approche interactive 37