introduction aux design patternsdept-info.labri.fr/~beurton/enseignement/design-pattern.pdf · mvc...

24
Introduction aux Design Patterns C’est un architecte C. Alexander a qui a développé l’idée d’identifier des objets apportant : “Une solution précise à problème donné, dans un context précis” Définir un pattern, c’est fournir le pourquoi et le comment de chaque solution. a “Timeless way of building”, 1979. Génie Logiciel – p.1

Upload: others

Post on 03-Jan-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Introduction aux Design Patterns

C’est un architecte C. Alexander a qui a développé l’idéed’identifier des objets apportant :“Une solution précise à problème donné, dans un context

précis”

� � � � � � � � � � �� � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �

� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �� � � � � � � � � � �

� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �� � � � � � � � � �

Définir un pattern, c’est fournir le pourquoi et lecomment de chaque solution.

a“Timeless way of building”, 1979.Génie Logiciel – p.1

Page 2: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Spécificité des “Design Patterns”

E. Gamma and R. Helmand and R. Johnson and J.Vlissides, 1995.Introduction du concept de patterns dans la modélisationobjet.

Décrire aussi les relations avec les autres objets dumodèle et les conséquences liées à leur utilisation.

Les patterns modélisent des objets qui n’existent pasen tant qu’entités dans le système cognitif humain.

Génie Logiciel – p.2

Page 3: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Bibliographie

The Design Patterns Java Companion James W.Cooperwww.patterndepot.com/put/8/JavaPatterns.htm

Object-Oriented Software Development Using Java Xiaoping Jia, Ph.D

se.cs.depaul.edu/Java/chap10.html

Génie Logiciel – p.3

Page 4: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Une parenthèse - Model View Controller

G. Krasner et S. Pope (1988) - A cookbook for usingthe modelview controller user interface paradigm inSmallTalk-80 - J. of OOP

Modèle des données : l’applicationReprésentation du modèle, ex : affichage à l’écranContrôle : définition du protocoleabonnement/souscription(subscribe/notify).Chaque fois que les données changent le modèleles notifie aux vues.

MVC découple vues et modèles pour accroître laflexibilité et la réutilisation. Un modèle peut bénéficierde plusieurs vues .

MVC permet également de modifier les réponses d’unobjet sans modifier sa vue en encapsulant cetteréponse dans un controller.

Génie Logiciel – p.4

Page 5: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Qu’est ce qu’un Design Pattern ?

Les Design Patterns (DP) sont des architectures declasses permettant d’apporter une solution à desproblèmes fréquemment rencontrés lors des phasesd’analyse et de conception d’applications.

Ces solutions sont facilement adaptables (doncréutilisables), elles sont utilisables sans aucun risquedans la grande majorité des langages deprogrammation orientés objet.

Génie Logiciel – p.5

Page 6: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Intérêt des Design Patterns

Avantages : les Design Patterns ont une architecturefacilement compréhensible et identifiables pour unprogrammeur (améliore la communication).

Objectifs : ne pas réinventer la roue

Remarque : Les Design Patterns ne sont donc pasvraiment une solution miracle pour les problèmes,mais ce sont plutôt des méthodes de résolutions.C’est comme une formule mathématique, c’est lasolution mais encore faut-il l’appliquer au bon momentavec les bonnes variables.

Génie Logiciel – p.6

Page 7: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Design Patterns : le catalogue

Ce travail a été initié dans la thèse de doctorat d’E.Gamma et finalisé par “The Gang of Four” dans unouvrage qui fait référence.

23 design patterns classifiés en 3 groupes d’aprèsleur rôle

Création Structuration Def. de Comportement

AbstractFactory Adapter, Bridge Interpreter, Command

Factory Composite, Chain of Responsability

Builder Facade, Proxy Iterator, Mediator,Template

Prototype Flyweight Memento, Observer

Singleton Decorator State, Strategy, Visitor

Génie Logiciel – p.7

Page 8: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Création d’objets

Exemple: SingletonUn singleton est une classe qui ne produit qu’uneseule instance, et cette dernière est accessible departout.Pour cela, il faut que la construction d’une nouvelleinstance grâce à l’opérateur new soit interdite.La solution est de rendre le constructeur de laclasse privée.Mais maintenant comment récupérer une instancede la classe ?

Génie Logiciel – p.8

Page 9: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Schéma UML

Génie Logiciel – p.9

Page 10: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Code Java

public class ClassicSingleton {

private static ClassicSingleton instance = null;

protected ClassicSingleton() {

// Exists only to defeat instantiation.

}

public static ClassicSingleton getInstance() {

if(instance == null) {

instance = new ClassicSingleton();

}

return instance;

}

}

Génie Logiciel – p.10

Page 11: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Création d’objets

Exemple: PrototypeLe prototype est le pattern qui va vous permettre decréer des copies exactes d’objets sans mêmeconnaître leurs types.C’est donc une extension du constructeur par copiepour pouvoir travailler avec du polymorphisme.Utilisation : génération automatique de classes etclonage d’objets.

Génie Logiciel – p.11

Page 12: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Schéma UML

Génie Logiciel – p.12

Page 13: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Autres paterns de création

Abstract Factory : création de familles d’objetsapparentés ou interdépendants (parfois équivalent àPrototype)

Builder : lorsque la création d’un objet est complexe etindépendante des parties qui compose l’objet -exemple : Convertisseur de texte.

Factory : permet de déléguer l’instanciation des objetsaux sous-classes - exemple : manipulateur de figure

Génie Logiciel – p.13

Page 14: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Design Pattern de Structure

Les Design Patterns de structure sont les patterns quiconcernent des problèmes d’assemblage d’objets etde structure de code.

Plutôt que de composer des interfaces et desimplémntations, ces Design Patterns décrivent lesmoyens de composer des objets pour réaliser denouvelles fonctionalités

Génie Logiciel – p.14

Page 15: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Composite

Objectif : représentation des structures d’arbres, oucomposition récursives.

Avantages : pouvoir traiter de la même manière unobjet ou une collection d’objets.

Génie Logiciel – p.15

Page 16: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Facade

Consiste à donner une interface unifiée et haut niveauà un sous-système composé de plusieurs interfaces etobjets aux interactions complexes.

Typiquement, la façade peut répondre à des requêtesde l’utilisateur en appelant des méthodes de diversobjet du sous-systême.

L’utilisateur appelle alors des méthodes de la façadesans se soucier du travail effectué par lesous-systême.

Génie Logiciel – p.16

Page 17: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Schéma UML

Génie Logiciel – p.17

Page 18: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Les autres Patterns de structuration

Bridge : découplage entre une abstraction et uneimplémentation. Exemple : création de fenêtreindépendemment de la plate-forme.

Adapter : convertit l’interface d’une classe en uneautre répondant aux attentes du client, soit parcomposition soit par héritage multiple.

Decorator : ajoute dynamiquement descaractéristiques (ou des comportements) à un objet(une classe). Exemple : attributs d’un windownmanager.

Génie Logiciel – p.18

Page 19: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Les autres Patterns de structuration

Proxy : intercepte les requêtes vers un objet etinstancie celui-ci quand il est réellement necéssaire.Exemple : affichage d’image et création de bitmaps.

Flyweight : objet partagé et sucesptible d’être utilisépar plusieurs contextes simultanément. Exemple lescaractères d’un texte.

Génie Logiciel – p.19

Page 20: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Design Patterns de Comportement

Deux groupes de patterns :

Les patterns orientés Classes qui utilisent les notionsd’héritage et de polymorphisme pour décrire desalgorithmes et des flux de traitements.

Template pattern et interpreter

Les patterns orientés Objets,décrivent les interactionsdans un groupe d’objets pour, par exemple effectuercertains traitements ne pouvant pas être effectués parun objet seul. Ils utilisent la composition.

Génie Logiciel – p.20

Page 21: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Observer

Permet de définir une dépendance entre plusieursobjets, telle que, lorsqu’un des objets (le sujet) changed’état (modification de certains de ses attributs), lesautres objets (observeurs) en soit avertisimmédiatement.

Utilisation : quand un objet doit faire de la notificationà d’autres sans faire d’hypothèse sur la nature de cesautres.

Exemple : des données qui sont visualisées dans untableur et sous forme graphique : diagramme,histogramme... Quand les données sont modifiéestoutes les représentations doivent en être informées,sans qu’on construise de dépendance entre cesclasses. Génie Logiciel – p.21

Page 22: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Schéma UML

Génie Logiciel – p.22

Page 23: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Un exemple : Visitor

Objectif : permet d’ajouter des traitements à uneclasse sans avoir à la modifier.Utilisation :

Les classes ElementA et ElementB dérivent de ElementAbstrait, on ajoutedes fonctionnalités spécifiques sans perdre l’avantage d’une interfacecommune bien définie et du polymorphisme.

Pas de modification des classes ElementA et ElementB mais création d’uneméthode virtuelle Accepter(Visiteur),

Le visiteur est l’objet qui va nous permettre d’effectuer les traitements.

Création d’une classe VisiteurAbstrait contenant deux méthodesvisiterElementA(ElementA) et visiterElementB(ElementB) et on peut ainsicréer des classes Visiteur dérivées qui redéfinissent ces méthodes.

Génie Logiciel – p.23

Page 24: Introduction aux Design Patternsdept-info.labri.fr/~beurton/Enseignement/Design-Pattern.pdf · MVC découple vues et modèles pour accroître la flexibilité et la réutilisation

Schéma UML

Génie Logiciel – p.24