Cours Java : deuxième saison



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

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

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

Design patterns. Design patterns - définition. Design patterns - avantages

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

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

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

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

Initiation à JAVA et à la programmation objet.

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Chapitre VI- La validation de la composition.

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

TP1 : Initiation à Java et Eclipse

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Diagramme de classes

Projet Active Object

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)

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

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 )

Cours en ligne Développement Java pour le web

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

Auto-évaluation Programmation en Java

TD/TP PAC - Programmation n 3

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Patrons de Conception (Design Patterns)

RMI le langage Java XII-1 JMF

Java 7 Les fondamentaux du langage Java

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmer en JAVA. par Tama

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

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

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

Remote Method Invocation (RMI)

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

Chapitre 2. Classes et objets

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

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

Bases Java - Eclipse / Netbeans

GOL502 Industries de services

Programmation par les Objets en Java

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Cours de Génie Logiciel

Annexe : La Programmation Informatique

Les frameworks au coeur des applications web

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

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

Analyse,, Conception Objet

INITIATION AU LANGAGE JAVA

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

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

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

La carte à puce. Jean-Philippe Babau

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

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

as Architecture des Systèmes d Information

Programmation Objet Java Correction

Serveur d'archivage 2007 Installation et utilisation de la BD exist

CQP Développeur Nouvelles Technologies (DNT)

Développement Logiciel

Université de Bangui. Modélisons en UML

Traduction des Langages : Le Compilateur Micro Java

TP SIN Programmation sur androïde Support : eclipse

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

IFT2255 : Génie logiciel

Alfresco Guide Utilisateur

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Génie logiciel pour le commerce électronique Hiver 2003 Prof.: Julie Vachon

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

SECTION 5 BANQUE DE PROJETS

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

UML et les Bases de Données

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

Le génie logiciel. maintenance de logiciels.

TD/TP PAC - Programmation n 3

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Premiers Pas en Programmation Objet : les Classes et les Objets

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Langage Java. Classe de première SI

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

MODELISATION UN ATELIER DE MODELISATION «RATIONAL ROSE»

Alfstore workflow framework Spécification technique

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Analyse,, Conception des Systèmes Informatiques

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

Programmation Orientée Objet en C#

Conception d'un système d'information WEB avec UML Par Ass SERGE KIKOBYA

Formation, Audit, Conseil, Développement, UX WinRT Silverlight WPF Android Windows Phone

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

TP1. Outils Java Eléments de correction

LOG4430 : Architecture logicielle et conception avancée

Classes et Objets en Ocaml.

Programmation Orientée Objet

Devenez un véritable développeur web en 3 mois!

Cours 1: Java et les objets

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Transcription:

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 1 Cours Java : deuxième saison Cours 7 : Exceptions, tests unitaires et assertions Cours 8 : Design Patterns 1 Cours 9 : Design Patterns 2 Cours 10 : Interfaces graphiques en Swing Cours 11 : Collections Contact: Frederic.Peschanski@lip6.fr

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 2 Les Design Patterns Première partie Introduction aux Design Patterns Exemple : le Pattern «Bridge» Héritage vs. délégation Patterns créateurs Les idiomes «SimpleFactory» Le pattern «FactoryMethod» Les variantes «AbstractFactory» et «Builder» Le pattern «Singleton» Patterns structuraux «Adapter» et «Façade»

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 3 De la Bidouille OO à la ProgrammationOO Principes objets Encapsulation Héritage, classes abstraites Polymorphisme Particularité de Java Interfaces Question Comment combiner ces différents outils pour écrire des programmes ou boîtes à outils flexibles, réutilisables, efficaces, etc, etc. Important : c'est une question difficile

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 4 Les Design Patterns Définition Elément de conception réutilisable permettant de résoudre un problème récurrent en programmation orientée objet. Historique Inspirées d'une méthode de conception d'immeuble en architecture [Alexander, 77] Introduites par le «GOF» dans le livre Design Patterns en 99 (dans le «GOF» 23 patterns «standards») Pourquoi les patterns? Des «recettes d'expert» ayant fait leurs preuves Un vocabulaire commun pour les architectes logiciels Incontournable dans le monde de la P.O.O

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 5 Les idiômes de programmation Un «bout de programme Java» que l'on tape systématiquement lorsque l'on veut résoudre un problème «récurrent» Exemple 1 : parcourir les éléments d'un tableau for(int i=0;i<tableau.length;i++) { tableau[i] =... patati patata... Exemple 2 : utiliser une fonctionnalité du JDK try { // fonctionnalité XYZ du jdk XYZ(...); catch(xyzexception e) { e.printstacktrace(system.err);

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 6 Conception vs. Programmation Les designs patterns sont des éléments de conception Pas au niveau du langage de programmation (donc pas spécifique à Java, les patterns «marchent» aussi en C++, en Python, en Eiffel, etc.) Au niveau du modèle objet uniquement ( essentiellement classes, interfaces, méthodes) Un pattern ne s'invente pas, il se découvre Dans des programmes de grande taille et utilisés dans l'industrie Dans différents langages de programmation objet

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 7 Exemple : le pattern Bridge (1/5) Intention : Découple les abstractions des implémentations pour pouvoir gérer les deux de façon la plus indépendante possible Motivations Approche classique : abstraction = classe mère abstraite, implémentation = sous classe concrète Problème : on veut faire évoluer les abstractions indépendemment des implémentations Exemple : Abstraction Widget, Implémentations Bouton, Menu, etc. On voudrait d'un côté: Et de l'autre côté: WinWidget : widget pour windows WinBouton, X11Bouton, etc. X11Widget : widget pour Unix X11Menu, MacMenu, etc. MacWidget : widget pour MacOS

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 8 Exemple : le pattern Bridge (2/5) Indications d'utilisation On veut éviter un lien définitif entre une abstraction et son implémentation On veut raffiner les abstractions d'un côté et les implémentations de l'autre Les abstractions ne sont pas des interfaces, on veut leur attacher du code Le code du client dépend des abstractions, on peut donc faire varier les implémentations On veut éviter une prolifération de classes et se préserver contre un diagramme d'héritage complexe etc.

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 9 Exemple : le pattern Bridge (3/5) Structure Constituants

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 10 Exemple : le pattern Bridge (4/5) Implémentation Héritage vs. Délégation // Abstraction public abstract class Propriete { private double loyer; protected Propriete(double loyer) { this.loyer = loyer; public double getloyer() { return loyer; public abstract double cout(); // Implémentation public class Gare extends Propriete { private int nb_gares; public Gare() { super(2500); nb_gares = 1; public void addgare() { nb_gares++; public double cout() { return getloyer()*nb_gares;

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 11 Exemple : le pattern Bridge (5/5) Implémentation Héritage vs. Délégation // Abstraction dans le pattern Bridge public abstract class Propriete { private double loyer; private ProprieteImpl impl; protected Propriete(ProprieteImpl impl, double loyer) { this.loyer = loyer; this.impl = impl; public double getloyer() { return loyer; public double cout() { impl.cout(loyer); // Implémentation générique public abstract class ProprieteImpl { public abstract double cout(double loyer); // Implémentation concrète public class Gare extends ProprieteImpl { // à par la méthode cout(), comme slide précédent public double cout(double loyer) { return loyer*nb_gares;

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 12 Description d'un pattern Nom et classification (ex. bridge/structurel) Intention : description générale et succinte Alias : autres noms connus pour le pattern (pont,poignée/corps) Motivation : au moins 2 exemples/scénarios qui montrent pourquoi on a besoin du pattern Indications d'utilisation : une liste des situations qui justifient de l'utilisation du pattern Structure : un diagramme de classe UML indépendant du langage de programmation Constituants : Explication des différentes classes qui interviennent dans la structure du pattern Implémentation : les principes, pièges, astuces, techniques pour implanter le pattern dans un langage objet donné (pour nous, Java). Utilisations remarquables : des programmes réels dans lesquels on trouve le pattern Limites : les limites concernant l'utilisation du pattern etc.

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 13 Classification des patterns Patterns Créateurs S'intéressent à la construction des objets (pour «aider» le new, clone, etc.) Patterns FactoryMethod, AbstractFactory, Builder, Singleton Patterns Structuraux travaillent essentiellement sur des aspects statiques, à «l'extérieur» des classes Bridge, Adapter et Composite (etc.) Patterns Comportementaux travaillent essentiellement sur des aspects dynamiques, à «l'intérieur» des classes et parfois au niveaux des instances Strategy, Decorator, Observer, Visitor (etc.)

Principe 1 Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 14 Principes communs aux patterns Favoriser la composition (lien dynamique, flexible) sur l'héritage (lien statique, peu flexible) La délégation est un exemple d'outil pour la composition Attention: favoriser ne veut pas dire remplacer systématiquement, l'héritage est largement utilisé aussi! Principe 2 Les clients programment en priorité pour des interfaces (ou abstractions, classes abstraites, etc) plutôt qu'en lien direct avec les implémentations (classes concrètes) ex. le pattern «bridge»

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 15 Patterns créateurs Les idiômes et patterns Factory Simple FactoryMethod : une méthode statique qui crée un objet FactoryMethod : un pattern qui généralise le précédent Simple Factory : une classe qui se charge de créer des objets AbstractFactory : un pattern qui introduit une interface pour générer des objets appartenant à la même «famille» (généralisation des trois précédents) Le pattern Builder (cf. TME) Une variante de l'abstractfactory pour «monter» un objet par parties et/ou en plusieurs étapes Le pattern Singleton (cf. TD+TME) Un objet (instance) dont on est sûr qu'il est globalement unique

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 16 Les patterns Factory Le problème du new Le new est l'outil de base pour créer des instances à partir de classe mais on l'appelle directement sur une classe concrète Cela «casse» donc la règle qui veut que notre code client ne doit pas dépendre (trop) des classes concrètes L'idiôme de programmation SimpleFactory Idée : introduire une classe complète qui permet de créer des instances d'autres classes Problème : on programme toujours pour des implémentations, pas pour des interfaces Le design pattern AbstractFactory Idée : Introduire une interface de création d'objets ou de familles d'objets On peut alors introduire des variantes dans les classes de création

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 17 Exemple : Les Zanimos (1/3) public class BebePhoque extends Phoque {... public BebePhoque(String nom) { super(nom,0); // il a 0 an // ici initialiser les attributs d'un bébé animal...... BebePhoque george = new BebePhoque("george"); // bizarre quand même, un bébé phoque qui se crée // lui-même!

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 18 Patterns créateurs Le problème du new Le new est l'outil de base pour créer des instances à partir de classe mais on l'appelle directement sur une classe concrète Cela «casse» donc la règle qui veut que notre code client ne doit pas dépendre (trop) des classes concrètes L'idiôme de programmation SimpleFactory Idée : introduire une classe complète qui permet de créer des instances d'autres classes Problème : on programme toujours pour des implémentations, pas pour des interfaces Le design pattern AbstractFactory Idée : Introduire une interface de création d'objets ou de familles d'objets On peut alors introduire des variantes dans les classes de création

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 19 Exemple : Les Zanimos (2/3) public class BebePhoque extends Phoque {... // Voilà la classe qui sert de SimpleFactory public class MamanPhoque {... public BebePhoque mettrebas(string nom) { return new BebePhoque(nom);... MamanPhoque maman =... ; // on a une maman phoque BebePhoque george = maman.mettrebas("george"); // c'est mieux, c'est la maman qui fait le bébé

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 20 Patterns créateurs Le problème du new Le new est l'outil de base pour créer des instances à partir de classe mais on l'appelle directement sur une classe concrète Cela «casse» donc la règle qui veut que notre code client ne doit pas dépendre (trop) des classes concrètes L'idiôme de programmation SimpleFactory Idée : introduire une classe complète qui permet de créer des instances d'autres classes Problème : on programme toujours pour des implémentations, pas pour des interfaces Le design pattern AbstractFactory Idée : Introduire une interface de création d'objets ou de familles d'objets On peut alors introduire des variantes dans les classes de création

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 21 Exemple : Les Zanimos (3/3) // Voilà l'interface qui sert d'abstractfactory public interface Clinique { public BebePhoque mettrebasphoque(string nom); public BebeGirafe mettrebasgirafe(int cm, String nom); public Animal mettrebas(string typeanimal, String nom); public Animal[] creerstock(string type, String[] noms); // Et une implémentation public class CliniqueDuPoleNord implements Clinique {... public BebePhoque mettrebas(string nom) { return new BebePhoque(nom);... PoleNordClinique veto =... ; // on a une maman phoque BebePhoque george = veto.mettrebas("george"); // là c'est plus flexible, puisqu'on peut imaginer // cliniques pour d'autres types d'animaux, etc.

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 22 Le Design Pattern FactoryMethod (1/4) Intention : Définit une interface de méthode pour la création d'objets. La construction de l'objet est prise en charge par des implémentations de l'interface de création Motivations cf. petit exemple au tableau + TD Indications d'utilisation Une classe ne peut prévoir à l'avance la classe des objets qu'elle aura à créer (par exemple, on introduit de nouveaux types de documents) On utilisera la Factory Method également lorsque la classe tierce de création peut faire autre chose que juste s'occuper de la création (ex. la classe Application gère d'autres aspects que la création de documents).

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 23 Le Design Pattern FactoryMethod (2/4) Structure

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 24 Implémentation cf. TD Le Design Pattern FactoryMethod (3/4) Variante SimpleFactoryMethod et utilité pour enlever les casts inutiles Par exemple dans le cas du clone: public class Cellule {... public Object clone(cellule souche) { // ici code du clonage // code d'un client avec cast Cellule monclone = (Cellule) souche1.clone();

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 25 Implémentation cf. TD Le Design Pattern FactoryMethod (4/4) Variante SimpleFactoryMethod et utilité pour enlever les casts inutiles Par exemple dans le cas du clone: public class Cellule {... public Object clone(cellule souche) { // ici code du clonage // c'est une SimpleFactoryMethod public static Cellule clonercellule(cellule souche) { return (Cellule) souche.clone(); // code d'un client sans cast Cellule monclone = Cellule.clonerCellule(souche1);

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 26 Pattern structurel : Adapter (1/2) Intention : Convertir l'interface d'une classe en une autre conforme à l'attente du client. L'adaptateur permet à de classes de collaborer, qui n'aurait pu le faire du fait des interfaces incompatibles. Motivations Problème très général : on a un objet d'une classe Client qui veut utiliser un objet de classe B mais le client ne sait manipuler des objets de classe A. Il faut donc adapter la classe B à l'interface de A pour que le Client puisse finalement utiliser B. Exemple concret : On a une classe Appareil110v qui veut utiliser une classe Courant220v mais l'interface de l'appareil110v demande d'utiliser une classe Courant220v. L'idée est de créer une classe Adaptateur110v220v qui résolve le problème.

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 27 Pattern structurel : Adapter (2/2) Structure

Programmation Objet en Java Cours 9 Design Patterns 1 (C) 2005, Frédéric Peschanski 28 Conclusion A partir de maintenant, vous savez: ce qu'est un idiome de programmation ce qu'est la délégation les principes des design patterns les détails des patterns Bridge, AbstractFactory (et variante simplifiée SimpleFactory), FactoryMethod (et variante simplifiée SimpleFactoryMethod) et Adapter => A partir de maintenant, vous pouvez apprendre à implémenter des patterns et comprendre à quel moment on en a besoin