1 / 27

Design Patterns

Design Patterns. Cours IUT 7 mars 2001 Arnaud Nauwynck & Nédra Mellouli arnaud.nauwynck@socgen.com. Introduction. Thèse de Erich Gamma Edité en un livre Auteurs: E. Gamma, R. Helm, R. Johnson, J. Vlissides Livre devenu best-seller informatique Vision nouvelle(?) et incontournable. Plan.

blanca
Download Presentation

Design Patterns

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Design Patterns Cours IUT 7 mars 2001 Arnaud Nauwynck & Nédra Mellouli arnaud.nauwynck@socgen.com

  2. Introduction • Thèse de Erich Gamma • Edité en un livre • Auteurs: E. Gamma, R. Helm, R. Johnson, J. Vlissides • Livre devenu best-seller informatique • Vision nouvelle(?) et incontournable

  3. Plan • Orienté-Objet & Design Patterns • Généralités sur les Design Patterns • Étude de Cas • Utilisation & méthode d’apprentissage Conclusion

  4. Mots - clefs • Titre : Design Patterns • Catalogue de Modèles de conception réutilisables • Elements of Reusable Object-Oriented Software • Mots-clefs = architecture, organisation, rôles, simple, intelligible, éprouvé, flexible, concepts OO, modulaire, (ré)utilisable ...

  5. Objectifs / Positionnement • Pré requis • connaissance Orientée-Objet • Langage OO : C++ / Java.. • Concepts de Librairies • Buts • Concepts abstraits • Vocabulaire des concepts (complémentaire d’UML) • Nouvelle vision du monde du logiciel • Non – Buts • Pas liés à un langage précis • Pas un livre d’apprentissage, pas de recettes !

  6. L’Héritage en Orienté-Objets • 3 Façons de réutiliser les Objets • Héritages (d’interface / de code) • Composition • Templates (généricité de types..) • Héritage de code : souvent utilisé à tords • L’héritage d’interface : Light Motifs des Design Patterns

  7. Limitation d’une approche naïve de l’Orienté-Objets • Recensement « Merisien » des objets • Données, pas Interfaces ! • Objets fonctionnels seulement, Pas informatiques! • Héritage de code • forte corrélation classes / sous-classes.. • Traitements mélangés entre classes • Grande difficulté de compréhension • insuffisance des diagrammes de classes de UML

  8. Buts : Rôles des objets • Limitation des dépendances / connaissances entre objets • Introduction de dépendances dynamiques tardives (« late binding ») • Par opposition : suppression des dépendances à la compilation.. • Rôles des objets systématiquement épurés, et définis par des interfaces 1 rôle => 1 interface + délégation à 1 objet Possibilité de changement ouverte

  9. 23 Patterns / 3 classifications Des objets où, comment, pourquoi faire ?.. • Identification et rôles des objets et des relations • 1) Modèles Créateurs • Créer un objet / Accéder à un objet • 2) Modèles Structuraux • Combiner les objets en structures • 3) Modèles de Comportement • Utiliser les objets pour implanter des fonctionnalités

  10. Etude de cas : 5 Problèmes Concevoir l’architecture (classes en UML) d’un logiciel de dessin géométrique supportant les cercles, segments, groupes… Parties à clarifier : • Structure interne / Dessins des formes • Changements synchronisés • Groupes d’objets (Group / Ungroup) • Comportements de la souris, des menus contextuels • Conversions en multiples formats…

  11. Séparation Vue-Contrôleur Séparation Modèle-Contrôleur Contrôleur Vue Dessin Forme Vectoriel Pixel Cercle Segment Séparation Modèle-Vue!!! Pb 1/5 : MVC Vue - Contrôleur Modèle - • Fichiers / Représentations Internes / Vues / Interactions utilisateurs

  12. Dessin Vues Forme Vectoriel Pixel Cercle Segment Pb1/5 : MVC (Suite) : Contrôleur Traitements / GUI Contrôleur Traitements / GUI Notification, affichage Séparation Modèle-Vue!!!

  13. Dessin Vues Forme Vectoriel Pixel Cercle Segment Pb1/5 : MVC (Suite) Architecture 2 tiers Contrôleur Traitements Contrôleur GUI Requêtes actions évènements GUI Notification, affichage Séparation Modèle-Vue!!! Serveur Applicatif (serveur d’objets) Client Graphique (client léger)

  14. Dessin Vues Forme Vectoriel Pixel Cercle Segment Pb1/5 : MVC (Suite) Architecture 3 tiers Contrôleur DB Contrôleur Traitements Contrôleur GUI Requêtes Requêtes Persistence Sql, Xql.. Notification, affichage Serveur de Base de Données Serveur Applicatif Client Graphique (client léger)

  15. Pb2/5 : Publish & Subscribe • Notifications de changement 0..* listVues Vue SetSrcObject(o) Notify(chgEvent) Sujet Subscribe / addVueListener(v) Resign / removeVueListener(v) FireAll(chgEvent) { for_list(vue,v) v->Notify(chgEvent) } 0..1 srcObject

  16. Pb 2/5: Publish & Subscribe (Bis) • Indépendance des Vues pour l’Objet 0..* listVues VueAbstraite SetSrcObject(o) <<Abstract >>Notify(chgEvent) Forme addVueListener(v) removeVueListener(v) FireAll(chgEvent) 0..1 srcObject Vue1 Notify() { .. Draw1 } Vue2 Notify() { .. Draw2 }

  17. Pb2/5: Publish & Subscribe (Ter) Indépendance des Objets pour les Vues (cf. MVC) 0..* listVues SujetAbstrait addVueListener(v) removeVueListener(v) FireAll(chgEvent) <<abstract>>getXX() <<abstract>> getRenderer() VueAbstraite SetSrcObject(o) Notify(chgEvent) 0..1 srcObject Vue1 Vue2 Sujet1 getXX getRenderer Sujet2 getXX getRenderer

  18. 0..* Forme Sous-formes FormeComposite Cercles Segments Pb 3/5 : Composite.. • Group / Ungroup

  19. 0..1 forme sous-jacente Forme 0..* Sous-formes Proxy Cercles Segments Composite Pb3/5 : Composite, Proxy.. • Formes par procuration (Rotation, Iconifiée, En cours de chargement, etc..)

  20. Pb4/5 : Délégation, Chaîne de Responsabilité.. • Gestion de la souris, des évènements graphiques… GestionApplication Application Vue GestionVue GestionForme Formes GestionSegment Cercles Segments Menu Contextuel

  21. TraitementTypeFactory getTypeTraitement(name) TypeTraitement ..Factory.getSingleton() TypeConvertisseurPs createInstance TypeConvertisseurBmp Traitement Formes ConvertisseurPs ConvertisseurBmp Cercles Segments Pb 5/5 : Stratégie, Visiteur, Factory, Singleton… • Conversions Multiples, etc..

  22. Retour sur les 23 Patterns Les 23 Patterns se trouvent partout Sous formes réduites, déguisées, renommées… Lire des programmes … Savoir les reconnaître et comprendre l’architecture Ecrire : savoir en mettre partout (!!), en respectant les concepts

  23. Description des 23 Patterns ? / Réflexion de chacun !! • Découverte • Bon sens, mais c’est bien sûr.. • 1ère Lecture • Catalogue Universitaire ? • 1ère pratique • Je connais!.. Je vais réessayer pareil… • Oups.. Je dois relire quelques détails.. • 2ème lecture • C’est très fort • 2ème pratique • On les vois partout ! On en met partout !

  24. Liste des Patterns : Modèles créateurs (1/3) Fabrique Abstraite (Abstract Factory, Kit) Monteur (Builder) Fabrication (Factory method) Prototype Singleton

  25. Liste des Patterns : Modèles Structuraux (2/3) Adaptateur Pont Composite Décorateur Façade Poids Mouche Procuration (Proxy)

  26. Liste des Patterns : Modèles Comportementaux (3/3) • Observateur • État • Stratégie • Patron de méthode • Visiteur Chaîne de responsabilité Commande Interpréteur Itérateur Médiateur Mémento

  27. Conclusion Un livre à lire 2 fois 1 rôle => 1 interface + délégation à 1 objet Possibilité de changement ouverte La programmation devient tellement plus simple !

More Related