Les principaux Design Patterns
Transcription
Les principaux Design Patterns
Les principaux Design Patterns Michaël Mrissa - [email protected] Michaël Mrissa - [email protected] Les principaux Design Patterns Rappel: bonnes pratiques de programmation Avant d’utiliser les design patterns. . . Il faut déjà avoir des réflexes pour faire de la “bonne” programmation Utilisation d’UML (Unified Modeling Language) Représentation abstraite orientée objet Diagrammes de classes (objets) Diagrammes de séquences (interactions entre objets) Optimisation (Refactoring) Savoir identifier les points communs dans le code Un exemple: la connexion à la base de données Séparation du code par bloc de fonctionnalié Tester son code Voir le framework Simpletest pour PHP Michaël Mrissa - [email protected] Les principaux Design Patterns Notion de Design Pattern: introduction Quelques informations générales Notion introduite en 1977 par Christopher Alexander dans le domaine de l’architecture Description de problèmes récurrents et des solutions associées Idée: Maximiser la réutilisation de connaissances existantes pour faciliter la résolution de problèmes Caractéristiques principales Différent d’une librairie, solution abstraite (pas de code) À personnaliser pour un problème donné Définition: Design pattern Technique abstraite de résolution d’un problème récurrent Michaël Mrissa - [email protected] Les principaux Design Patterns Notion de Design Pattern: introduction En trois mots un nom: intention du code en un mot un problème: domaine d’application une solution: implantation, avantages/inconvénients Notion d’inversion de contrôle... 3 Catégories de design patterns [GoF] De création: Abstract Factory, Builder, Factory Method, Prototype, Singleton Structuraux: Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy Comportementaux: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor Dans le domaine informatique, LA référence de base [GoF] E. Gamma, R. Helm, R. Johnson, J. Vlissides: Design Patterns: Elements of Reusable Object-oriented Software (1995) Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Abstract factory” en détails Problème On souhaite créer une instance d’une interface mais quand on écrit le code ⇒ on ne sait pas de quel type concret l’instance va être Ex: documents XML, bordures de fenêtre. . . Solution Fournit une interface pour la création d’objets d’une même famille en ignorant la classe concrète d’implémentation Figure: Abstract Factory Les principaux Design Patterns Michaël Mrissa - [email protected] Le pattern “Factory method” en détails Problème Le même que pour le pattern précédent Solution Mise en commun du code redondant, implémentation des différents constructeurs des classes concrètes Figure: Factory Method Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Decorator” en détails Problème: Limitations de la notion d’héritage ⇒ Changement d’un comportement après instanciation? ⇒ Extensions multiples d’une même classe? ⇒ Ajout d’une capacité seulement à certaines instances de la classe? Solution: Créer une classe apportant une réponse de fonctionnalité, comme le décorator Avantages Empêche l’explosion des sous-classes permet d’attribuer des capacités individuellement dynamiquement et de manière transparente Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Decorator” en détails Figure: Decorator Component (VisualComponent): interface commune aux objets associés aux decorators ConcreteComponent (TextView): l’objet auquel on attache les capacités du decorator Decorator: référence l’objet Component et définit l’interface des decorators conforme à l’interface commune ConcreteDecorator (BorderDecorator, ScrollDecorator): ajoute les capacités aux ConcreteComponents Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Composite” en détails Problème On souhaite créer des objets qui sont formés de plusieurs autres objets Ex: logiciel de dessin, ou de cuisine Solution On définit un objet composant qui est une interface pour tous les objets formant la composition On déclare une classe permettant de gérer les enfants (add, remove, etc.) Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Strategy” (détails vus en Génie Logiciel) Problème Plusieurs classes associées ont des comportements différents On cache l’organisation des classes de l’extérieur ou on propose un choix Ex: sort (plusieurs algos) Solution On définit une super classes qui englobe les classes associées Figure: Strategy Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Adapter” (détails vus en Génie Logiciel) Problème On veut rendre plusieurs classes existantes conformes à la même interface Il est coûteux de les redéfinir leurs interfaces pour les adapter à une interface commune Solution par héritage ou par composition l’adaptateur transmet les requêtes client de l’interface vers l’objet adapté implique que les fonctions manquantes soient implémentées pour répondre à l’interface Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Proxy” (détails vus en Génie Logiciel) Problème On veut référencer un objet en ajoutant des fonctionnalités Par exemple, de chargement, de sécurité (contrôle d’accès), de persistence, etc. Solution On utilise un proxy comme une copie de l’objet d’origine On accède au proxy, celui-ci effectue les opérations dynamiquement selon les demandes du client Ex: chargement de document avec images “lourdes” Figure: Proxy Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “Observer” (détails vus en Génie Logiciel) Problème ⇒ Identifier lorsqu’un objet change d’état Solution Une ou plusieurs classes “Observer” représentant les “clients” Une classe “Observable” représentant l’objet surveillé Un système d’inscription pour être notifié des changements Figure: Observer Michaël Mrissa - [email protected] Les principaux Design Patterns Le pattern “MVC” en détails Problème Séparation des problématiques pour les architectures Web Solution Model: Accès BD, Controller: logique métier, View: formatage du code Plus qu’un simple pattern, se situe au niveau architectural Figure: Le pattern MVC Michaël Mrissa - [email protected] Les principaux Design Patterns Conclusion Beaucoup de design patterns Plutôt orienté objet ⇒ mais tout à fait applicable en dehors du paradigme objet Cohérence générale “Contournement” des limitations de l’OOP Notion d’architecture (!!) dans le code Michaël Mrissa - [email protected] Les principaux Design Patterns