0% ont trouvé ce document utile (0 vote)
125 vues42 pages

Inf5153 Grasp

Ce document présente les principes GRASP (General Responsibility Assignment Software Patterns) qui sont des patrons pour l'affectation des responsabilités dans la conception orientée objet. Il décrit plusieurs patrons comme Créateur, Expert en information, Faible couplage, Forte cohésion, Polymorphisme, Fabrication pure, Indirection, Protection des variations et Contrôleur.

Transféré par

Lancelot Normand
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
125 vues42 pages

Inf5153 Grasp

Ce document présente les principes GRASP (General Responsibility Assignment Software Patterns) qui sont des patrons pour l'affectation des responsabilités dans la conception orientée objet. Il décrit plusieurs patrons comme Créateur, Expert en information, Faible couplage, Forte cohésion, Polymorphisme, Fabrication pure, Indirection, Protection des variations et Contrôleur.

Transféré par

Lancelot Normand
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

INF5153 – Génie logiciel : conception

Patrons GRASP

Jacques Berger

© 2015-2023 Jacques Berger


Objectifs

Introduire des principes et patrons de base

© 2015-2023 Jacques Berger


Prérequis

Aucun

© 2015-2023 Jacques Berger


GRASP

General Responsibility Assignment Software


Patterns

© 2015-2023 Jacques Berger


Créateur

Nom anglais : Creator

Problème : Qui doit créer un objet A?

© 2015-2023 Jacques Berger


Créateur

Solution : La classe qui répond à un (ou plusieurs)


des critères suivants
1) contient (ou agrège) des objets A
2) enregistre des objets A
3) possède les données d'initialisation de A
4) utilise étroitement des objets A
Source : UML2 et les designs patterns (Craig Larman)

© 2015-2023 Jacques Berger


Créateur

Il est généralement reconnu que les contenants


créent les objets contenus

© 2015-2023 Jacques Berger


Expert en information

Nom anglais : Information Expert

Problème : Quel objet doit avoir une


responsabilité en particulier?

© 2015-2023 Jacques Berger


Expert en information

Solution : L'objet qui détient l'information requise


pour remplir cette responsabilité

© 2015-2023 Jacques Berger


Expert en information

Principe élémentaire de l'affectation de


responsabilités

© 2015-2023 Jacques Berger


Expert en information

Expert en information ne convient pas toujours

Il existe des cas où un autre objet serait mieux


placé pour effectuer une opération, pour ne pas
briser la cohésion de la classe

© 2015-2023 Jacques Berger


Faible couplage

Nom anglais : Low Coupling

Problème : Comment réduire l'impact des


modifications?

© 2015-2023 Jacques Berger


Faible couplage

Solution : Affecter les responsabilités de façon à


minimiser le couplage

© 2015-2023 Jacques Berger


Faible couplage

Sert à l'évaluation de solutions possibles

Devant plusieurs solutions, celle avec le moins de


couplage sera privilégiée

© 2015-2023 Jacques Berger


Faible couplage

Expert en information entraîne souvent un


couplage faible

© 2015-2023 Jacques Berger


Faible couplage

Un couplage fort à des objets stables ou


omniprésents est moins problématique

Ex. : API Java

© 2015-2023 Jacques Berger


Forte cohésion

Nom anglais : High Cohesion

Problème : Comment s'assurer que les objets


demeurent compréhensibles et simples, tout en
contribuant à diminuer le couplage?

© 2015-2023 Jacques Berger


Forte cohésion

Solution : Affecter les responsabilités de façon à


maximiser la cohésion

© 2015-2023 Jacques Berger


Forte cohésion

Sert à l'évaluation de solutions possibles

Devant plusieurs solutions, celle avec le plus de


cohésion sera privilégiée

© 2015-2023 Jacques Berger


Forte cohésion

Une faible cohésion peut parfois être justifiable

Ex. : performance, interface distante à forte


granularité (charge)

© 2015-2023 Jacques Berger


Polymorphisme

Nom anglais : Polymorphism

Problème : Comment gérer des alternatives


dépendantes des types?

© 2015-2023 Jacques Berger


Polymorphisme

Solution : Quand des fonctions ou des


comportements connexes varient en fonction du
type (classe), affectez les responsabilités – en
utilisant des opérations polymorphes – aux types
pour lesquels le comportement varie
Source : UML2 et les design patterns (Craig Larman)

© 2015-2023 Jacques Berger


Polymorphisme

Ne jamais tester le type d'un objet

Pas de condition sur les types pour changer le


comportement

© 2015-2023 Jacques Berger


Polymorphisme

Implique la présence d'interfaces

L'interface permet d'utiliser le polymorphisme


sans être coincé par une hiérarchie de classes

© 2015-2023 Jacques Berger


Polymorphisme

Il est facile d'ajouter des nouvelles


implémentations sans toucher les utilisations déjà
en place

© 2015-2023 Jacques Berger


Fabrication pure

Nom anglais : Pure Fabrication

Problème : Quel est l'objet qui doit être


responsable lorsqu'on ne veut pas transgresser
les principes de Faible couplage et Forte cohésion
mais que les solutions offertes par Expert en
information ne sont pas appropriées?
Source : UML2 et les design patterns (Craig Larman)

© 2015-2023 Jacques Berger


Fabrication pure

Solution : Créer une classe artificielle (non


présente dans le modèle du domaine), fortement
cohésive, qui contient les responsabilités
souhaitées

© 2015-2023 Jacques Berger


Fabrication pure

Préserve la cohésion

Augmente le potentiel de réutilisation

Attention : Abuser de ce patron fait exploser le


nombre de classes qui ne sont pas Experts, ce
qui augmente le couplage

© 2015-2023 Jacques Berger


Indirection

Nom anglais : Indirection

Problème : Comment éviter le couplage entre


deux objets?

© 2015-2023 Jacques Berger


Indirection

Solution : Ajouter un objet intermédiaire entre les


deux objets

L'intermédiaire crée une indirection entre les


objets

© 2015-2023 Jacques Berger


Indirection

Généralement motivé par un désir de Faible


Couplage

© 2015-2023 Jacques Berger


Protection des variations

Nom anglais : Protected Variations

Problème : Comment concevoir des objets pour


que leur instabilité n'ait pas d'impact sur les autres
objets?

© 2015-2023 Jacques Berger


Protection des variations

Solution : Identifier les points de variation ou


d'instabilité prévisibles. Affecter les
responsabilités pour créer une interface stable
autour d'eux.
Source : UML2 et les design patterns (Craig Larman)

© 2015-2023 Jacques Berger


Protection des variations

Concept ancien : masquage des informations

© 2015-2023 Jacques Berger


Contrôleur

Selon le principe de Séparation Modèle-Vue, les


objets de l'interface utilisateur ne doivent pas
contenir les objets du domaine

L'interface utilisateur doit déléguer le traitement


de la requête à la couche du domaine

© 2015-2023 Jacques Berger


Contrôleur

Nom anglais : Controller

Problème : Quel objet a la responsabilité de


recevoir les instructions de la couche
Présentation?

© 2015-2023 Jacques Berger


Contrôleur

Solution : Donner la responsabilité à un objet qui


représente le système ou qui représente un cas
d'utilisation

© 2015-2023 Jacques Berger


Contrôleur

L'objet Contrôleur reçoit les commandes de la


présentation et manipule les objets du domaine

© 2015-2023 Jacques Berger


Contrôleur

Potentiel de réutilisation plus élevé puisque la


logique d'affaires n'est pas manipulée par la
couche de présentation

© 2015-2023 Jacques Berger


Contrôleur
Un contrôleur avec trop de responsabilités
deviendra peu cohésif

Ex. :
Un seul contrôleur pour gérer tous les
événements

Le contrôleur effectue des tâches lui-même

Le contrôleur possède plusieurs attributs et de


la logique applicative
© 2015-2023 Jacques Berger
Contrôleur

Il est pertinent d'avoir plusieurs contrôleurs dans


un logiciel

On pourrait avoir un contrôleur par cas d'utilisation

© 2015-2023 Jacques Berger


Plus loin...

UML 2 et les design patterns, 3ème édition


Craig Larman
Pearson, 2005
Chapitres 16 et 22

© 2015-2023 Jacques Berger

Vous aimerez peut-être aussi