J.M. Vanel Modèles de conception (design patterns)
Plan ● Motivation ● Définition ● Exemples ● A quoi servent les M.C. ? ● Classification
Motivation ● Démarrage d'un OS, d'un logiciel ● Jeux: séparer logique, stratégie, terrain ● Graphique: séparer algo.de tracé et et support de traçage ● Analyseur syntaxiques (parsers): séparer analyse et actions: évènements et traiteurs
Définition ● Tours de main exprimables en langages OO – Pouvoir d'expression de Java trop limité ==> besoin de Modèles de Conception ● Granularité moyenne ● Introduire de la souplesse – Découpler au maximum ce qui doit l'être – Propager les modifications
Exemples ● Observateur – Alias publication – abonnement, évènements – notification, MVC,... – Utilisations: EAI, IHM,... ● Variantes de délégation: décorateur, adapteur, état, stratégie, procuration, composite... ● Fabriques
Concepts ● Interface (abstraction) ● Encapsulation ● Héritage ● Délégation ● Enrober un comportement dans un objet ● Principe de Hollywood (alias callback, rappel)
Concept: Interface ● Alias abstraction (“virtuelles pures” en C++) ● = comportement pur sans aucune implémentation ● Contrat entre l'appelant et l'appelé ● Plus souple que les classes concrètes ● On devrait systématiquement déclarer ses objects en tant qu'interfaces ● faciles à manipuler avec eclipse
Concept: Encapsulation ● Les données (champs) doivent être privés sinon qq'un va ajouter des ingrédients dans votre plat pendant que vous le cuisinez ● Notion de propriété – getXX() setXX() – L'accesseur doit renvoyer un résultat immuable ● Une tendance des Patterns: encapsuler dans une classe ce qui est sujet à variations (cf tableau p.37)
Concept: Héritage ● On réutilise une implémentation en implémentant seulement le comportement spécifique ● Correspond à une classification (Camion “est un” Véhicule) ● Ne pas confondre avec l'agrégation (Camion “a un” Moteur)
Concept: Délégation ● Idée centrale de la majorité des Patterns ● réutilisation d'implémentation plus souple que l'héritage (on ne peut changer de père, mais d'ami oui) ● Typiquement le nom de la méthode du “donneur d'ordre” est le même que celui du délégué
Concept: Enrober un comportement dans un objet ● Remplace les pointeurs sur fonction en C/C++ ● Exemples: Commande, Stratégie
Concept: Principe de Hollywood ● alias callback, rappel ● Le code spécifique de l'application est appelé par un environnement d'exécution ● Exemples: Observateur, Visiteur
Délégation: modèle stratégie ● Le plus simple de tous les modèles basés sur la délégation
Délégation: Décorateur ● Alias emballage, lettre- enveloppe, wrapper ● Le décorateur a le même comportement que l'objet qu'il décore ● Il ajoute son comportement avant ou après celui de l'objet décoré
Délégation: autres modèles ● État; procuration;
Composite ● Le client peut traiter l'arbre comme la feuille ● Exemples: CAO, hiérarchie d'entreprise, traitement de texte, instruments financiers
Observateur ● Pour notifier des observateurs non prévus a priori des changements du sujet ● Les observateurs ne se connaissent pas entre eux, mais paraissent synchronisés
Fabriques Fabrique statique simple: Avant: TypeAbstrait obj = new Implementation(); Après: TypeAbstrait obj = Fabrique.createTypeAbstrait(); Fabrique abstraite: // une seule fois dans le programme: FabriqueAbstraite fab = new FabriqueConcrete1(); // Chaque fois que nécessaire: TypeAbstrait p = fab.createTypeAbstrait();
Nouveaux Modèles ● La fabrique poussée à l'extrême a donné naissance au moteur Spring; ● eclipse a lancé un nouveau modèle de conception, le point d'extension ● Gestionnaire d'instances (gère le cycle de vie); cf entity beans de EJB et sa classe Home
A quoi servent les M.C. ? ● Vocabulaire commun pour documenter les conceptions ● Pris en compte par des outils: – TogetherSoft, eclipse, PMD ● Source d'inspiration ● Aussi bien pour les objets métiers (ex.: composite pour CAO, instruments financiers) que pour les objets implémentation ● Briques de base recombinables
Classification ● Classification du gang des 4 (livre de Gamma et al.) : Attention! Plus sémantique que structurelle. – Modèles créateurs, structuraux, comportement ● Classification JMV – Appels indirects (variantes de délégation, observateur, etc), données (fabriques, composite, etc), archi. applicative(médiateur, façade, pont, adapteur, etc) ● Critères: nombre d'objets, actifs ou passifs, à état ou non, interface ou non, héritage ou délégation