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
Gestion des événements (suite)
Advertisements

Dernière scéance: Des question?????? + Deux exercices.
le langage les éléments
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
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
Programmation orientée objet
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Révision et principes SOLID
IFT1025, Programmation 2 Jian-Yun Nie
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.
Classes abstraites et Interfaces
Factory Design Patterns Factory Method
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.
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
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Cours 4 Héritage (suite).
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
CSI 1502 Principes fondamentaux de conception de logiciels
Abstract Factory Pattern Une AbstractFactory est une classe qui existe pour créer des instances de d'autres classes. Créé par le « Gang of Four » Est un.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
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.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
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.
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.
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.
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.
Un visiteur… …venu d’ailleurs Whooooooooooooooo!!!
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Factory Design Patterns Abstract Factory. Abstract Factory Design Pattern Plan Factory patterns: principesFactory patterns: principes The Factory Method.
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.
Le polymorphisme.
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.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
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.
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Factory Design Patterns Raffaella Sanna Sylvain Giroux.
Nouvelles Technologies Internet & Mobile
Introduction à la Programmation Orientée Objet
Héritage en Java Professeur: M. Joundi.
INSTITUT SUPERIEURE D’INFORMATIQUE Design Pattern
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
Retour sur les interfaces Les méthodes définies dans une interface sont des méthodes qui doivent absolument être implémentées par une ou des sous-classes.
Spécialisation covariante cours et TP. Plan  Introduction  Rappels théoriques  Définition de la covariance  Présentation du modèle servant d'exemple.
JAVA et l'orientation objet Jean-Jacques LE COZ. Encapsulation L'encapsulation est le concept de masquer l'implémentation de la classe De ne permettre.
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Design Patterns en programmation par objets
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 final void printTextBody(Page page) { System.out.println(page.body()); } 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 relative à 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