Aucun titre de diapositive

publicité
Introduction aux patrons
D. Rieu
Dept Informatique, IUT2 Grenoble
[email protected]
Composants de différents niveaux
Expression des
besoins
Analyse (abstraction
du monde réel)
Nerson 92
Spécifications
Informelles
Modèle Objet
Descriptif & Normatif
Conception (solution
technique)
Modèle Objet
Effectif Normalise
Implantation
(solution
opérationnelle)
Département info/IUT2
Logiciel
2
Composants réutilisables

le composant logiciel ne suffit plus

toute une panoplie de modèles de composants
réutilisables
 Dédié à un niveau d’abstraction
 Capitalisant savoir / savoir-faire

Patron (Patterns) : un modèle consensuel ?
Département info/IUT2
3
Patron ?

Un patron constitue une base de savoir-faire pour résoudre
un problème récurrent dans un domaine particulier.

L’expression de ce savoir-faire :

permet d’identifier le problème à résoudre

propose une solution possible et correcte pour y répondre

offre les moyens d’adapter cette solution
Département info/IUT2
4
PATTERNité : l’architecture
C. Alexander : 253 patrons de conception architecturaux (64,77,79)
« Pattern #112 d’Alexander»
Nom : Transition d’entrée
Quoi : créer une transition du monde extérieur vers un univers intérieur, plus privé
Pourquoi : L’entrée dans un bâtiment influence la façon dont on va se sentir à
l’intérieur
Quand : systèmes d’accès et d’entrée pour les maisons, les cliniques, les magasins, etc.
Comment : Créer un espace de transition entre la rue et la porte d’entrée. Marquer le
cheminement dans l’espace de transition par un changement de lumière, un changement
de direction, etc.
Patterns en relation : vue Zen (#134), etc.
tiré de «Introduction aux patterns» Jean Bézivin
Département info/IUT2
5
D’autres domaines : l’hydraulique.
Ken Asplund en 1973
« Le volume d’eau en aval » (Downstream Water Volume )
Problème : Quand on détourne une partie des eaux d’une rivière, le volume d’eau dans
le drainage décroît, ce qui conduit à un affaiblissement des contributions de la rivière.
Contraintes : Il ne faut pas que le détournement d’une partie de la rivière pénalise
l’irrigation des cultures en aval ; la population ne doit pas souffrir de cette baisse du débit
des eaux ; l’impact écologique doit être limité au minimum.
Solution : Il faut maintenir le niveau des eaux en aval en ramenant un maximum d’eau
détournée vers son lit d’origine ; en traitant les eaux usées afin de les réintroduire en
aval ; en économisant les eaux d’irrigation en évitant les systèmes de pulvérisation ou de
brumisation.
Département info/IUT2
6
Définition
Un patron décrit à la fois un problème qui se produit très
fréquemment dans votre environnement et l’architecture de la
solution à ce problème de telle façon que vous puissiez utiliser cette
solution des milliers de fois sans jamais l’adapter deux fois de la
même manière.
C. Alexander
Décrire avec succès des types de solutions récurrentes
à des problèmes communs dans des types de situations
Département info/IUT2
7
Les patrons pour les SI
 Coad [Coad92]
Une abstraction d’un doublet, triplet ou d’un ensemble de classes qui peut être
réutilisé encore et encore pour le développement d’applications
 Appleton [Appleton97]
Une règle tripartite exprimant une relation entre un certain contexte, un certain
problème qui apparaît répétitivement dans ce contexte et une certaine configuration
logicielle qui permet la résolution de ce problème.
 Aarsten [Aarsten96]
Un groupe d’objets coopérants liés par des relations et des règles qui expriment
les liens entre un contexte, un problème de conception et sa solution.
Les patrons sont des composants logiques décrits indépendamment d’un langage donné
(solution exprimée par des modèles semi-formels)
Département info/IUT2
8
Historique
OOPSLA 87
Beck et Cunnimghan
Design Patterns : Element of Reusable
Object-Oriented Software
Gamma 95
OOPSLA 91, OOPSLA 92
Gamma et al. (GoF)
PLoP 94
Montibello
• Object Models: Strategies, Patterns and Applications
Coad 95
• Patterns Languages of Program Design
Coplien et Schmidt 95
EuroPLoP 96
Kloster
Pattern-Oriented Software Architecture: A System of Patterns. ChiliPLoP 98
Buschmann 96
Wickenburg
Analysis Patterns : Reusable Object Model
Fowler 97
Département info/IUT2
9
Patron « observateur » d ’E. Gamma
Intention : définir une interdépendance entre objets dépendants de
façon telle que, quand un objet change d’état, tous ceux qui en
dépendent en soit informés et automatiquement mis à jour.
Motivation :
3 observateurs
3 observateurs
1 sujet
x = 55
y = 97
Département info/IUT2
1 sujet
Est = 20,4
Ouest = 30,6
Nord = 45,9
60
40
20
0
GoF, 1995
10
Patron « observateur »
Structure et Collaborations
un-Observateur
Sujet
état_sujet
lire_etat ()
modifier_etat ()
notifier ()
lier (Observeur)
délier (Observeur)
1: modifier_état
1,n
Observateurs
Observateur
un-Sujet
un-autre-Observateur
2: notifier
état-obs.
3: mise_à_jour
mise_à_jour( )
return état_sujet
4: lire_état
4: mise_à_jour
5: lire_état
pour tout o de Observateurs
o.mise_à-jour ()
Département info/IUT2
11
Types de patrons / portée
Analyse
«métier commun»
«métier spécifique»
- Le problème traité
est issu d’une analyse
de domaine
- Aide à la
construction de
modèles objets
descriptifs
Gestion des ressources
Opérations Bancaires
Département info/IUT2
Conception
«architecture»
«conception»
- identifier, nommer
et abstraire des
thèmes récurrents de
la conception par
objet.
Implantation
« idiome »
Documentation
- comment implanter
dans un langage
particulier certains
traits absents de ce
langage
- technique de
dialogue, de
documentation,
d’enseignement,
etc.
- Aide à la
construction de
modèles objets
effectifs
Composite
Observateur
Blackboard
Simuler l’héritage
multiple en Java
Documenter un
framework
12
Patrons de Gamma : introduction
23 modèles de conception du «Gang of Four»
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
ORIGINES
• pratique de Smalltalk & C++
• conception et réalisation de frameworks (cadriciels)
• thèse d’Erich Gamma, Object-Oriented Software Development based on ET++ :
Design Patterns, Class Library, Tools, Institut für Informatik, Zurich, 1991.
• des conférences OOPSLA 91, 92, …
• Design Patterns - Elements of Reusable Object Oriented Software, Addison-Wesley,
1995. (existence d’une version française)
Département info/IUT2
13
Patrons de Gamma : formalisme
1- nom du patron et classification
2- intention : le problème à résoudre
3- alias : les patrons similaires dans d’autres langages de patrons
4- motivation : un scénario d’application du patron, les problèmes particuliers
5- indications d’utilisation : les situations dans lesquelles ce patron peut être utilisé
6- structure : une représentation graphique du patron utilisant la notation OMT
7- participants : les classes et/ou les objets participants et leurs responsabilités
8- collaborations : comment les participants collaborent
9- conséquences : décrit les résultats d’utilisation du patron
10- implantation : les astuces et les conseils d'implantation
11- exemples de code : fragments de code illustrant l’implantation du patron
12- utilisations remarquables : des exemples d’utilisations réelles de ce patron
13- modèles apparentés : d’autres patrons utilisés avec (ou par) celui-ci
Département info/IUT2
14

Formalismes des patrons
Narratif ou Structuré
P. Coad
Nom
Le patron
Un exemple
Indications
Diagramme
• Solution plus ou moins détaillée
• Liens inter-patrons
• Cas réels d’utilisation (framework)
Département info/IUT2
E. Gamma
Nom
Intention
Alias
Motivation
Indications d’utilisation
Structure
Participants
Collaborations
Conséquences
Implantation
Exemples de Code
Utilisations
Modèles Apparentés
Patron
15
Classification Gof
Fonction
Classe
héritage
Portée
Création
Structure
Délègue la
Décrit la manière
création des objets de composer les
aux sous-classes classes
Comportement
décrire des
algorithmes et des
flots de données
Factory Method
Interpreter
Adapter
Objet
Délègue la
Décrit la manière Décrit des protocoles
création d’objet à d’assembler des de coopérations entre
un autre objet
objets
objets pour accomplir
délégation
une tâche
Abstract Factory Composite
Observer
Département info/IUT2
Patron
16
Exemple : Factory Method
Nom : Factory Method , Classification : Creation - Classe
Alias : constructeur virtuel
Intention : Définit une interface pour créer des objets, mais laisse les sousclasses décider de la classe à instancier.
Motivation : Il s’agit permettre l’adaptation de classes abstraites de framework
qui bien que abstraites ont à créer des objets dans d’autres classes abstraites.
Application
Document
docs
MyDocument
Département info/IUT2
CreateDocument
NewDocument
MyApplication
CreateDocument
Patron
doc = self.CreateDocument
docs.inserer(doc)
doc.ouvrir
return new MyDocument()
17
Exemple : Factory Method
Structure
Creator
Product
ConcreteProduct
FactoryMethod
AnOpération
...
product = self. FactoryMethod
....
ConcreteCreator
FactoryMethod
return new ConcreteProduct()
Participants
Product : l’interface des objets créés par la «factory method»
ConcreteProduct : réalise l’interface
Creator : déclare la «factory method» et l’utilise pour manipuler des produits
ConcreteCreator : surcharge ou réalise la «factory method»
Département info/IUT2
Patron
18
Exemple : Composite
Nom : Composite, Classification : Structure - Objet
Intention : décrire des compositions récursives et permettre aux clients de traiter
des objets individuels ou des compositions d’objets uniformément.
Motivation : Dans les applications graphiques, par exemple les éditeurs
graphiques, le système autorise l’élaboration de figures composites à partir de
figures simples et prédéfinies mais aussi à partir de figures composites élaborées
précédemment.
Département info/IUT2
Patron
19
Exemple : Composite
Figure
un-Client
colorer ()
tracer ()
ajouter(fig)
supprimer(fig)
accéder ()
composant
uneFigure
uneFigure uneuneFigure
Composée Figure* Simple
1: colorer ()
2: colorer () 3:colorer ()
1,n
4: tracer ()
5: tracer ()
Cercle
colorer ()
tracer ()
Texte
colorer ()
tracer ()
FigureComposée
colorer () { }
tracer ()
ajouter(fig)
supprimer(fig)
accéder ()
Département info/IUT2
pour tout c de composants
c.colorer()
Patron
20
Exemple : Composite
Structure et Participants:
Client :
manipule les objets feuilles et
composites à travers
l’interface Composant
Composant:
définit l’interface commune
des objets.
Feuille :
définit le comportement des
objets simples.
Composite :
définit le comportement des
objets composites, réalise les
opérations de gestion des
composants.
Département info/IUT2
Composant
Client
Opérationspécifique ()
Ajouter(Composant)
Supprimer(Composant)
Accéder()
Feuille
Opérationspécifique ()
pour tout c de composants
c.operationspécifique
Patron
1,n
composant
Composite
Opérationspécifique ()
Ajouter(Composant)
Supprimer(Composant)
Accéder()
21
Exemple : Composite
Collaboration :
Les clients utilisent la classe Composant pour interagir avec les objets dans la structure
composée. S’il s’agit d’une feuille, la requête est prise en compte immédiatement. S’il s’agit
d’un composite, la requête est propagée à ses enfants.
Implantation :
 référence
aux enfants (composé -> composant) : ordre ? (Iterator)
 référence au père (composant -> composé) : Maj par le composé
 partage de composant (utilisation du Flyweight)
 interface commune ?

Produire une implantation par défaut en imaginant la migration des objets
(accéder pour une classe Feuille)
Département info/IUT2
Patron
22
Typologie des patrons
Patrons
nature
Patrons
Processus
Patrons
Produit
couverture
Patrons
Généraux
Patrons
de Domaine
portée
Patrons
D’Analyse
Département info/IUT2
Patrons
Conception
Patrons
D’Implantation
23
Nouvelle-Opération-Bancaire
 Nom : Nouvelle-Opération-Bancaire
 Problème : Permet de traiter uniformément les opérations
bancaires (création compte, prêt, retrait, dépôt, etc.) pour
faciliter la maintenance et l’évolution du système.
 Force : Uniformisation des traitements, Réutilisation dès
l’expression des besoins.
Département info/IUT2
24
Nouvelle-Opération-Bancaire
Cas d’application :
Retrait
Compte
Client
Agent
bancaire
Nouveau
Compte
Département info/IUT2
2 cas spécifiques
Accéder au compte
Contrôler le compte
Vérifier la création du retrait
Créer le retrait
Prévenir le client
Accéder au client
Contrôler le client
Vérifier la création du compte
Créer le compte
Prévenir l’agent
Cas général
Nouvelle
Opération
Bancaire
Acteur
Accéder au produit
Contrôler le produit
Vérifier la création de l’opération
Créer l’opération
Prévenir l’acteur
25
Nouvelle-Opération-Bancaire
Banque
« Agrégat-Produit »
Client
1: retrait-compte
(numc, m)
c : Compte
« Produit »
o: Retrait
« Opération-Bancaire »
2 : c:= un-compte? (numc)
3 : état:= ton-état ? ()
4 : [ état = non bloqué]
o:= réaliser -retrait (m)
5 : vérifier-création-retrait (m)
6 : o:= créer-retrait ( c,m)
8: lier-retrait (o)
10 : afficher « Retrait effectué »
Département info/IUT2
7: lier-compte
(c)
9 : retirer (m)
26
Nouvelle-Opération-Bancaire
Agent-Bancaire
Agence
« Agrégat-Produit »
1 : nouveau-compte
(numcl, type, versement)
cl : Client
« Produit »
c: Compte
« Opération-Bancaire »
2 : cl := un-client? (numcl)
3 : état:= ton-état ? ()
4 : [ état=OK]
c := réaliser-compte
(type, versementt)
5 : vérifier-création-compte
(type,versementt)
6 : c:= créer-compte
(cl, type, versement)
9: lier-compte(c)
7: lier-client (cl)
8: verser
(versement)
10 : afficher « Compte ouvert »
Département info/IUT2
27
Nouvelle-Opération-Bancaire
 Solution Modèle
Acteur
Nouvelle
Opération
Bancaire
Accéder au produit
Contrôler le produit
Vérifier la création de l’opération
Créer l’opération
Prévenir l’acteur
Département info/IUT2
28
Nouvelle-Opération-Bancaire
 Solution Modèle
Agrégat-Produit
Acteur
1: nouvelle-opération-produit
(idp,valop)
p: Produit
o : Opération-Bancaire
2 : p := un-produit? ( idp)
3: état:= ton-état ? ()
4 : [ état = OK ]
o := réaliser-opération
(valop)
5 : vérifier-création-opération
(valop)
6: o:= créer-opération-bancaire
(p, valop)
8: lier-opération-bancaire(o)
7 : lier-produit(p)
9 : afficher « Opération créée »
Département info/IUT2
29
Nouvelle-Opération-Bancaire
Patron « Nouvelle-Opération-Bancaire »
 Solution Modèle
Agrégat-Produit
nouvelle-opération-produit()
un-produit?(): Produit
0..*
Produit
Opération-Bancaire
ton-état? ()
1
réaliser-opération ():Opération-Bancaire
vérifier-création-opération (): Bool
lier-opération-bancaire (o:Opération-Bancaire)
Département info/IUT2
1..*
créer-opération-bancaire(p:Produit,..)
lier-produit(p:Produit)
30
Réutilisation dès l’expression des besoins
Dépot
Compte
Retrait
Compte
Nouvelle
Opération
Bancaire
client
acteur
Nouveau
Compte
Supprimer
Compte
Agent
Bancaire
Département info/IUT2
Supprimer
Client
Supprimer
Opération
Produit
31
Ingénierie des systèmes
 Imitation
Imiter un patron =
dupliquer et adapter les solutions modèles
Adapter un duplicata de patron =
(renommer | redéfinir | ajouter | supprimer)* des propriétés
Département info/IUT2
32
Exemple d ’Imitation
patron «Nouvelle-Opération-Bancaire»
Agrégat-Produit
nouvelle-opération-produit()
un-produit? (): Produit
0..*
Produit
ton-état? ()
réaliser-opération ():Opération-Bancaire
vérifier-création-opération ():
Bool
lier-opération-bancaire (o:Opération-Bancaire)
1
modèle «Nouveau-Compte»
modèle «Retrait-Compte»
Agence
Banque
nouveau-compte ()
un-client? () : Client
retrait-compte()
un-compte?() : Compte
1..*
Opération Bancaire
0..*
créer-opération-bancaire(p:Produit,..)
lier-produit(p:Produit)
Compte
Client
ton-état? ()
réaliser-compte ():Compte
vérifier-création-compte ():Bool
lier-compte (c:Compte)
1
Compte
créer-compte (cl:Client,…) :Compte
lier-client (cl : Client)
verser ()
ton-état? ()
réaliser-retrait ():Retrait
vérifier-création-retrait ():
Bool
lier-retrait (o:Retrait)
retirer ()
1
1..*
Département info/IUT2
0..*
1..*
Retrait
créer-retrait (c:Compte,…) : Retrait
lier-compte (c : Compte)
33
Ingénierie des systèmes
 Intégration d’imitation
Intégrer des imitations = (unir)* les rôles des classes
Union consiste à :
- remplacer deux classes par une seule
regroupant les propriétés des classes initiales ou
- appliquer un patron Rôle
Exemple : classe Compte
Département info/IUT2
34
Exemple d ’Intégration
Banque
Agence
retrait-compte()
un-compte?() : Compte
nouveau-compte ()
un-client? () : Client
0..*
0..*
Compte
Client
ton-état? ()
réaliser-compte ():Compte
vérifier-création-compte ():
lier-compte (c:Compte)
Département info/IUT2
Maintenance et
Traçabilité ?
1
1..*
créer-compte (cl:Client,…)
lier-client (cl : Client)
verser ()
ton-état? ()
réaliser-retrait ():Retrait
vérifier-création-retrait
lier-retrait (o:Retrait)
retirer ()
Retrait
1
1..* créer-retrait (c:Compte,…)
lier-compte (c : Compte)
35
Un système = une intégration d’imitations de patrons
Compte
Opération-Bancaire
Produit
Nouveau-Compte
Retrait-Compte
«Nouvelle-Opération-Bancaire»
Agrégat-Produit
Agence
«Nouvelle-Opération-Bancaire»
Produit
Opération-Bancaire
Agrégat-Produit
Client
Banque
Département info/IUT2
Retrait
36
Un système = une intégration d’imitations de patrons
Figure
FigureChangeListener
Composant
Sujet
Collègue concret
Observateur
Médiateur
Composite
Médiateur concret
Observateur
FigureChangeEventMulticaster
Observateur concret
Feuille
Composite concret
AttributeFigure
Sujet concret
CompositeFigure
AbstractFigure
StandardDrawing
Gestionnaire concret Gestionnaire concret
Gestionnaire concret
RectangleFigure
Gestionnaire
Client
Chaîne de responsabilité
Département info/IUT2
37
Ingénierie des systèmes
La structure générale d’un modèle de SI peut-elle être
construite exclusivement par imitation et intégration de
patrons sans ajouts de classes ou de liaisons ?
OUI si :
- si on reste au même niveau d’abstraction (usage du patron
Rôle, des patrons de Gamma, etc.)
- le catalogue de Patrons est complet
Département info/IUT2
38
Complétude des catalogues de patrons
Très difficilement vérifiable
Plus facile pour un catalogue mono-domaine (SI bancaire, produit…)
L’ingénierie des patrons passe par une analyse de domaine
SI
existants
Ingénierie des
Patrons
Catalogue de
patrons
Ingénierie des
SI
Nouveau SI
Analyse du
domaine
plus le catalogue est complet,
plus les patrons sont liés les uns aux autres
plus le processus d’ingénierie des SI est spécifié.
Département info/IUT2
Cahier des
charges
utilisateurs
39
Nouvelle approche d’ingénierie
Deux processus complémentaires
- d’ingénierie des SI à partir de patrons (BY reuse)
langage de patrons + opérations de bases
Imitation, Intégration d’imitations
- d’ingénierie des patrons (FOR reuse)
systèmes existants, analyse de domaine + relations inter-patrons
Alternative, Extension/Raffinement, Utilisation
Département info/IUT2
40
Téléchargement