Enseignant Chercheur ESIL/INFO France

Slides:



Advertisements
Présentations similaires
Mathilde VINCENT - Olivier JOURDAN Paris - le 7/2/2012
Advertisements

Qualité en Développement Laurent Henocque Enseignant Chercheur ESIL/INFO France
« Les Mercredis du développement » Introduction Office « 12 » Présenté par Bernard Fedotoff Microsoft Regional Director Agilcom.
DTD Sylvain Salvati
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
XML - Henry Boccon-Gibod 1 XML, Langage de description La question du choix de formalismes Les entités et leur représentations modalités de modèles et.
Exposé de Système - Informatique et Réseau
(Classes prédéfinies – API Java)
51 Les technologies XML Cours 7 : Utilisations dXML Janvier Version 1.0 -
C.
Design Pattern MVC En PHP5.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
بسم الله الرحمن الرحيم. Institut Supérieure des Etudes Technologiques de Kébili.
Common Gateway Interface
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
Etude des Technologies du Web services
Programmation orientée objet
XML-Family Web Services Description Language W.S.D.L.
Réalisée par :Samira RAHALI
Chaque use-case génère un ou des scénarios, traduits par des diagrammes objets, qui permettent d’introduire et/ou de compléter les diagrammes des catégories.
Les instructions PHP pour l'accès à une base de données MySql
Historique de SystemC Regroupe 4 courants didées: SCENIC Project : Synopsys+UC Irvine Philips System-Level Data Types, VSIA SLD DWG IMEC, Hardware-Software.
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
Structures de données IFT-2000
Introduction au paradigme orienté-objet (suite)
Présentation du mémoire
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é.
PhP-MySQL Pagora 2012/2013 CTD 1 - Presentation de moi ^^
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é.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
J2EE vs .NET Réaliser par : SEIF ENNACER BADRA && CHETOUI RIM.
Patrons de conceptions de créations
Héritage et composition
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
Guillaume TORRENTE Marc BOUISSOU Recherche & Développement
PROGRAMMATION WEB FRONT-END.
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.
La notion de type revisitée en POO
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.
Designs Patterns comment rendre son code faiblement couplé, et maintenable...
Créer des packages.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
Technologies web et web sémantique TP3 - XML. XML eXtensible Markup Language (langage extensible de balisage) – Caractéristiques: méta-langage = un langage.
Introduction au Génie Logiciel
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
Struts.
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Initiation au JavaScript
Module : Langage XML (21h)
Notifications et Communication réseau D. BELLEBIA – 18/12/2007NSY208 CNAM.
PaCO++ André Ribes Réunion Hydrogrid Rennes 15/09/03.
Factory Design Patterns Raffaella Sanna Sylvain Giroux.
Modèles de conception et BC4J Par Gabriela Cohen Yanéric Roussel.
Introduction à la Programmation Orientée Objet
SOAP et les RPC XML SOAP WSDL RPC. Rappels sur le XML Langage avec des balises Très lisible Pour stocker des données Séparation entre contenu et présentation.
INSTITUT SUPERIEURE D’INFORMATIQUE Design Pattern
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.
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.
Transcription de la présentation:

Enseignant Chercheur ESIL/INFO France Design Patterns Laurent Henocque http://laurent.henocque.free.fr/ Enseignant Chercheur ESIL/INFO France http://laurent.henocque.perso.esil.univmed.fr/ mis à jour en Octobre 2006

Licence Creative Commons Cette création est mise à disposition selon le Contrat Paternité-Partage des Conditions Initiales à l'Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-sa/2.0/fr/ ou par courrier postal à Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Préambule Ce support de cours présente de nombreux diagrammes, dont certains peuvent contenir des erreurs UML2 Il n'est donc pas utilisable sans l'aide d'un enseignant

Contexte De très nombreux projets logiciels font apparaître des éléments comparables Réinventer les meilleures solutions connues dans chaque nouveau projet est inutile, et risqué Analysis Patterns Design Patterns Frameworks Workflow Patterns

Pourquoi les Patterns La réussite prime sur la nouveauté Importance de la clarté de la documentation Validation qualitative des acquis et de la connaissance pratique Importance de la dimension humaine dans le développement logiciel Faciliter la réutilisation de savoir faire

Sur la réutilisation Les langages informatiques modernes orientés objet permettent la réutilisation par importation de classes par héritage : extension / spécialisation par l'inversion de contrôle (aspects)

Schéma de conception réutilisable Les patterns c'est quoi? Design Pattern = Schéma de conception réutilisable Organisation et hiérarchie de plusieurs modèles de classes réutilisable par simple implémentation, adaptation, extension

Comment? Les Design Patterns sont présentés en utilisant la notation graphique standard UML Pour l'essentiel, seule la partie statique (diagrammes de classes) de UML est utilisée

Diagrammes de Classes UML2 (éléments) Classe_A relation Classe_B héritage Classe_C agrégat / composition Classe_D attributs fonctions dépendance

Références

Références Web http://patterndigest.com/ http://norvig.com/design-patterns http://www.industriallogic.com/papers/index.html … google…

Exemples Simples : Intuition Quelques exemples de "proto" patterns, ou d'éléments de conception réutilisables non officialisés

La Liste La liste (ce n'est pas un schéma, mais un élément de conception orientée objet) Ce modèle est largement criticable : quels sont ses défauts?

Collection Gestion de collections via une classe Ce modèle ne respecte pas les conventions UML: quels sont ses défauts?

Attribut Relation Définir un rôle d'une relation (binaire) par un pointeur

Maître / Esclave Déléguer la gestion d'une relation à une classe intermédiaire

Objet Relation Modéliser une relation importante par un objet (on veut ignorer la façon dont la relation est gérée)

Les 23 Patterns

Types de Patterns Patterns structuraux Patterns de création décrivent une organisation de classes dans l'optique "structure de données" Patterns de création décrivent des approches de création déléguée d'objets Patterns dynamiques décrivent une organisation de classes gérant les aspects dynamiques d'un système

Présentation de Schémas Simples On débute par 7 schémas d'utilisation très répandue Composite Iterator Command Adapter Singleton Factory Method Template Method

Composite Composer des structures hiérarchiques

Composite : exemples Toute structure de données récursive container graphique structure de document (chapitre/section/paragraphe...) container conceptuel (états composites dans UML)

Iterator Parcourir des conteneurs en masquant l'implantation

Iterator

Iterator : exemples Toute logique de parcours de container Exemples nombreux en Java On veut enlever des structures de données toute information relative à son parcours, et ainsi permettre de faire varier les modes de parcours

Command Encapsuler une requête dans un objet

Command : exemples Command remplace les pointeurs vers fonctions dans tous les langages objet évolués. Command interface l'appel d'une opération via une méthode virtuelle. Utilisé dans les interfaces homme machine pour attacher un comportement à un objet

Function Object Encapsuler une fonction dans un objet (un autre nom pour "command") FunctionObject ------------------- execute(param) ConcreteFunctionObject ------------------------------- state

(Class) Adapter Convertir une interface par héritage multiple

Adapter : exemples Toute situation où l'on veut réutiliser du code, mais pas son interface de programmation. Par exemple, un code ancien, ou tiers, ne respecte pas notre charte de présentation

Object Adapter (Wrapper) Convertir une interface par composition

Singleton Gérer une instance unique

Singleton : exemples Singleton permet de gérer la création à la demande (lazy) d'un objet unique. L'objet est créé au premier accès de façon invisible Exemples : le spooler d'impressions, le système de fichiers dans un OS

Factory Method Définir une interface de création, mais laisser les sous classes décider du type

Factory Method : exemples C'est un fragment de Abstract Factory (voir plus loin) C'est un exemple de "Template Method" (voir ci après) Utile par exemple pour créer des itérateurs. Chaque classe d'une hiérarchie de containers implante sa version de "createIterator()", qui retourne un objet du type adéquat.

Template Method Prévoir un squelette de fonction, et compléter par les sous classes

Template method : exemple La logique de création et archivage par nécessité suivante peut être définie par une super classe, et ses détails implantés par des sous classes Object get(String name){ Object o=find(name); if (o) return o; if (!canCreate(name)) return null; o = create(name); addToContainer(o); return o; }

Autres Schémas de Création Présentation quasi alphabétique

Schémas de Création Abstract Factory : Builder : Factory Method : interface de création de familles d'objets de type exact inconnu Builder : séparer création et représentation Factory Method : interface de création spécifiée par des sous classes Prototype création par clonage Singleton classe à instance unique

Abstract Factory Interface de création de familles de produits

Abstract Factory : exemples Permet de changer le look and feel d'une interface en changeant le type des objets créés en changeant simplement d'object factory Peut aussi servir pour changer globalement les types de containers utilisés par un programme (listes ou tableaux ou hashtables) par exemple

Builder Séparer la construction d'un objet complexe de sa représentation

Builder : exemples L'exemple type est celui d'un convertisseur "à la volée" de texte formaté. vers un autre format vers des formats avec perte (html -> texte seul) Le principe est qu'à chaque rencontre d'une unité remarquable (balise, chaîne de caractères, texte libre...) le parseur invoque le convertisseur. En changeant ce dernier, on change le format de sortie.

Prototype Créer des instances par clonage de prototypes

Prototype : exemples C'est la base de la mise en œuvre du copier/coller dans les interfaces graphiques

Autres Schémas Structuraux Présentation alphabétique

Schémas Structuraux Adapter Bridge Composite Decorator Façade convertir une interface en une autre pour réutilisation Bridge découpler une abstraction de son implantation Composite structures arborescentes Decorator attachement dynamique de fonctionnalités Façade interface unique sur les interfaces d'un module Flyweight objets ultra légers Proxy représentant local d'un objet distant

Bridge Découpler une abstraction de son implantation

Bridge : exemples On se trouve dans le cas où l'on doit maintenir en même temps une hiérarchie d'abstractions et plusieurs hiérarchies d'implantation différentes : par exemple pour réaliser des interfaces graphiques portables On peut aussi vouloir cacher des interfaces de programmation (C++) : cas particulier type de la classe "Handle"

Decorator Attacher des responsabilités dynamiquement

Decorator : exemples On veut attacher dynamiquement des traitements effectués de manière récursive Exemple : dans les interfaces graphiques, l'affichage des "décorations" : barre de saisie, ascenseurs, transparence etc... Autre possibilité : pour la sérialisation : ajout de balises html/xml autour du source généré par exemple.

Façade Interfacer un sous système par une classe façade

Facade : exemples Votre compilateur C++ en ligne de commande favori : permet l'invocation d'une session complète, ou du préprocesseur seul, ou du linker...

Flyweight Gérer des millions de pseudo objets associés à des données de base

Flyweight exemples Dans un éditeur de textes, faire de chaque caractère un objet. Dans un afficheur de signaux radars, faire de chaque signal un objet.

Proxy Définir un représentant local d'un objet accessible à distance

Proxy : exemples interface des EJB

Autres schémas dynamiques Présentation alphabétique

Schémas Dynamiques Chain of Responsibility Command Interpreter découpler l'objet responsable d'un traitement Command objet fonction Interpreter représentation de la sémantique d'une grammaire Iterator accès séquentiel au contenu d'un container Mediator modélisation de l'interaction d'objets Memento support du undo

Schémas Dynamiques Observer State Strategy Template Method Visitor gestion des notifications State définir les états par des classes Strategy définir des familles d'algorithmes interchangeables Template Method définir le squelette d'un algorithme Visitor permettre d'appliquer une opération aux éléments d'une structure de données

Chain of Responsibility Eviter de coupler le demandeur d'une requête et son récepteur

exemples le système de prise en compte des événements dans le logiciel hypercard toute ihm ou l'on voudrait que par défaut un click s'il n'est pas traité par un bouton soit traité par un script d'un conteneur englobant, à un niveau quelconque

Interpreter Explorer un arbre syntaxique

Interpreter : exemples Utile pour la version "luxe" de "Builder". On a fait une analyse syntaxique, et on veut exploiter la structure de données hiérarchique qui a été construite pour: compiler traduire ...

Mediator Alléger le coût d'une communication nxn par un médiateur

Mediator

Mediator : exemples Dans une interface graphique, gérer des dépendances complexes entre des composants de saisie/visualisation

Memento Prévoir la restauration de l'état d'un objet (Undo)

Observer Définir une relation entre objets pour que chaque mise à jour soit notifiée

Observer : exemples Toujours dans une interface graphique par exemple, permettre la notification entre des vues multiples éditables ou non d'une même donnée. Par exemple feuille de calcul/diagrammes

State Gérer les états par une hiérarchie de classes

State : exemples La fonction "display" d'une icône représentant une connexion change selon l'état. Pour le code qui invoque display, il suffit de changer dynamiquement l'objet qui implémente l'état pour que cette particularité soit insensible

Strategy Varier dynamiquement les algorithmes

Strategy : exemples les tris ont des plages d'optimalité. On peut changer une foi pour toutes l'algo de tri attaché à un (itérateur de) vecteur par exemple, dès que le nombre de constituants dépasse 5

Explorer une structure de données hiérarchique Visitor

Visitor : exemples permettre l'appel d'une fonction sur des éléments d'une structure de données sans avoir à réécrire l'algo de parcours à chaque fois. la fonction "map" de LISP

Autres Patterns Utiles

Inversion de dépendance L'inversion de dépendance permet de rendre un code indépendant de ses conditions d'initialisation , et des API précises des ses données d'initialisation Utile dans les architectures multi couches Exemple: le framework Spring: http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework le projet Pico (http://www.picocontainer.org/) le projet Avalon

Inversion de Dépendance par les setters

Inversion de Dépendance par les constructeurs

Patterns Aggrégés

Model View Controller

Model View Controller MVC peut être vu comme une combinaison de design patterns Les vues sont organisées selon Composite Le lien entre vues et modèles est l' Observer. Les contrôleurs sont des Strategy attachées aux vues. MVC peut mettre en jeu encore d'autres patterns: Le modèle est souvent un Mediator Les arbres de vues mettent en œuvre Decorator On a souvent besoin d' Adapter pour convertir l'interface d'un Modèle de façon à ce qu'elle soit adaptée aux vues. Les vues créent les contrôleurs avec FactoryMethod.

Document View Pattern Document View est une version simplifiée de MVC où la vue agit selon le pattern Observer, et est mise à jour en fonction de l'état du document (Mis en œuvre dans les MFC)

General Responsibility Assignment Software Patterns or Principles GRASP General Responsibility Assignment Software Patterns or Principles

GRASP GRASP propose des guides généraux d'organisation des interfaces de programmation orientée par le concept de "responsabilité" attachée aux classes. Les "patterns" GRASP fournissent une canevas logique pour déployer des interfaces garantissant un niveau amélioré de réutilisabilité

Information Expert Ce modèle représente le plus fondamental des allocations de responsabilité: La responsabilité doit être attachée à la classe la plus compétente (Information Expert)

Creator La classe responsable de créer de nouvelles instances d'une classe C est celle qui: agrège, contient, enregistre les instances de C utilise les instances de C possède l'information nécessaire pour créer les C

Controller La responsabilité de traiter les événements système est déléguée à une classe non membre de l'interface utilisateur qui représente le système entier ou un scénario de cas d'utilisation Un contrôleur de use case doit être capable de gérer la totalité des évènements possibles d'un cas d'utilisation. Un contrôleur peut gérer les évènements de plusieurs scénarios si nécessaire

Low Coupling Le "couplage faible" renvoie aux aspects de l'organisation logicielle qui permettent: de limiter les dépendances entre classes de réduire l'impact du changement sur les autres classes d'augmenter la réutilisabilité Les stratégies qui le permettent sont variées, mais reposent largement sur l'inversion de contrôle et les design patterns de séparation (bridge, builder, decorator, mediator etc...)

High Cohesion La "cohésion forte" est une stratégie d'organisation des classes qui vise à associer au sein d'une même classe des services fortement voisins ou reliés

Polymorphisme Quand des variations de fonctionnalités sont induites par le type des objets, la responsabilité de ces variations est données à des sous classes qui implantent le type, à une opération surchargée dans chaque cas par la méthode appropriée

Pure Fabrication Une "Pure Fabrication" est une classe ne faisant pas partie des objets métier ou technique, mais introduite pour les seuls besoins de satisfaire "low coupling et/ou high cohesion" ou tout autre besoin dicté par les GRASP

Indirection Utiliser un intermédiaire (pattern Mediator par exemple) pour satisfaire les impératifs de couplage faible

Protected Variations Protéger un ensemble logiciel des variations d'un élément en groupant ses parties instables dans une interface, dont les implantations réalisent les variations

Trois principes liés aux design et grasp patterns

Single-Responsibility Principle Une classe doit n'avoir qu'une seule raison de changer. Ce principe est une lecture du principe de "cohésion forte". La classe ne doit offrir que des services fortement reliés on ne combine pas rémanence et fonctionnalité par exemple Ce principe contredit de facto l'usage de l'héritage pour extension

Interface-Segregation Principle Un programme ne doit pas dépendre de méthodes qu'il n'utilise pas Principe également lié à la cohésion forte Conduit à la multiplication d'interfaces très spécifiques et petites.

Open-Closed Principle Un code doit être "ouvert à l'extension, mais fermé à la modification". En d'autres termes, tout ajout de fonctionnalité ou évolution du logiciel doit se faire de façon incrémentale, sans modifier une ligne de source existante Une approche de ce principe se fait par les design patterns "template method" et "strategy

Design Patterns J2EE

Les Patterns J2EE Java a popularisé une liste de Patterns utilisés dans la mise en œuvre d'applications à base d'EJB Chaque Pattern n'est pas une collaboration au sens propre, mais le nom d'une classe, dotée de fonctionnalités particulières, et qui entre dans des interactions spécifiques avec d'autres

http://java.sun.com/blueprints/ corej2eepatterns/Patterns/index.html

http://java.sun.com/blueprints/ corej2eepatterns/Patterns/index.html

http://java.sun.com/blueprints/ patterns/catalog.html Business Delegate Reduce coupling between Web and Enterprise JavaBeansTM tiers Composite Entity Model a network of related business entities Composite View Separately manage layout and content of multiple composed views Data Access Object (DAO) Abstract and encapsulate data access mechanisms Fast Lane Reader Improve read performance of tabular data Front Controller Centralize application request processing Intercepting Filter Pre- and post-process application requests Model-View-Controller Decouple data, behavior, and presentation Service Locator Simplify client access to enterprise business services Session Facade Coordinate operations between multiple business objects in a workflow Transfer Object Transfer business data between tiers Value List Handler Efficiently iterate a virtual list View Helper Simplify access to model state and data access logic

Références Mastering EJB 3.0 EJB Design Patterns http://www.theserverside.com/tt/books/wiley/masteringEJB3/index.tss EJB Design Patterns http://www.theserverside.com/tt/books/wiley/EJBDesignPatterns/index.tss L'ensemble du site est utile: http://www.theserverside.com/

Conclusion Les patterns fournissent un outil puissant de documentation de savoir-faire de nommage de concepts universellement utilisés de réutilisation pratique de modèles objet dans les projets

Autres Pseudo Patterns référencés

Casting Method Prédéfinir les casts

Connected Group Gérer collectivement les connexions

Double Checked Locking class Singleton { public: static Singleton * instance(); private: static Singleton * self; static SEMAPHORE key; } Singleton * Singleton::instance() { if (self == 0) { if ( lock(key) >= 0 ) { if (self == 0 ); //double-check! self = new Singleton; unlock (key); } } }

Flexible Service Faire d'une fonction une classe, évaluée de manière retardée

Eviter les down casts Intelligent Children

Is Kind Of Fournir des informations de type

Multiton class User { public: static const User * LogIn(const char * name, const char * password); protected: virtual User * Lookup(const char *name); private: List<UserName> * _instances; } class UserName : public ListItem { User* instance; char* name;

Mutual Friends Représenter une relation bidirectionnelle

Named Object

Null Object Représenter une relation partielle

Objectifier Permettre à un objet de faire varier dynamiquement son comportement

RTTIVisitor Obtenir un cast sûr au moyen du pattern visitor

Sender Argument Permettre de s'identifier auprès d'autres objets par passage d'une référence

Serializer Ecrire les objets dans des flux de données pour les reconstruire plus tard

Timed Relationship Représenter une relation qui varie au cours du temps