Vous êtes sur la page 1sur 50

Patrons de Conception (Design Patterns)

Introduction

Ada Diaconescu

Motivation

Il est difficile de dvelopper des logiciels efficaces, robustes, extensibles et rutilisables Il est essentiel de comprendre les techniques bien prouves, qui ont dj montr leur capacit rsoudre des problmes de dveloppement rcurrents

Les Patrons de Conception ( Design Patterns ) sont des canevas ( frameworks ) qui aident saisir, spcifier et mettre en uvre ces techniques prouves
2 Ada Diaconescu

Observations

Les dveloppeurs de logiciel se confrontent des problmes qui sont largement indpendants de lapplication elle mme

Ex: logiciel rparti problmes de communication, tolrance aux fautes, gestion de la concurrence, initialisation de services

Les bons dveloppeurs rsolvent ces problmes en sappuyant sur les patrons de conception appropris Par contre, ces patrons de conception ont t traditionnellement :

Implicites dans les connaissances des experts Mlangs avec le code source des applications

Ada Diaconescu

Dfinition

Patron /modle /motif de conception (design pattern) :

une solution rutilisable un problme rcurrent de conception logiciel, dans un certain contexte

la documentation dune exprience de conception valide par la spcification dune architecture rutilisable
un concept de gnie logiciel, associ (la plupart du temps) avec la programmation oriente objet

Ada Diaconescu

Utilit

Aide au dveloppement de logiciels par la rutilisation de lexprience collective des ingnieurs expriments en informatique Aide promouvoir les bonnes pratiques de conception, en capturant les expriences existantes et bien valides en dveloppement logiciel Aide la gestion de la complexit du logiciel Facilite la communication entre les dveloppeurs
5 Ada Diaconescu

Historique

Les patrons de conception

Tirent leur origine des travaux de l'architecte Christopher Alexander dans les annes 70 Formaliss pour la premire fois en 1995 dans le livre du Gang of Four (GoF)

GoF : Erich Gamma, Richard Helm, Ralph Johnson et John Vlissides Design Patterns - Elements of Reusable Object-Oriented Software

Ada Diaconescu

Constitution

Un patron de conception est dfini par:


un Contexte : une situation qui engendre le problme un Problme : le problme rcurrent qui apparat dans ce contexte une Solution : une rsolution valide du problme

Le patron de conception extrait les aspects statiques et dynamiques de la structure et de la coopration entre les participants cls de la conception dapplication

Ada Diaconescu

Sommaire

Proxy Usine ( Factory ) Adaptateur ( Adapter ) Intercepteur ( Interceptor )

Chane de Responsabilits ( Chain of Responsibility )

Ada Diaconescu

Une trs brve introduction UML


Unified Modelling Language Spcification de lOMG (Object Management Group) Langage standard de modlisation dapplications objets:

Structure, comportement, architecture, processus mtier, structures de donnes, Diagramme de cas dutilisation Diagramme de classes Diagramme de squence Diagramme dactivits Diagramme dtat ...

Plusieurs notations pour plusieurs diagrammes / modles:


Ada Diaconescu

Diagramme de classes

Modlise la structure statique de lapplication:

Les classes et les relations entre les classes

Qui interagit avec qui? (mais pas comment)


association nom de la classe

classe abstraite

gnralisation

attributs de la classe
mthodes de la classe

multiplicit (dune extrmit dune association)


> association : une instance dune classe doit connatre une instance de lautre classe > gnralisation : un lien dhritage une classe est la super classe de lautre > multiplicit : le nombre dinstances de la classe qui peuvent tre associs avec une instance de lautre classe 10 Ada Diaconescu

Diagramme de squence

Modlise le comportement dynamique de lapplication :

Les objets et les interactions entre les objets

Quels messages sont changs et quand?


objet message

Les messages sont ordonns par rapport au temps


cration dobjet

message barre dactivation


ligne de vie ( lifeline )

destruction dobjet
11 Ada Diaconescu

Proxy

Offre un substitut ou reprsentant dun autre objet, afin de contrler laccs cet objet

12

Ada Diaconescu

Proxy

Exemples

Proxy distant

Est le reprsentant local dun objet situ dans un autre espace dadressage Ex: le Stub de RMI, CORBA, Java EE, .NET,

Proxy virtuel

Cre des objets coteux la demande (lazy loading, caching, ) Ex: reporter la cration dun client email jusqu la premire utilisation Ex: utiliser un cache local dimages Contrle laccs au composant (plusieurs droits daccs sont possibles) Ex: Serveur dApplication le traitement dune requte client nest pas dmarr si les droits daccs du client sont insuffisants
13 Ada Diaconescu

Proxy de protection

Proxy

Contexte

Le client a besoin daccder aux services dun autre composant (ex. objet, base de donnes, page html ou image) Laccs direct est possible du point de vue technique mais sans tre la meilleure solution Laccs direct un composant nest souvent pas pratique des procdures additionnelles de contrle sont ncessaires (ex. authentification, localisation) Le code client doit rester simple et laccs aux composants transparent et efficace

Problme

Solution

Le client communique avec le reprsentant (proxy) plutt quavec le composant Le proxy offre linterface du composant mais excute des procdures additionnelles avant (pre) et aprs (post) linvocation du composant
14 Ada Diaconescu

Proxy

Diagramme de classes UML

15

Ada Diaconescu

Proxy

Rles

Proxy

Offre aux clients linterface de lOriginal Assure laccs scuris, efficace et correct lOriginal
Dfinit linterface (ou la classe de base) pour lOriginal et le Proxy Ainsi, le Proxy peut tre utilis tout endroit o lOriginal est attendu

AbstractOriginal

Original

Implmente les services dcrits dans lAbstractOriginal Dfinit lobjet rel reprsent par le Proxy
Utilise linterface du Proxy pour requrir les services de lOriginal
16 Ada Diaconescu

Client

Proxy

Diagramme de squence UML

17

Ada Diaconescu

Mthode Usine ( Factory Method )

Fournir une interface pour la cration dun objet, mais laisser les sous-classes dcider quelle classe instancier Dlguer l'instanciation aux sous-classes

18

Ada Diaconescu

Usine ( Factory )

Exemples :

Crer et utiliser des Connecteurs pour communiquer avec les objets distants, en utilisant diffrents intergiciels (ex : Sockets, RMI ou CORBA) Crer et utiliser des gestionnaires de sauvegarde sans savoir lavance si le gestionnaire utilis sera bas sur un systme de fichiers ou une base de donnes

19

Ada Diaconescu

Usine ( Factory )

Contexte

Un des buts de lorientation objet est de dlguer la responsabilit du traitement des requtes entre plusieurs objets Parfois, une application ne peut pas anticiper la classe concrte dobjet quelle doit instancier (seulement linterface ou la classe abstraite)

Problme

Solution

Dfinir une interface pour crer des objets dun certain type mais laisser les sous-classes dcider quel sous-type de classe concrte instancier
20 Ada Diaconescu

Usine ( Factory )

Diagramme de classes UML

21

Ada Diaconescu

Usine ( Factory )

Rles

Product Interface

Dfinit linterface des objets cres par lUsine Implante linterface Product Dfinit la mthode de cration qui retourne un objet de type Product Cre une instance dun ConcreteProduct

ConcreteProduct Classe Concrte

Factory Interface

ConcreteFactory Classe Concrte

22

Ada Diaconescu

Usine ( Factory )

Diagramme de squence UML

cration objet

utilisation objet

destruction objet (optionnel)

23

Ada Diaconescu

Adaptateur

Transforme linterface dune classe en une autre interface, connue par les clients

24

Ada Diaconescu

Adaptateur

Exemple

Adaptation des logiciels legacy pour lintgration dans des nouveaux systmes Intgration des systmes htrognes

CORBA - Portable Object Adapters (POA) Java Connector Architecture (JCA) Resource Adapters

25

Ada Diaconescu

Adaptateur

Contexte

Un service est dfini par une interface; les clients appellent le service via cette interface; les servants implantent linterface Rutiliser un servant qui implante une interface non-conforme linterface attendue par les clients

Problme

Solution

Introduire un composant (adapter ou wrapper) reprsentant une couche de transformation entre les clients et le servant Ladapter intercepte les requtes et rponses du servant et les adapte de faon les rendre conformes avec linterface attendue
26 Ada Diaconescu

Adaptateur

Diagramme de classes UML

27

Ada Diaconescu

Adaptateur

Rles

Target - Interface

Dfinit linterface utilise par les clients Utilise des objets conformes linterface Target Dfinit une interface existante qui exige une adaptation Adapte linterface dAdaptee linterface Target

Client

Adaptee

Adapter

28

Ada Diaconescu

Adaptateur

Diagramme de squence UML


Interface standard

Interface spcialise (non-conforme)

29

Ada Diaconescu

Intercepteur
Permet linsertion transparente de services dans un canevas et lactivation automatique de ces services lors de loccurrence de certains vnements.

30

Ada Diaconescu

Intercepteur

Exemple

Surveiller le fonctionnement dune application Remplacer un service de scurit par un autre Utiliser ou dsactiver un service de journalisation (Logging)

CORBA Portable Interceptors Aspect-Oriented Programming (AOP)

31

Ada Diaconescu

Intercepteur

Contexte

Dveloppement de canevas extensibles de faon transparente Certains canevas ne peuvent pas anticiper tous les services quils doivent offrir aux clients => permettre lintgration de nouveaux services sans avoir besoin de modifier larchitecture de base Lintgration de nouveaux services ne doit pas affecter les services existants

Problme

Solution

Permettre lextension transparente dun canevas par lenregistrement des services via des interfaces prdfinies Permettre au canevas de dclencher automatiquement lexcution de ces services lors de loccurrence de certains vnements Dfinir des objets contexte qui permettent la transmission de ltat interne du canevas aux services
32 Ada Diaconescu

Intercepteur

Diagramme de classes UML (simplifi)

33

Ada Diaconescu

Intercepteur

Rles

Interceptor Interface

Dfinit les mthodes de services dinterception (appeles automatiquement lors de loccurrence de certains vnements)
Implante un certain service dinterception Utilise lobjet Context pour connatre son contexte dexcution Permet lenregistrement et le retrait dIntercepteurs Distribue les appels de mthodes vers les Intercepteurs enregistrs, lors de loccurrence dvnements Permet aux services dobtenir des informations sur (ou de modifier) leur contexte dexcution
34 Ada Diaconescu

ConcreteInterceptor Classe Concrte


Dispatcher Classe Concrte


Context Classe Concrte

Intercepteur

Dynamique
ConcreteInterceptor1

Application
Dispatcher
ConcreteInterceptor2

vnement1

vnement 2

ConcreteInterceptor3

35

Ada Diaconescu

Intercepteur

Diagramme de squence UML

36

Ada Diaconescu

Chane de Responsabilits

Eviter le couplage entre lexpditeur dune requte et son destinataire en donnant plusieurs objets la possibilit de traiter la requte. Chaner les objets traitants et faire passer la requte travers ces objets jusqu ce quelle soit traite.

37

Ada Diaconescu

Chane de Responsabilits

Exemple - transformer le format dun document


Faire passer le document initial via plusieurs filtres afin dobtenir le document dans le format final Chaque filtre excute certaines transformations sur le document entrant et produit un nouveau fichier sortant Un nouveau filtre peut tre facilement insr dans la chane

Exemple systme de scurit

Plusieurs critres possibles pour autoriser laccs Les critres peuvent changer selon la configuration donne

38

Ada Diaconescu

Chane de Responsabilits

Contexte

Le systme doit traiter une requte La requte peut tre traite de plusieurs faons (par plusieurs objets) Diffrents objets peuvent traiter une requte et on ne sait pas a priori lequel L'ensemble des objets pouvant traiter une requte doit tre facilement modifiable
Isoler les diffrents parties dun traitement dans diffrents objets Faire passer la requte via une chane dobjets (maillons) Chaque maillon peut traiter la requte et/ou la faire passer au maillon suivant
39 Ada Diaconescu

Problme

Solution

Chane de Responsabilits

Diagramme de classes UML

40

Ada Diaconescu

Chane de Responsabilits

Rles

Handler (Maillon) classe abstraite


Dfinit linterface dun maillon de la chane Implante la gestion de la succession des maillons

ConcreteHandler sous-classe concrte

Dfinit le comportement dun maillon de la chane A la responsabilit dune partie dun traitement de requte
Appelle le premier maillon dans la chane

Client

41

Ada Diaconescu

Bibliographie

Design Patterns - Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides POSA 1 - Pattern-Oriented Software Architecture A System of Patterns,Vol. 1, Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerland, Michael Stal

POSA 2 - Pattern-Oriented Software Architecture Patterns for oncurrent and Networked Objects, Vol. 2, Douglas Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann
POSA 3, POSA 4, POSA 5,

42

Ada Diaconescu

Cas dtude

Simulation dun serveur dapplication lmentaire

http://infres.enst.fr/~diacones/tp-patterns

43

Ada Diaconescu

Objectif

Simulation dun serveur dapplication lmentaire


Chaque objet est gr par un conteneur ( container ) Un conteneur peut utiliser plusieurs services non-fonctionnels (ex: scurit, journalisation ou supervision)

Vue gnrale d'un containeur

44

Ada Diaconescu

Dfis

Lutilisation du conteneur et des services nonfonctionnels doit rester transparente aux clients Les services utiliss par le conteneur doivent pouvoir tre changs souvent et facilement

Insertion, modification ou retrait des services Changement de lordre dexcution des services

45

Ada Diaconescu

Cas dapplication

Magasin (rutilisation de lapplication du TP RMI)

un client interroge plusieurs magasins (GerantMagasin) sur le prix dun certain produit (ou ingrdient) afin de dterminer le magasin le moins cher (par rapport au produit)

Hbergement d'un objet GerantMagasin dans un container

46

Ada Diaconescu

Conception (1)

Combinaison de trois patrons de conception

Chane de Responsabilit

Chaque appel dune mthode du Magasin passe par une chane de maillons (proxies) Ex: Un maillon pour le service de scurit, un maillon pour la journalisation et un pour la supervision Le container, ainsi que chaque maillon de la chane dinterception implantent linterface Magasin la mme interface implante par le GerantMagasin Chaque service non-fonctionnel est implant par un intercepteur Chaque maillon joue le rle dun Dispatcher pour un certain type dintercepteur
47 Ada Diaconescu

Proxy

Intercepteur

Conception (2)

Conception du container du GerantMagasin

48

Ada Diaconescu

Implantation

Squelette du code source disponible


www.infres.enst.fr/~diacones/tp-patterns/interceptor-tp-Project.zip Code de lapplication Magasin:


Rutilisation du code du TP RMI (mises jour mineures) Paquet shop Paquet container

Code du conteneur et des services

49

Ada Diaconescu

Travaux Pratiques
1. Reconfiguration du serveur

Utilisation dun fichier de configuration Modification de lauthentification client Modification du service de scurit Dveloppement des services de supervision et de journalisation Transmission de paramtres par le Context du container Implantation et introduction dun nouveau service non-fonctionnel
50 Ada Diaconescu

2. Utilisation du service de scurit

3. Implantation des services dinterception


4. Extension de la chane dinterception