Introduction aux patrons D. Rieu Dept Informatique, IUT2 Grenoble [email protected] Composants de différents niveaux Expression des besoins Analyse (abstraction du monde réel) Nerson 92 Spécifications Informelles Modèle Objet Descriptif & Normatif Conception (solution technique) Modèle Objet Effectif Normalise Implantation (solution opérationnelle) Département info/IUT2 Logiciel 2 Composants réutilisables le composant logiciel ne suffit plus toute une panoplie de modèles de composants réutilisables Dédié à un niveau d’abstraction Capitalisant savoir / savoir-faire Patron (Patterns) : un modèle consensuel ? Département info/IUT2 3 Patron ? Un patron constitue une base de savoir-faire pour résoudre un problème récurrent dans un domaine particulier. L’expression de ce savoir-faire : permet d’identifier le problème à résoudre propose une solution possible et correcte pour y répondre offre les moyens d’adapter cette solution Département info/IUT2 4 PATTERNité : l’architecture C. Alexander : 253 patrons de conception architecturaux (64,77,79) « Pattern #112 d’Alexander» Nom : Transition d’entrée Quoi : créer une transition du monde extérieur vers un univers intérieur, plus privé Pourquoi : L’entrée dans un bâtiment influence la façon dont on va se sentir à l’intérieur Quand : systèmes d’accès et d’entrée pour les maisons, les cliniques, les magasins, etc. Comment : Créer un espace de transition entre la rue et la porte d’entrée. Marquer le cheminement dans l’espace de transition par un changement de lumière, un changement de direction, etc. Patterns en relation : vue Zen (#134), etc. tiré de «Introduction aux patterns» Jean Bézivin Département info/IUT2 5 D’autres domaines : l’hydraulique. Ken Asplund en 1973 « Le volume d’eau en aval » (Downstream Water Volume ) Problème : Quand on détourne une partie des eaux d’une rivière, le volume d’eau dans le drainage décroît, ce qui conduit à un affaiblissement des contributions de la rivière. Contraintes : Il ne faut pas que le détournement d’une partie de la rivière pénalise l’irrigation des cultures en aval ; la population ne doit pas souffrir de cette baisse du débit des eaux ; l’impact écologique doit être limité au minimum. Solution : Il faut maintenir le niveau des eaux en aval en ramenant un maximum d’eau détournée vers son lit d’origine ; en traitant les eaux usées afin de les réintroduire en aval ; en économisant les eaux d’irrigation en évitant les systèmes de pulvérisation ou de brumisation. Département info/IUT2 6 Définition Un patron décrit à la fois un problème qui se produit très fréquemment dans votre environnement et l’architecture de la solution à ce problème de telle façon que vous puissiez utiliser cette solution des milliers de fois sans jamais l’adapter deux fois de la même manière. C. Alexander Décrire avec succès des types de solutions récurrentes à des problèmes communs dans des types de situations Département info/IUT2 7 Les patrons pour les SI Coad [Coad92] Une abstraction d’un doublet, triplet ou d’un ensemble de classes qui peut être réutilisé encore et encore pour le développement d’applications Appleton [Appleton97] Une règle tripartite exprimant une relation entre un certain contexte, un certain problème qui apparaît répétitivement dans ce contexte et une certaine configuration logicielle qui permet la résolution de ce problème. Aarsten [Aarsten96] Un groupe d’objets coopérants liés par des relations et des règles qui expriment les liens entre un contexte, un problème de conception et sa solution. Les patrons sont des composants logiques décrits indépendamment d’un langage donné (solution exprimée par des modèles semi-formels) Département info/IUT2 8 Historique OOPSLA 87 Beck et Cunnimghan Design Patterns : Element of Reusable Object-Oriented Software Gamma 95 OOPSLA 91, OOPSLA 92 Gamma et al. (GoF) PLoP 94 Montibello • Object Models: Strategies, Patterns and Applications Coad 95 • Patterns Languages of Program Design Coplien et Schmidt 95 EuroPLoP 96 Kloster Pattern-Oriented Software Architecture: A System of Patterns. ChiliPLoP 98 Buschmann 96 Wickenburg Analysis Patterns : Reusable Object Model Fowler 97 Département info/IUT2 9 Patron « observateur » d ’E. Gamma Intention : définir une interdépendance entre objets dépendants de façon telle que, quand un objet change d’état, tous ceux qui en dépendent en soit informés et automatiquement mis à jour. Motivation : 3 observateurs 3 observateurs 1 sujet x = 55 y = 97 Département info/IUT2 1 sujet Est = 20,4 Ouest = 30,6 Nord = 45,9 60 40 20 0 GoF, 1995 10 Patron « observateur » Structure et Collaborations un-Observateur Sujet état_sujet lire_etat () modifier_etat () notifier () lier (Observeur) délier (Observeur) 1: modifier_état 1,n Observateurs Observateur un-Sujet un-autre-Observateur 2: notifier état-obs. 3: mise_à_jour mise_à_jour( ) return état_sujet 4: lire_état 4: mise_à_jour 5: lire_état pour tout o de Observateurs o.mise_à-jour () Département info/IUT2 11 Types de patrons / portée Analyse «métier commun» «métier spécifique» - Le problème traité est issu d’une analyse de domaine - Aide à la construction de modèles objets descriptifs Gestion des ressources Opérations Bancaires Département info/IUT2 Conception «architecture» «conception» - identifier, nommer et abstraire des thèmes récurrents de la conception par objet. Implantation « idiome » Documentation - comment implanter dans un langage particulier certains traits absents de ce langage - technique de dialogue, de documentation, d’enseignement, etc. - Aide à la construction de modèles objets effectifs Composite Observateur Blackboard Simuler l’héritage multiple en Java Documenter un framework 12 Patrons de Gamma : introduction 23 modèles de conception du «Gang of Four» Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ORIGINES • pratique de Smalltalk & C++ • conception et réalisation de frameworks (cadriciels) • thèse d’Erich Gamma, Object-Oriented Software Development based on ET++ : Design Patterns, Class Library, Tools, Institut für Informatik, Zurich, 1991. • des conférences OOPSLA 91, 92, … • Design Patterns - Elements of Reusable Object Oriented Software, Addison-Wesley, 1995. (existence d’une version française) Département info/IUT2 13 Patrons de Gamma : formalisme 1- nom du patron et classification 2- intention : le problème à résoudre 3- alias : les patrons similaires dans d’autres langages de patrons 4- motivation : un scénario d’application du patron, les problèmes particuliers 5- indications d’utilisation : les situations dans lesquelles ce patron peut être utilisé 6- structure : une représentation graphique du patron utilisant la notation OMT 7- participants : les classes et/ou les objets participants et leurs responsabilités 8- collaborations : comment les participants collaborent 9- conséquences : décrit les résultats d’utilisation du patron 10- implantation : les astuces et les conseils d'implantation 11- exemples de code : fragments de code illustrant l’implantation du patron 12- utilisations remarquables : des exemples d’utilisations réelles de ce patron 13- modèles apparentés : d’autres patrons utilisés avec (ou par) celui-ci Département info/IUT2 14 Formalismes des patrons Narratif ou Structuré P. Coad Nom Le patron Un exemple Indications Diagramme • Solution plus ou moins détaillée • Liens inter-patrons • Cas réels d’utilisation (framework) Département info/IUT2 E. Gamma Nom Intention Alias Motivation Indications d’utilisation Structure Participants Collaborations Conséquences Implantation Exemples de Code Utilisations Modèles Apparentés Patron 15 Classification Gof Fonction Classe héritage Portée Création Structure Délègue la Décrit la manière création des objets de composer les aux sous-classes classes Comportement décrire des algorithmes et des flots de données Factory Method Interpreter Adapter Objet Délègue la Décrit la manière Décrit des protocoles création d’objet à d’assembler des de coopérations entre un autre objet objets objets pour accomplir délégation une tâche Abstract Factory Composite Observer Département info/IUT2 Patron 16 Exemple : Factory Method Nom : Factory Method , Classification : Creation - Classe Alias : constructeur virtuel Intention : Définit une interface pour créer des objets, mais laisse les sousclasses décider de la classe à instancier. Motivation : Il s’agit permettre l’adaptation de classes abstraites de framework qui bien que abstraites ont à créer des objets dans d’autres classes abstraites. Application Document docs MyDocument Département info/IUT2 CreateDocument NewDocument MyApplication CreateDocument Patron doc = self.CreateDocument docs.inserer(doc) doc.ouvrir return new MyDocument() 17 Exemple : Factory Method Structure Creator Product ConcreteProduct FactoryMethod AnOpération ... product = self. FactoryMethod .... ConcreteCreator FactoryMethod return new ConcreteProduct() Participants Product : l’interface des objets créés par la «factory method» ConcreteProduct : réalise l’interface Creator : déclare la «factory method» et l’utilise pour manipuler des produits ConcreteCreator : surcharge ou réalise la «factory method» Département info/IUT2 Patron 18 Exemple : Composite Nom : Composite, Classification : Structure - Objet Intention : décrire des compositions récursives et permettre aux clients de traiter des objets individuels ou des compositions d’objets uniformément. Motivation : Dans les applications graphiques, par exemple les éditeurs graphiques, le système autorise l’élaboration de figures composites à partir de figures simples et prédéfinies mais aussi à partir de figures composites élaborées précédemment. Département info/IUT2 Patron 19 Exemple : Composite Figure un-Client colorer () tracer () ajouter(fig) supprimer(fig) accéder () composant uneFigure uneFigure uneuneFigure Composée Figure* Simple 1: colorer () 2: colorer () 3:colorer () 1,n 4: tracer () 5: tracer () Cercle colorer () tracer () Texte colorer () tracer () FigureComposée colorer () { } tracer () ajouter(fig) supprimer(fig) accéder () Département info/IUT2 pour tout c de composants c.colorer() Patron 20 Exemple : Composite Structure et Participants: Client : manipule les objets feuilles et composites à travers l’interface Composant Composant: définit l’interface commune des objets. Feuille : définit le comportement des objets simples. Composite : définit le comportement des objets composites, réalise les opérations de gestion des composants. Département info/IUT2 Composant Client Opérationspécifique () Ajouter(Composant) Supprimer(Composant) Accéder() Feuille Opérationspécifique () pour tout c de composants c.operationspécifique Patron 1,n composant Composite Opérationspécifique () Ajouter(Composant) Supprimer(Composant) Accéder() 21 Exemple : Composite Collaboration : Les clients utilisent la classe Composant pour interagir avec les objets dans la structure composée. S’il s’agit d’une feuille, la requête est prise en compte immédiatement. S’il s’agit d’un composite, la requête est propagée à ses enfants. Implantation : référence aux enfants (composé -> composant) : ordre ? (Iterator) référence au père (composant -> composé) : Maj par le composé partage de composant (utilisation du Flyweight) interface commune ? Produire une implantation par défaut en imaginant la migration des objets (accéder pour une classe Feuille) Département info/IUT2 Patron 22 Typologie des patrons Patrons nature Patrons Processus Patrons Produit couverture Patrons Généraux Patrons de Domaine portée Patrons D’Analyse Département info/IUT2 Patrons Conception Patrons D’Implantation 23 Nouvelle-Opération-Bancaire Nom : Nouvelle-Opération-Bancaire Problème : Permet de traiter uniformément les opérations bancaires (création compte, prêt, retrait, dépôt, etc.) pour faciliter la maintenance et l’évolution du système. Force : Uniformisation des traitements, Réutilisation dès l’expression des besoins. Département info/IUT2 24 Nouvelle-Opération-Bancaire Cas d’application : Retrait Compte Client Agent bancaire Nouveau Compte Département info/IUT2 2 cas spécifiques Accéder au compte Contrôler le compte Vérifier la création du retrait Créer le retrait Prévenir le client Accéder au client Contrôler le client Vérifier la création du compte Créer le compte Prévenir l’agent Cas général Nouvelle Opération Bancaire Acteur Accéder au produit Contrôler le produit Vérifier la création de l’opération Créer l’opération Prévenir l’acteur 25 Nouvelle-Opération-Bancaire Banque « Agrégat-Produit » Client 1: retrait-compte (numc, m) c : Compte « Produit » o: Retrait « Opération-Bancaire » 2 : c:= un-compte? (numc) 3 : état:= ton-état ? () 4 : [ état = non bloqué] o:= réaliser -retrait (m) 5 : vérifier-création-retrait (m) 6 : o:= créer-retrait ( c,m) 8: lier-retrait (o) 10 : afficher « Retrait effectué » Département info/IUT2 7: lier-compte (c) 9 : retirer (m) 26 Nouvelle-Opération-Bancaire Agent-Bancaire Agence « Agrégat-Produit » 1 : nouveau-compte (numcl, type, versement) cl : Client « Produit » c: Compte « Opération-Bancaire » 2 : cl := un-client? (numcl) 3 : état:= ton-état ? () 4 : [ état=OK] c := réaliser-compte (type, versementt) 5 : vérifier-création-compte (type,versementt) 6 : c:= créer-compte (cl, type, versement) 9: lier-compte(c) 7: lier-client (cl) 8: verser (versement) 10 : afficher « Compte ouvert » Département info/IUT2 27 Nouvelle-Opération-Bancaire Solution Modèle Acteur Nouvelle Opération Bancaire Accéder au produit Contrôler le produit Vérifier la création de l’opération Créer l’opération Prévenir l’acteur Département info/IUT2 28 Nouvelle-Opération-Bancaire Solution Modèle Agrégat-Produit Acteur 1: nouvelle-opération-produit (idp,valop) p: Produit o : Opération-Bancaire 2 : p := un-produit? ( idp) 3: état:= ton-état ? () 4 : [ état = OK ] o := réaliser-opération (valop) 5 : vérifier-création-opération (valop) 6: o:= créer-opération-bancaire (p, valop) 8: lier-opération-bancaire(o) 7 : lier-produit(p) 9 : afficher « Opération créée » Département info/IUT2 29 Nouvelle-Opération-Bancaire Patron « Nouvelle-Opération-Bancaire » Solution Modèle Agrégat-Produit nouvelle-opération-produit() un-produit?(): Produit 0..* Produit Opération-Bancaire ton-état? () 1 réaliser-opération ():Opération-Bancaire vérifier-création-opération (): Bool lier-opération-bancaire (o:Opération-Bancaire) Département info/IUT2 1..* créer-opération-bancaire(p:Produit,..) lier-produit(p:Produit) 30 Réutilisation dès l’expression des besoins Dépot Compte Retrait Compte Nouvelle Opération Bancaire client acteur Nouveau Compte Supprimer Compte Agent Bancaire Département info/IUT2 Supprimer Client Supprimer Opération Produit 31 Ingénierie des systèmes Imitation Imiter un patron = dupliquer et adapter les solutions modèles Adapter un duplicata de patron = (renommer | redéfinir | ajouter | supprimer)* des propriétés Département info/IUT2 32 Exemple d ’Imitation patron «Nouvelle-Opération-Bancaire» Agrégat-Produit nouvelle-opération-produit() un-produit? (): Produit 0..* Produit ton-état? () réaliser-opération ():Opération-Bancaire vérifier-création-opération (): Bool lier-opération-bancaire (o:Opération-Bancaire) 1 modèle «Nouveau-Compte» modèle «Retrait-Compte» Agence Banque nouveau-compte () un-client? () : Client retrait-compte() un-compte?() : Compte 1..* Opération Bancaire 0..* créer-opération-bancaire(p:Produit,..) lier-produit(p:Produit) Compte Client ton-état? () réaliser-compte ():Compte vérifier-création-compte ():Bool lier-compte (c:Compte) 1 Compte créer-compte (cl:Client,…) :Compte lier-client (cl : Client) verser () ton-état? () réaliser-retrait ():Retrait vérifier-création-retrait (): Bool lier-retrait (o:Retrait) retirer () 1 1..* Département info/IUT2 0..* 1..* Retrait créer-retrait (c:Compte,…) : Retrait lier-compte (c : Compte) 33 Ingénierie des systèmes Intégration d’imitation Intégrer des imitations = (unir)* les rôles des classes Union consiste à : - remplacer deux classes par une seule regroupant les propriétés des classes initiales ou - appliquer un patron Rôle Exemple : classe Compte Département info/IUT2 34 Exemple d ’Intégration Banque Agence retrait-compte() un-compte?() : Compte nouveau-compte () un-client? () : Client 0..* 0..* Compte Client ton-état? () réaliser-compte ():Compte vérifier-création-compte (): lier-compte (c:Compte) Département info/IUT2 Maintenance et Traçabilité ? 1 1..* créer-compte (cl:Client,…) lier-client (cl : Client) verser () ton-état? () réaliser-retrait ():Retrait vérifier-création-retrait lier-retrait (o:Retrait) retirer () Retrait 1 1..* créer-retrait (c:Compte,…) lier-compte (c : Compte) 35 Un système = une intégration d’imitations de patrons Compte Opération-Bancaire Produit Nouveau-Compte Retrait-Compte «Nouvelle-Opération-Bancaire» Agrégat-Produit Agence «Nouvelle-Opération-Bancaire» Produit Opération-Bancaire Agrégat-Produit Client Banque Département info/IUT2 Retrait 36 Un système = une intégration d’imitations de patrons Figure FigureChangeListener Composant Sujet Collègue concret Observateur Médiateur Composite Médiateur concret Observateur FigureChangeEventMulticaster Observateur concret Feuille Composite concret AttributeFigure Sujet concret CompositeFigure AbstractFigure StandardDrawing Gestionnaire concret Gestionnaire concret Gestionnaire concret RectangleFigure Gestionnaire Client Chaîne de responsabilité Département info/IUT2 37 Ingénierie des systèmes La structure générale d’un modèle de SI peut-elle être construite exclusivement par imitation et intégration de patrons sans ajouts de classes ou de liaisons ? OUI si : - si on reste au même niveau d’abstraction (usage du patron Rôle, des patrons de Gamma, etc.) - le catalogue de Patrons est complet Département info/IUT2 38 Complétude des catalogues de patrons Très difficilement vérifiable Plus facile pour un catalogue mono-domaine (SI bancaire, produit…) L’ingénierie des patrons passe par une analyse de domaine SI existants Ingénierie des Patrons Catalogue de patrons Ingénierie des SI Nouveau SI Analyse du domaine plus le catalogue est complet, plus les patrons sont liés les uns aux autres plus le processus d’ingénierie des SI est spécifié. Département info/IUT2 Cahier des charges utilisateurs 39 Nouvelle approche d’ingénierie Deux processus complémentaires - d’ingénierie des SI à partir de patrons (BY reuse) langage de patrons + opérations de bases Imitation, Intégration d’imitations - d’ingénierie des patrons (FOR reuse) systèmes existants, analyse de domaine + relations inter-patrons Alternative, Extension/Raffinement, Utilisation Département info/IUT2 40