Command Design Pattern

Slides:



Advertisements
Présentations similaires
Primary French Presentation 2 Saying How You Are.
Advertisements

A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
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.
Exposé de Système - Informatique et Réseau
TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle
Design Pattern MVC En PHP5.
Introduction à la POO: Les classes vs les objets
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Etude des Technologies du Web services
XML-Family Web Services Description Language W.S.D.L.
Savoir and connaître both mean to know. They are both irregular verbs. Je ne sais pas!
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
TortoiseSVN N°. Subversion : pour quoi faire ? Avoir un espace de stockage commun – Tous les étudiants du SIGLIS ont un espace svn commun Partager vos.
Factory Design Patterns Factory Method
Les choses que j aime Learning Objective: To know how to use j aime to talk about things I like to do.
Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux.
Un patron de conception
Architecture dun site de vente au détail1 Modèle d'un site simple de vente Lexemple du livre Ruby on Rails Partie II Java Adventure Builder Demo Réalisé.
1 CSI 2532 Lab6 Application Web et DB Février 27, 2012.
Adaptée du cours de Richard Grin
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
Travaux Pratiques Représentation des connaissances
JavaScript Nécessaire Web.
Content Management System CMS. Pourquoi ? Obligation de ressaisir des contenus publiés à plusieurs endroits Pas d’outils de gestion de qualité de l’information.
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Découverte des Framework : SPRING & JAXB
Design Patterns en programmation par objets. Plan  Design patterns –De quoi s’agit-il? –Pourquoi faut-il les utiliser?  Design patterns essentiels 
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.
© Copyright Showeet.com S OCIAL M EDIA T HINKING.
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.
Créer des packages.
Factory Design Patterns Abstract Factory. Abstract Factory Design Pattern Plan Factory patterns: principesFactory patterns: principes The Factory Method.
Le passé composé The perfect tense Eg: J’ai mangé une pizza I have eaten/ate a pizza.
Let’s go back to the verb endings. What are our 3 infinitive endings? ER IR RE What is an infinitive? An unconjugated verb In other words, a verb in the.
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
IFT 232 Méthodes de Conception Orientées Objets Introduction.
Patron de conception Composite
Struts.
Forming questions in French
Les Mots Interrogatifs
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.
 Formulaires HTML : traiter les entrées utilisateur
La programmation par objets Principes et concepts Etude de Smalltalk.
Les Pronoms Direct & Indirect.
Questions to consider: How are French nouns different from nouns in English? What is the difference between saying, “I have a pen.” and saying, “I have.
Irregular Adjectives Not all adjectives are made the same.
Réalisé avec le soutien de Pied de page fixe Pied de page 1 Titre Sous titre.
Welcome everyone.
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Object pronouns How to say “him”, “her”, “it”, “them”
Factory Design Patterns Raffaella Sanna Sylvain Giroux.
Les Java Server Pages Dans ce chapitre, nous allons :
Subversion.
Français I – Leçon 6A Structures demonstrative adjectives passé composé with avoir.
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.
AVOIR Quick review of the conjugation of the verb AVOIR  J’ai  tu as  Il/elle a  Nous avons  Vous avez  Ils/ells ont.
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.
OBJECT PRONOUNS WITH THE PASSÉ COMPOSÉ Page 122. Placement  With all object pronouns, placement is the same. DirectIndirectPlaces De+ nouns or ideas.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
DWR Jean-Jacques LE COZ. Introduction Projet DWR Framework AJAX Projet Open Source commencé en 2004 Licence GPL (Apache Software License v2) Sponsorisé.
WINS Windows Internet Name Service. What is WINS?  It does name resolution (?!) DNS resolves IP numbers and FQDN ARP resolves IP numbers and MAC addresses.
Work: ISA8895 Implementation Section: Interoperability Chapter: B2O
What’s the weather like?
Transcription de la présentation:

Command Design Pattern

Intention Encapsuler une requête sous forme d’objet paramétrer les clients avec différentes requêtes, files de requêtes “logs” de requêtes support d’opérations réversibles (“undo”)

Motivation Le framework Swing émet des requêtes aux objets lorsque les items des menus sont activés les boutons sont “cliqués”. Swing ne peut pas implémenter ces requêtes car elles sont spécifiques aux applications. Comment émettre des requêtes à des objets sans rien connaître des opérations demandées ? ou sans rien connaître de celui à qui la requête est destinée ?

Motivation Le design pattern Command permet aux objets d’un toolkit de faire des requêtes sur des objets d’une application non-spécifiée en transformant la requête en un objet Cet objet est emmagasiné et transmis comme les autres objets. dissocie l’objet qui invoque une opération de l’objet qui possède les connaissances nécessaires pour réaliser cette opération. Flexibilité au niveau du design de l’interface-usager. Partage de fonctionnalités Une application peut fournir un menu et un bouton pour une fonctionnalité juste en faisant en sorte que le menu et le bouton partagent une instance de la même sous-classe de Command. Remplacement dynamique des commandes Utile pour l’implémentation de menus dépendants du contexte (context-sensitive menus). Définition de scripts par composition de commandes possible parce que l’objet qui émet la requête n’a besoin de ne savoir que comment l’émettre, et non pas de savoir comment la requête va être exécutée. Toolkit: The property of the Java API that defines the look and feel of the user interface on a specific platform

Application : Toolkit

Commande simple

Commande complexe

Liste de commandes

Quand appliquer le patron Command? Pour paramétriser des objets par une action à exécuter Exemple: objets MenuItem Les commandes servent à remplacer les “callback” dans les langages orientés objets. Dans un langage procédural >>> une fonction callback function, une fonction enregistrée en quelque part qui doit être appelée plus tard Pour spécifier, mettre en file, et exécuter les requêtes à des moments différents Le cycle de vie d’un objet Command est indépendant de la requête originale Pour implémenter des opérations réversibles. L’exécution de la commande peut conserver l’état dans la commande elle-même pour inverser son effet. Ajout d’une méthode “unexecute” Les commandes exécutées sont placées dans une liste.

Quand appliquer le patron Command? Pour implémenter un log des modifications de telle sorte que l’on puisse les réappliquer en cas d’écroulement du système. Ajout des méthodes “load” et “store” Pour structurer un système à l’aide d’opérations de haut niveau construites à partir d’opérations primitives Transactions Une transaction encapsule un ensemble de modifications aux données.

Structure

Participants Command ConcreteCommand (PasteCommand, OpenCommand) déclare une interface pour exécuter une opération. ConcreteCommand (PasteCommand, OpenCommand) Définit une liaison entre l’objet destinataire et l’action Implémente “execute” par l’invocation d’ opérations sur le destinataire. Client (Application) Crée un objet ConcreteCommand et assigne son destinataire. Invoker (MenuItem) Demande à la commande de s’exécuter. Destinataire (Document, Application) Sait comment exécuter les opérations associées à la requête. N’importe quelle classe peut agir comme destinataire.

Collaborations Le client crée l’objet ConcreteCommand et spécifie le destinataire. L’objet Invoker emmagasine l’objet ConcreteCommand. L’objet Invoker émet une requête en invoquant “execute” sur la commande. Lorsque la commande est réversible, ConcreteCommand emmagasine l’état nécessaire pour revenir dans l’état précédant l’invocation de “execute”. L’objet ConcreteCommand invoque les opérations du destinataire pour exécuter la requête.

Conséquences Le Command DP dissocie l’objet qui invoque une opération de celui qui sait comment l’exécuter. Les commandes sont des objets à part entière. Elles peuvent être manipulées et étendues comme n’importe quel autre objet. On peut assembler des commandes pour former une commande composite. Composite pattern. C’est facile d’ajouter de nouvelles commandes car il ne faut pas modifer les classes existantes.

Implémentation Jusqu’à quel point une commande devrait-elle être intelligente? À une extrême, seulement un lien entre un destinataire et les actions à effectuer. Commandes qui possèdent assez de connaissances pour trouver leur destinataire dynamiquement. A l’autre extrême, la commande fait tout sans rien déléguer à un destinataire Pour définir des commandes indépendantes des classes existantes. Lorsqu’aucun destinataire acceptable n’existe. Une commande connaît son destinataire implicitement (création d’une fenêtre)

Implémentation Implémentation de “undo” et “redo” Quel état faut-il conserver? Destinataire Arguments Valeurs originales de l’état du destinataire qui ont pu être modifiées par la commande Combien de niveau de “undo” Seulement la dernière commande History list Une commande réversible peut devoir être clonée avant de la placer dans l’historique pour distinguer diverses invocations de la même commande. Prototype DP

Implémentation Eviter l’accumulation d’erreurs dans le processus de réversibilité Assurer un mécanisme undo/redo fiable préservant la sémantique Les erreurs peuvent s’accumuler lorsque les commandes sont exécutés, inversées et réexécutées. Le Memento (283) DP peut être appliqué pour donner accès à l’information nécessaire pour restaurer un objet sans exposer les détails internes d’un objet.

Exemple : Swing http://www.javaworld.com/javaworld/jw-06-2002/jw-0628-designpatterns.html

execute execute show dialog, le nom qui sera affiché dans le menu exit, le nom qui sera affiché dans le menu execute

Known Uses Perhaps the first example of the Command pattern appears in a paper by Lieberman [Lie85]. H. Lieberman. There's more to menu systems than meets the screen. SIGGRAPH Computer Graphics, pp. 181–189, San Francisco, July 1985 MacApp [App89] popularized the notion of commands for implementing undoable operations. ET++ [WGM88], InterViews [LCI+92], and Unidraw [VL90] also define classes that follow the Command pattern. InterViews defines an Action abstract class that provides command functionality. It also defines an ActionCallback template, parameterized by action method, that can instantiate command subclasses automatically. The THINK class library [Sym93b] also uses commands to support undoable actions. Commands in THINK are called "Tasks." Task objects are passed along a Chain of Responsibility (223) for consumption. Unidraw's command objects are unique in that they can behave like messages. A Unidraw command may be sent to another object for interpretation, and the result of the interpretation varies with the receiving object. Moreover, the receiver may delegate the interpretation to another object, typically the receiver's parent in a larger structure as in a Chain of Responsibility. The receiver of a Unidraw command is thus computed rather than stored. Unidraw's interpretation mechanism depends on run-time type information. Coplien describes how to implement functors, objects that are functions, in C++ [Cop92]. He achieves a degree of transparency in their use by overloading the function call operator (operator()). The Command pattern is different; its focus is on maintaining a binding between a receiver and a function (i.e., action), not just maintaining a function.

Patterns reliés Composite >>> Macro-commandes Memento >>> conserver l’état d’un destinataire lorsqu’une commande est réversible. Prototype >>> Une commande qui doit être copiée avant d’être placée dans un historique.

Références Gamma et al., Design Patterns, http://www.javaworld.com/columns/jw-java-design-patterns-index.shtml

Struts Struts, a popular open source JSP application framework from the Apache Software Foundation But the most significant cog in the Struts wheel is an MVC framework that revolves around the Command pattern.

All Web applications, at their core, perform the same basic function: field HTTP requests and respond to those requests by performing some application-specific functionality. Struts provides a servlet—known as the action servlet—that handles HTTP requests and ultimately invokes an application-specific action. The Struts action servlet turns HTTP requests into actions, but as a developer employing Struts to implement Web applications, you can remain blissfully ignorant of how it works—that's the beauty of application frameworks and the Command pattern. You simply need to know how to map an HTTP request to a Struts action, how to implement that action, and you're off and running.

When the action servlet receives the /simple.do URL, The preceding configuration file maps the /simple URL to the actions.SimpleAction class. When the action servlet receives the /simple.do URL, it strips off the .do suffix and maps the URL to the actions.SimpleAction class. If an instance of that class does not exist, the action servlet creates one and invokes its execute() method.

The preceding action checks to see if a counter bean exists in the application scope; if not, it creates one and stores it there. Subsequently, the action invokes the counter bean's updateCount() method, which updates a counter stored in a file named .simpleActionCount. Then the action returns an ActionForward instance that points to a JSP mapped to the string fwd-page. That mapping, also defined in the Struts configuration file (see Example 4), resolves the string fwd-page to the forwardPage.jsp JSP. The action servlet subsequently forwards control to that JSP