Daniel.Bardou et Julie Dugdale @upmf-grenoble.fr Génie Logiciel Génie Logiciel

Daniel.Bardou et Julie Dugdale @upmf-grenoble.fr Génie Logiciel Génie Logiciel Introduction au patrons de conception « Design patterns » Génie logiciel 6-2 Master ICA Sommaire Qu'est ce qu'un patron? Pourquoi les utiliser? Historique des patrons logiciels Types de patrons logiciels Types de patrons de conception Création, Structure, Comportement Un exemple de patron de comportement Templates de patron Avantages et désavantages d'utiliser des patrons Génie logiciel 6-3 Master ICA Qu'est ce qu'un patron de conception? L'utilisation actuelle vient des travaux de l'architecte Christopher Alexander Alexander a étudié les manières d'améliorer le processus de conception de bâtiments et des zones urbaines “Chaque patron est une règle en 3 parties, qui exprime une relation entre un certain contexte, un problème et une solution.” La définition habituelle d'un patron est : “Une solution à un problème dans un contexte.” Les patrons peuvent être utilisés dans de nombreux domaines différents, y compris le développement logiciel. Génie logiciel 6-4 Master ICA Pourquoi utiliser les patrons? "Concevoir un logiciel orienté-objet est difficile, et concevoir un logiciel orienté-objet réutilisable est encore plus difficile." - Erich Gamma Les concepteurs expérimentés réutilise des solutions qui ont fonctionné dans le passé Les systèmes orientés-objet bien structurés suivent des patrons récurrents pour les classes et objets Les patrons qui ont fonctionné dans le passé permettent d'être plus productif. Les conceptions qui en résultent sont plus flexibles et réutilisables. Génie logiciel 6-5 Master ICA Devenir un champion aux échecs Apprendre à développer un bon logiciel est similaire à apprendre à bien jouer aux échecs. D'abord apprendre les règles Par exemple le nom des pièces, les mouvements permis, la géométrie de l'échiquier, etc. Puis apprendre les principes Par exemple la valeur relative de certaines pièces, la valeur stratégique des emplacements centraux, etc. Cependant, pour devenir un champion aux échecs, il faut étudier le jeu d'autres champions Ces jeux contiennent des patrons qui doivent être compris, mémorisés, puis appliqués de manière répétée. Il y a des centaines de patrons Génie logiciel 6-6 Master ICA Devenir un champion du développement logiciel  D'abord apprendre les règles c.a.d. les algorithmes, les structures de données, UML, les langages de programmation, etc.  Puis apprendre les principes Par exemple la programmation structurée, la conception UML, la programmation orientée-objet, la programmation générique, etc.  Mais pour devenir un champion de la conception logicielle, il est important d'étudier la conception d'autres champions Ces conceptions contiennent des patrons qui doivent être compris, mémorisés, et appliqués de manière répétée.  Il y a des centaines de patrons Génie logiciel 6-7 Master ICA Historique des patrons logiciels 1987 - Cunningham et Beck utilisent les idées d'Alexander pour développer un petit langage de patrons pour Smalltalk 1990 – Le Gang des 4 (« Gang of Four » : Gamma, Helm, Johnson and Vlissides) commence à travailler à la compilation d'un catalogue de patrons de conceptions 1991 - Bruce Anderson donne le premier workshop de Patrons au OOPSLA 1993 - Kent Beck et Grady Booch sponsorisent la première réunion de ce qui est maintenant connu comme le groupe Hillside http://www.hillside.net/ 1995 - Le Gang des 4 (GoF) publie le livre des Patrons de conception Génie logiciel 6-8 Master ICA Types de patrons logiciels  Riehle et Zullighoven dans “Understanding and Using Patterns in Software Development” mentionnent trois types de patrons logiciels 1. Patrons conceptuels Patrons dont la forme est décrite par les termes et concepts du domaine d'application 2. Patrons de conception Patrons dont la forme est décrite par les éléments de construction de conception logicielle (par exemple objets, classes, héritage et aggrégats) 3. Patrons de programmation Patron dont la forme est décrite par les éléments de construction du langage de programmation Génie logiciel 6-9 Master ICA Gang des 4 – Patrons de conception Le premier livre sur les patrons de conceptions était : ‘Design Patterns’ par Erich Gamma, Richard Helm, Ralph Johnson, et John Vlissides’ - Connus comme le Gang des 4 (‘Gang of Four’) Les patrons de conception sont : « Descriptions d'objets et de classes communicantes qui sont adaptées à la résolution d'un problème général de conception dans un contexte particulier » Chaque patron de conception décrit un ensemble d'objets et de classes communicants. Génie logiciel 6-10 Master ICA Gang des 4 – Patrons de conception Dans leur livre, le Gang des 4 a défini 23 patrons de conception fondamentaux Les patrons sont regroupés en 3 catégories Génie logiciel 6-11 Master ICA Classification du GoF pour les patrons de conception  But – (les 3 types de patrons de conception) 1. Patrons de création Concernent le processus de la création d'objets Les patrons de création aident à créer des objets pour vous, au lieu d’avoir à instancier les objets directement. 2. Patrons de structure Concernent la composition de classes et d'objets Les patrons de structure aident à composer des groupes d’objets en des structures plus larges, telles que des interfaces utilisateur complexes. 3. Patrons de comportement Concernent l'interaction des classes et des objets Les patrons de comportement aident à définir la communication entre les objets du système et définir comment le flux est controlé. Génie logiciel 6-12 Master ICA Un exemple Un patron de comportement appelé ‘Chaine de responsabilité’ Le patron concerne la relation entre l'ensemble des objets et une requête. Le patron est utilisé quand plusieurs objets peuvent gérer une requête Le premier objet sur la chaine reçoit la requête : Il la résout ..ou la passe au prochain objet de la chaine Génie logiciel 6-13 Master ICA Chaine de responsabilité Les restaurants travaillent de cette manière : Un client ne passe pas une requête directement au chef A la place, un client passe une requête à un serveur, qui peut la passer à un sous-chef (chaine de responsabilité) Les participants à ce patron : client, un handler abstrait Des handlers concrets (fils du handler abstrait) Génie logiciel 6-14 Master ICA Chaine de responsabilité Le client initie une requête Si un 'handler concret' peut gérer la requête, il le fait Sinon, il la passe vers le prochain handler Client Handler handleRequest() HandlerConcret1 handleRequest() HandlerConcret2 handleRequest() Successeur La structure du patron de conception «chaine de responsabilité » Génie logiciel 6-15 Master ICA Chaine de responsabilité Idée : libérer un objet du besoin de savoir quel autre objet remplit sa requête Client Employé handleRequest() Serveur handleRequest() Sous-Chef handleRequest() Successeur Chef handleRequest() Le patron de conception de la 'chaine de responsabilité' appliqué au problème du restaurant Handler Concret Interface du handler abstrait pour gérer les requêtes Client: envoie une requête Association reflexive : possibilité que le handler implémente le successeur – pour trouver leurs propres successeurs (représenté comme classe d'association) Génie logiciel 6-16 Master ICA Un autre exemple où le patron de la chaine de responsabilité peut être utilisé Considérons un aide contextuelle pour une interface utilisateur graphique L'utilisateur clique sur le bouton d'aide La requête d'aide est gérée par l'un objet parmi plusieurs objets de l'interface utilisateur, mais quel sera cet objet dépend du contexte et de la spécificité de l'aide disponible. Le problème est que l'objet qui fournit l'aide n'est pas connu par l'objet qui demande de l'aide. Génie logiciel 6-17 Master ICA Chaine de responsabilité Utilisez la chaine de responsabilité quand : Plus d'un objet peut gérer une requête, et quel objet peut gérer une requête donnée n'est pas connu d'avance. Nous voulons passer une requête vers l'un de plusieurs objets sans spécifier le destinataire explicitement. L'ensemble des objets qui peuvent gérer une requête devrait être spécifié dynamiquement. Génie logiciel 6-18 Master ICA D'autres patrons... Génie logiciel 6-19 Master ICA Patrons de création Fabrique Une méthode dans une classe dérivée créé les instances associées  Fabrique abstraite Fabrique pour construire des objets liés  Monteur Fabrique pour construire des objets complexes de manière incrémentale  Prototype Fabrique pour cloner de nouvelles instances d'un prototype  Singleton Fabrique pour n'avoir qu'une seule et unique instance Génie logiciel 6-20 Master ICA Patrons de structure  Adaptateur Un traducteur qui adapte une interface de serveur pour un client  Pont Découpler l'interface d'une classe et son implémentation  Objet composite  Structure pour construire des aggrégats récursifs  Décorateur Etend un objet de manière transparente  Façade Façade simplifie l'interface pour un sous-système  Poids-mouche De nombreux objets partagés efficacement  Proxy Un objet est l'approximation d'un autre Génie logiciel 6-21 Master ICA Patrons de comportement  Chaine de responsabilité  Requête déléguée au fournisseur de service responsable  Commande  Requête comme objet de première classe  Interpréteur  Interpréteur de langage pour une petite grammaire  Itérateur  Eléments d'un agrégat sont atteints séquentiellement  Médiateur  Médiateur coordonnes les interactions entre ses associés  Memento  Une photo qui capture et restaure des états d'objets  Observateur  Les observateurs sont mis au courant des changements des observés  Etat  Object dont le comportement dépend de son état  Stratégie  Abstraction pour la sélection d'un parmi plusieurs algorithmes  Patron de méthode  Algorithme avec des pas fournit par une classe dérivée  Visiteur  Opérations appliquée aux éléments d'une structure uploads/Ingenierie_Lourd/ genie-logiciel.pdf

  • 31
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager