Template Method Design Pattern. But Définir le squelette d’un algorithme tout en déléguant certaines étapes aux sous-classes. Les sous-classes peuvent.

Slides:



Advertisements
Présentations similaires
Transformation de documents XML
Advertisements

Gestion des événements (suite)
Questions II How do you Form Questions in French??
le langage les éléments
TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Programmation par Objets et Java
What does en mean? The object pronoun en usually means some or of them.
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
Programmation orientée objet
Structures de données et algorithmes – TP2
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Révision et principes SOLID
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
IFT1025, Programmation 2 Jian-Yun Nie
Classes abstraites et Interfaces
Factory Design Patterns Factory Method
Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux.
Introduction au paradigme orienté-objet (suite)
Design Patterns Factory Method – Pattern de construction [DANT] Génie Logiciel 1.
Design Pattern: Decorator
Détection et correction des défauts de conception
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
CSI 1502 Principes fondamentaux de conception de logiciels
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Chapitre 21 Collections Partie II Algorithmes  Algorithmes sur des List : sort binarySearch reverse shuffle fill copy  Algorithmes sur des Collections.
Objectifs À la fin de ce cours, vous serez capables de :
La notion de type revisitée en POO
Page de garde Design by Contract en C++ Maîtrise d’informatique Février 2002.
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
Evénements. Plan Evénements Principes Exemples Adapteur.
Design Patterns en programmation par objets. Plan  Design patterns –De quoi s’agit-il? –Pourquoi faut-il les utiliser?  Design patterns essentiels 
La Modélisation Orientée Objet Concevoir un programme : modélisation du problème à résoudre Notion de programme : machine de Turing Pouvoir d’expression.
Proposition pour un modèle à grains extrêmement fins David Fauthoux directeur : Jean-Paul Bahsoun IRIT.
11/04/ L'héritage Cours 7 Cours 7.
Designs Patterns comment rendre son code faiblement couplé, et maintenable...
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.
Créer des packages.
Factory Design Patterns Abstract Factory. Abstract Factory Design Pattern Plan Factory patterns: principesFactory patterns: principes The Factory Method.
Les approches qualitatives et quantitatives pour la recherche comparative Anthony Sealey Université de Toronto This material is distributed under an Attribution-NonCommercial-ShareAlike.
IFT 785 Approches Orientée Objets Plan de cours. Information générale Professeur : – Sylvain Giroux –
Schéma de conception Factory Method Exemple Sylvain Giroux.
Objectif: Comment employer un exposant?. Objective: How to use an exponent?
Cours du 5 novembre.
Behavioral Design Patterns The Observer Pattern. Intention Définir une dépendance de “1” à “n” entre des objets de telle sorte que lorsque l’état d’un.
Iterator Design Pattern Alessandro Soro Sylvain Giroux.
Nous allons .. préparer un texte (pour écrire ou décrire)
WALT: how to talk about your timetable
Héritage Conception par Objet et programmation Java
Réalisé avec le soutien de Pied de page fixe Pied de page 1 Titre Sous titre.
Factory Design Patterns Raffaella Sanna Sylvain Giroux.
Répétez! Bonjour!. Je m’appelle ________. Et toi ? Tu t’appelles comment? Répétez!
WALT: how to tell the time in French WILF: to be able to understand ¼ past, ½ past, ¼ to and o’clock (level 2) to be able to understand all times in French.
EDHEC OPEN INNOVATION 2016 #OpenInno 2016 [Bus. Case title – Company] Company LOGO.
What’s the weather like?. Look at the verb phrase fait-il above Turn it around and you have il fait The phrase Il fait can be used to describe lots of.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
Template Method Design Pattern. But Définir le squelette d’un algorithme tout en déléguant certaines étapes aux sous-classes. Les sous-classes peuvent.
TITLE Business PowerPoint Templates PowerPoint note pad template.
Technology Module.  Technology is the application of knowledge and skills to make goods or to provide services.  It includes the tools and machines.
DESSINER ET GRIFFONNER LES LIGNES ET LES FORMES. Useful Verbs Utiliser – to use Créer – to create Représenter – to represent Donner – to give Démontrer.
Qu’est-ce que tu as dans ta trousse?
Qu’est-ce que tu as dans ta trousse?
What’s the weather like?
Design Patterns en programmation par objets
Lequel The Last Part.
Transcription de la présentation:

Template Method Design Pattern

But Définir le squelette d’un algorithme tout en déléguant certaines étapes aux sous-classes. Les sous-classes peuvent redéfinir certaines étapes de l’algorithme sans en changer la structure.

Exemple public class Application {…public OpenDocument (String name) { if (!CanOpenDocument(name)) { // cannot handle this document return; } Document doc =DoCreateDocument(); if (doc != null) { _docs.AddDocument(doc); AboutToOpenDocument(doc); doc.Open(); doc.DoRead(); } } }

Exemple La méthode template définit l’algorithme en termes d’opérations abstraites. Les sous-classes les redéfinissent pour spécifier le comportement concret de différentes étapes de l’algorithme Est-ce que le document peut être ouvert? (CanOpenDocument) Création du document (DoCreateDocument) Lecture du document (DoRead). Informer les sous-classes que le document va être ouvert au cas où elles s’en préoccuperaient (AboutToOpenDocument). La méthode “template” fixe l’ordre des opérations, mais laisse la possibilité aux sous-classes de définir les détails de ces opérations.

Quand appliquer le patron Template Method? Pour implémenter les parties invariantes d’un algorithme une seule fois et laisser aux sous-classes le soin d’implémenter les parties qui varient. Lorsqu’un comportement commun entre des sous-classes devrait être factorisé et placé dans une classe commune afin d’éviter la duplication de code "refactoring to generalize" Identifer les différences dans le code existant Extraire ces différences dans de nouvelles méthodes Utiliser le template method pour appeler ces méthodes Pour contrôler les extensions des sous-classes Définir une méthode template qui appelle des méthodes "hook" en des points spécifiques de manière à ne permettre les extensions seulement qu’en ces points

Structure

Participants AbstractClass ( Application ) Définit les méthodes abstraites de base que les sous-classes doivent implémenter pour les diverses étapes de l’algorithme. Implémente la méthode “template” qui définit le squelette de l’algorithme. Cette méthode invoque aussi bien les méthodes abstraites que les méthodes définies dans AbstractClass ou celles de d’autres objets. ConcreteClass ( MyApplication ) Implémente les opérations abstraites pour réaliser les étapes spécifiques aux sous-classes

Collaborations entre les classes ConcreteClass repose sur AbstractClass pour l’implémentation des étapes invariantes de l’algorithme

Exemple

Exemple : refactorisation Classe abstraite public abstract class TextDocument { … public final void printPage(Page page) { printTextHeader(); printTextBody(page); printTextFooter(); } protected abstract void printTextHeader(); protected abstract void printTextBody(Page page); protected abstract void printTextFooter(); … }

Exemple : Refactorisation Sous-classes

Conséquences I Une technique fondamentale pour la réutilisation du code Particulièrement importante dans les librairies de classes Le moyen pour factoriser les comportements communs Une structure de contrôle inversée "the Hollywood principle," that is, "Don't call us, we'll call you" La classe parent appelle les méthodes des sous-classes et non l’inverse. Un template method invoque en général les types de méthodes suivants: Méthodes concrètes de ConcreteClass ou de classes clients; Méthodes concrètes de AbstractClass Méthodes abstraites factory methods Méthodes “hook”, Comportement par défaut que les sous-classes peuvent redéfinir Souvent ces méthodes sont vides. Afin de bien réutiliser une classe abstraite, il faut bien identifier Les méthodes “hook” qui peuvent être redéfinies Les méthodes abstraites qui doivent être redéfinies.

Conséquences II Une sous-classe peut spécialiser une méthode d’une classe parent en redéfinissant cette méthode et en invoquant la méthode de la superclasse explicitement Public class DerivedClass extends ParentClass { public void operation () {super.operation(); } } Cependant, il facile d’oublier l’invocation de la méthode de la superclasse Transformation en méthode “template” pour donner le contrôle à la classe parent La classe parent définit une méthode hook que les sous-classe peuvent redéfinir Public class ParentClass { “final” public void operation () {HookOperation(); } pubic void hookOperation () { } }} Les sous-classes redéfinissent HookOperation : Public class DerivedClass extends ParentClass { public void hookOperation () { // DerivedClass extended behavior }

Implémentation Méthodes abstract, protected, final Minimiser les méthodes abstraites. Plus il y aura de méthodes à définir, plus ce sera fastidieux Définir des conventions au niveau des noms. Par exemple, pour définir les méthodes qui devraient être redéfinies, utiliser un préfixe. Dans le MacApp framework pour les applications Macintosh Le nom des méthodes relatives à un template method commencent avec "Do-“ "DoCreateDocument", "DoRead", etc.

Design Patterns reliés Factory Methods souvent appelés par les template methods la méthode DoCreateDocument de la méthode OpenDocument de l’exemple. Strategy Les méthodes Template utilisent l’héritage pour faire varier des parties d’un algorithme Les stratégies utilisent la délégation pour faire varier tout l’algorithme.

Références William F. Opdyke and Ralph E. Johnson. Creating abstract superclasses by refactoring. In Proceedings of the 21st Annual Computer Science Conference (ACM CSC '93), pages 66–73, Indianapolis, IN, February 1993 Creating abstract superclasses by refactoring Rebecca Wirfs-Brock and Ralph E. Johnson. A survey of current research in object-oriented design. Communications of the ACM, 33(9):104–124, 1990A survey of current research in object-oriented design

Strategy DP Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

Strategy - exemple Composition class responsible for maintaining and updating the linebreaks of text displayed in a text viewer. Compositor subclasses implement different strategies: SimpleCompositor implements a simple strategy that determines linebreaks one at a time. TeXCompositor implements the TeX algorithm for finding linebreaks. This strategy tries to optimize linebreaks globally, that is, one paragraph at a time. ArrayCompositor implements a strategy that selects breaks so that each row has a fixed number of items. It's useful for breaking a collection of icons into rows, for example. A Composition maintains a reference to a Compositor object. Whenever a Composition reformats its text, it forwards this responsibility to its Compositor object.