Vous êtes sur la page 1sur 11

Analyse et Conception

11. Les Patrons


de
Conception

© Petko Valtchev Université de Montréal Novembre 200 3 2

Patrons de COO Sommaire

"Affectation des responsabilités aux classes

"Notion de patron de conception

"Attributs de patron

"Patrons en UML

"Les patrons GRASP


" Expert

" Créateur (Creator)


" Faible Couplage (Low Coupling)
" Forte Cohésion (High Cohesion)

" Contrôleur (Controller)

© Petko Valtchev Université de Montréal Novembre 200 3 3

1
Patrons de COO Préoccupations en COO
La conception clarifie les interactions entre objets/classes et leurs
responsabilités respectives qui permettent de réaliser les besoins.
Les sujets principaux à considérer sont :

"La distribution des responsabilités entre classes de conception


(principes d’affectation, CRC):
" l’affectation des responsabilités débute lors de l’analyse,
" la clarification des responsabilités durant la conception permet
d’identifier les attributs et les méthodes des classes
"La réutilisation d’éléments de conception (patrons de conception
et cadres d’application)
" facilitela découverte de classes logiciel (avec leurs
responsabilités),
" peut fournir les détails d’une collaboration ou d’un sous-
ensemble de telle collaboration,
© Petko Valtchev Université de Montréal Novembre 200 3 4

Patrons de COO Les Responsabilités

« Responsabilité :
obligation/contrat assumé par une classe»

"Faire = l’objet :
" accomplit quelque chose lui-même,
" initie une action d’un autre objet,

" contrôle ou coordonne les activités de d’autres objets,

"Savoir = l’objet connaît :


" les données qu’il englobe (encapsule),
" les objets auxquels il est lié,

" les données qu’il peut dériver ou calculer.

© Petko Valtchev Université de Montréal Novembre 200 3 5

2
Patrons de COO Example, le Cadre MVC

Synchronise les modifications


dans le modèle et dans la vue.
:Contrôle

• Visualise le modèle,
• Gère les aspects graphiques
:Vue du fenêtrage,
• Intercepte les événements
graphiques.

:Modèle

Gère l’état du modèle.

© Petko Valtchev Université de Montréal Novembre 200 3 6

Patrons de COO La Réutilisation en COO

Plusieurs aspects de la conception sont des sources de difficultés:


" Identification des éléments du modèle (classes, associations et
autres relations),
" Description des méthodes de chaque classe,

" De plus, il est primordial de faire un compromis entre les besoins


actuels et la capacité d’évolution du modèle construit.

Cela motive la valorisation de l’expertise détenue par les


concepteurs chevronnés, c’est-à-dire les solutions éprouvées qu’ils
appliquent pour résoudre des problèmes de conception particuliers:
" les approches en question sont identifiées et clairement décrites,
" elles sont distribuées aux concepteurs apprentis qui les
appliquent directement au lieu de s’investir dans la recherche de
leurs propres solutions.

© Petko Valtchev Université de Montréal Novembre 200 3 7

3
Patrons de COO Patrons de Conception

« Patron de conception :
description identifiée d’un problème fréquent
de conception et de sa solution que l’on peut
appliquer dans des contextes nouveaux »

Gamma et al. [GAM95], proposent de décrire les patrons décrits à l’aide de :


l nom, intention,
l motivation, applicabilité,
l structure: classes/objets impliqués, collaborations entre éléments.

Dans l’ouvrage de référence, on retrouve également des précisions sur:


l conséquences de l’utilisation d’un patron,
l alternatives et compromis envisageables,
l implantations possibles,
l patrons reliés.

© Petko Valtchev Université de Montréal Novembre 200 3 8

Patrons de COO Patrons en UML

En UML, un patrons est modélisé par une collaboration qui


possède des aspects structuraux et comportementaux:

"elle réalise les mécanismes d’un système: CdU ou opérations,

"structure: modélisée à l’aide d’un diagramme de classes,

"comportement: modélisé à l’aide de diagrammes d’interaction,

La collaboration ne fait référence qu’à des éléments qui sont


déclarés ailleurs dans le modèle.

Visitor

© Petko Valtchev Université de Montréal Novembre 200 3 9

4
Patrons de COO Patrons : Structure

<<abstract>>
* Element
Client ObjectStructure
accept( v : Visitor )

<<abstract>>
Visitor

visitA( elt : ConcreteElementA ) ConcreteElementA ConcreteElementB


visitB( elt : ConcreteElementB )

accept( v : Visitor ) accept( v : Visitor )


operationA() operationB()

ConcreteVisitor1 ConcreteVisitor2
v.visitA( this ) v.visitB( this )
visitA( elt : ConcreteElementA ) visitA( elt : ConcreteElementA )
visitB( elt : ConcreteElementB ) visitB( elt : ConcreteElementB )

© Petko Valtchev Université de Montréal Novembre 200 3 10

Patrons de COO Patrons : Comportement


aStruct : elemA : elemB :
ObjectStructure ConcreteElementA ConcreteElementB v : Visitor

accept( v )
visitConcreteElementA( elemA )

operationA()

accept( v ) visitConcreteElementB( elemB )

operationB()

© Petko Valtchev Université de Montréal Novembre 200 3 11

5
Patrons de COO Patrons, la Diversité

Catégories de patrons en fonction des objectifs :

l Cadres d’application ou patrons architecturaux (styles)


l « Pipe and filter »
l « Publish/subscribe »
l Patrons d’affectation de responsabilité (GRASP)
l Expert
l Faible Couplage (« Low Coupling »)
l Patrons de conception de bas niveau
l Façade
l Composite

© Petko Valtchev Université de Montréal Novembre 200 3 12

Patrons de COO Les GRASP

Les patrons GRASP (General Responsability Assignment Software


Patterns) décrivent des principes fondamentaux d’affectation des
responsabilités à des objets.
l Expert: la responsabilité revient à l’objet « mieux placé »,
l Créateur: la responsabilité de la création d’un objet revient à un autre
objet qui est directement lié à l’objet créé,
l Faible couplage: les responsabilités affectées minimisent le couplage,
l Cohésion élevé: les responsabilités affectées maximisent la cohésion,
l Contrôleur: la responsabilité de la gestion des évènements du système
revient à une classe spécialisée du modèle.

La découverte des responsabilités se fait souvent durant la


construction des diagrammes d’interaction.

© Petko Valtchev Université de Montréal Novembre 200 3 13

6
Patrons de COO Fam. GRASP au Complet

Expert Creator Controller

Low High
Polymorphism
Coupling Cohesion

Law
Pure
Indirection of
Fabrication
Demeter

© Petko Valtchev Université de Montréal Novembre 200 3 14

Patrons de COO L’Example du POST

l L’example utilisé dans la présentation des patrons GRASP


représente un logiciel de pilotage d’une console de vente
avancée:
l Next Generation Point Of Sales Terminal (POST)
l Inspiré du livre de C. Larman ”Applying UML and Patterns”.

© Petko Valtchev Université de Montréal Novembre 200 3 15

7
Patrons de COO Le Patron Expert

l Intention = Affecter une responsabilité à la classe expert, c’est-à-dire


celle qui possède les informations nécessaires pour assumer la
responsabilité.

l Applicabilité = Un des patrons les plus utilisés en COO. Suit un


principe fondamental d’assignation de responsabilité qui se retrouve
dans la totalité des systèmes OO. Dans bien des cas, la prise en
charge d’une responsabilité nécessite la connaissance d’informations
distribuées sur plusieurs objets/classes. Cela conduit à l’identification
de plusieurs « experts partiels » qu’il serait nécessaire de faire
collaborer afin de remplir la responsabilité entière.

© Petko Valtchev Université de Montréal Novembre 200 3 16

Patrons de COO Expert, Exemple

Sale Qui est responsable du


date calcul du total d’une
time vente (commande)?

contains 6

1..*
SalesLineItem Product
described by Specification
* description
quantity
price
UPC

© Petko Valtchev Université de Montréal Novembre 200 3 17

8
Patrons de COO Expert, Exemple (suite)

l Le total est défini comme étant la somme des sous-totaux de chaque


ligne, c’est-à-dire chaque instance de SalesLineItem.

l L’objet vente (Sale) est le seul d’avoir accès à toutes les informations
pertinentes.

l Selon le patron Expert, Sale est la classe appropriée pour l’affectation


de la responsabilité calcul du total.

Mais ce n’est que


la moitié de la
total( ) :float solution !!!
:Sale

© Petko Valtchev Université de Montréal Novembre 200 3 18

Patrons de COO Exemple (suite)

l Comment est-ce qu’on obtient le sous-total correspondant à une


ligne (SalesLineItem)?
l La quantité fois le prix unitaire du produi (quantity * price)
l La quantité est connue par la ligne,

l Le prix est connu par le produit (ProductSpecification).

l Mais SalesLineItem connaît aussi son produit.

l DONC : SalesLineItem est l’expert!

© Petko Valtchev Université de Montréal Novembre 200 3 19

9
Patrons de COO Exemple (suite)
1: list := getSalesItems( ) : List of SalesLineItem

total( ) :float 2*: [for each] item := next()


:Sale

3*:subtotal := subtotal( ) : float

3.1: spec := getSpecification( ) :


ProductSpecification list:List of
item:SalesLineItem
SalesLineItem

3.2:amount := price( ) : float

spec:ProductSpecification

© Petko Valtchev Université de Montréal Novembre 200 3 20

Patrons de COO Exemple (fin)

Sale SalesLineItem Product


Specification
date quantity
time description
price
total() subtotal() UPC
price()

Classe Responsabilité

Sale Connaît ses lignes

SalesLineItem Connaît la quantité

Product
Connaît son prix
Specification

© Petko Valtchev Université de Montréal Novembre 200 3 21

10
Patrons de COO Les CRC de Sale

Sale Sale

Justification: Correspond au Responsab. Collab.


concept de ‘vente’. Connaît date SalesLineItem

Stéréotypes: Conteneur d’info, Connaît lignes


Fournisseur de services,
Calcule prix total
Patrons: Expert

© Petko Valtchev Université de Montréal Novembre 200 3 22

Patrons de COO Expert, les Retombées

l Favorise l’encapsulation, puisque les objets utilisent au


maximum leurs propres informations pour assumer la
responsabilité.

l Supporte un couplage faible entre les classes, ce qui mène à


des systèmes plus robustes et plus faciles à maintenir,

l Distribue le comportement parmi les classes qui possèdent les


informations nécessaires: ce qui encourage des définitions de
classes plus cohérentes et plus faciles à comprendre.

© Petko Valtchev Université de Montréal Novembre 200 3 23

11

Vous aimerez peut-être aussi