Design Patterns Cours IUT 7 mars 2001 Arnaud

  • Slides: 27
Download presentation
Design Patterns Cours IUT 7 mars 2001 Arnaud Nauwynck & Nédra Mellouli arnaud. nauwynck@socgen.

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.

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 2

Plan ® Orienté-Objet & Design Patterns ® Généralités sur les Design Patterns ® Étude

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

Mots - clefs ® Titre : Design Patterns ® Catalogue de Modèles de conception

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. . . 4

Objectifs / Positionnement ® Pré requis ® connaissance Orientée-Objet ® Langage OO : C++

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 ! 5

L’Héritage en Orienté-Objets ® 3 Façons de réutiliser les Objets ® Héritages (d’interface /

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 6

Limitation d’une approche naïve de l’Orienté-Objets ® Recensement « Merisien » des objets Données,

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 ® 7

Buts : Rôles des objets ® Limitation des dépendances / connaissances entre objets ®

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 8

23 Patterns / 3 classifications Des objets où, comment, pourquoi faire ? . .

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 9

Etude de cas : 5 Problèmes Concevoir l’architecture (classes en UML) d’un logiciel de

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 : 1. 2. 3. 4. 5. Structure interne / Dessins des formes Changements synchronisés Groupes d’objets (Group / Ungroup) Comportements de la souris, des menus contextuels Conversions en multiples formats… 10

Pb 1/5 : MVC Modèle - Vue - Contrôleur ® Fichiers / Représentations Internes

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

Pb 1/5 : MVC (Suite) : Contrôleur Traitements / GUI Dessin Notification, affichage Vues

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

Pb 1/5 : MVC (Suite) Architecture 2 tiers Contrôleur Traitements Requêtes Contrôleur GUI actions

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

Pb 1/5 : MVC (Suite) Architecture 3 tiers Contrôleur DB Requêtes Contrôleur Persistence Traitements

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

Pb 2/5 : Publish & Subscribe ® Notifications de changement Sujet 0. . *

Pb 2/5 : Publish & Subscribe ® Notifications de changement Sujet 0. . * list. Vues Subscribe / add. Vue. Listener(v) 0. . 1 src. Object Resign / remove. Vue. Listener(v) Fire. All(chg. Event) { for_list(vue, v) v->Notify(chg. Event) } Vue Set. Src. Object(o) Notify(chg. Event) 15

Pb 2/5: Publish & Subscribe (Bis) ® Indépendance des Vues pour l’Objet Forme 0.

Pb 2/5: Publish & Subscribe (Bis) ® Indépendance des Vues pour l’Objet Forme 0. . * list. Vues add. Vue. Listener(v) 0. . 1 src. Object remove. Vue. Listener(v) Fire. All(chg. Event) Vue. Abstraite Set. Src. Object(o) <<Abstract >> Notify(chg. Event) Vue 1 Vue 2 Notify() {. . Draw 1 } Notify() {. . Draw 2 } 16

Pb 2/5: Publish & Subscribe (Ter) Indépendance des Objets pour les Vues (cf. MVC)

Pb 2/5: Publish & Subscribe (Ter) Indépendance des Objets pour les Vues (cf. MVC) 0. . * list. Vues Sujet. Abstrait add. Vue. Listener(v) remove. Vue. Listener(v) Fire. All(chg. Event) <<abstract>> get. XX() <<abstract>> get. Renderer() 0. . 1 src. Object Sujet 1 Sujet 2 get. XX get. Renderer Vue. Abstraite Set. Src. Object(o) Notify(chg. Event) Vue 1 Vue 2 17

Pb 3/5 : Composite. . ® Group / Ungroup Forme Cercles 0. . *

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

Pb 3/5 : Composite, Proxy. . ® Formes par procuration (Rotation, Iconifiée, En cours

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

Pb 4/5 : Délégation, Chaîne de Responsabilité. . ® Gestion de la souris, des

Pb 4/5 : Délégation, Chaîne de Responsabilité. . ® Gestion de la souris, des évènements graphiques… Gestion. Application Vue Gestion. Formes Cercles Segments Gestion. Segment Menu Contextuel 20

Pb 5/5 : Stratégie, Visiteur, Factory, Singleton… ® Conversions Multiples, etc. . Traitement. Type.

Pb 5/5 : Stratégie, Visiteur, Factory, Singleton… ® Conversions Multiples, etc. . Traitement. Type. Factory get. Type. Traitement(name) . . Factory. get. Singleton() create. Instance Type. Traitement Type. Convertisseur. Ps Type. Convertisseur. Bmp Formes Cercles Segments Traitement Convertisseur. Ps Convertisseur. Bmp 21

Retour sur les 23 Patterns Les 23 Patterns se trouvent partout Sous formes réduites,

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 Þ

Description des 23 Patterns ? / Réflexion de chacun !! ® Découverte ® Bon

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 ! 23

Liste des Patterns : Modèles créateurs (1/3) ®Fabrique Abstraite (Abstract Factory, Kit) ®Monteur (Builder)

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

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

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

Liste des Patterns : Modèles Comportementaux (3/3) ®Chaîne de responsabilité ®Commande ®Interpréteur ®Itérateur ®Médiateur

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

Conclusion Un livre à lire 2 fois 1 rôle => 1 interface + délégation

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 !