0% ont trouvé ce document utile (0 vote)
38 vues29 pages

Principes GRASP en conception logicielle

Transféré par

andryramariarison
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 PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
38 vues29 pages

Principes GRASP en conception logicielle

Transféré par

andryramariarison
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 PPTX, PDF, TXT ou lisez en ligne sur Scribd

Principes de

conception
GRASP
GRASP

 signifie General Responsibility Assignment Software


Patterns (ou Principles) pour Modèles de logiciels
d'attribution de responsabilités générales
 guides dans l’attribution des responsabilités aux objets
collaborateurs.
 9 patrons GRASP
 Creator (Créateur)
 Information Expert (Expert en information)
 Low Coupling (Couplage faible)
 Controller (Contrôleur)
 High Cohesion (Cohésion forte)
 Indirection (Indirection)
 Polymorphism (Polymorphisme)
 Protected Variations (Variantes protégées)

RESPONSABILITÉ

● La responsabilité peut être accompli par un seul objet


– ou un groupe d’objets accomplit en collaboration une
responsabilité.
● GRASP nous aide à décider quelle responsabilité doit
être attribuée à quel objet/classe.
● Identifiez les objets et les responsabilités du domaine
problématique, et identifiez également la manière dont
les objets interagissent les uns avec les autres.
● Définir un plan pour ces objets – c'est-à-dire une
classe avec des méthodes mettant en œuvre ces
responsabilités.
CREATOR

 Qui crée un objet ? Ou qui devrait créer une nouvelle


instance d’une classe ?

 L'objet « Conteneur » crée des objets « contenus ».

 Décidez qui peut être créateur en fonction de


l'association des objets et de leur interaction.
EXEMPLE DE CRÉATEUR

 Considérez un Magasin de Vidéos (VideoStore) et


aux Vidéos (Video) dans ce magasin.

 VideoStore a une association d'agrégation avec


Video c'est-à-dire que VideoStore est le conteneur et
Video est l'objet contenu.

 Ainsi, nous pouvons instancier un objet vidéo dans


la classe VideoStore
DIAGRAMME DE L’EXEMPLE
EXEMPLE DE CRÉATEUR
EXPERT

 Étant donné un objet o, quelles responsabilités peuvent être


assignées à o ?

 Le principe de l'expert dit : attribuez les responsabilités à o


pour lesquelles o dispose des informations nécessaires pour
assumer cette responsabilité.

 Ils disposent de toutes les informations nécessaires pour


effectuer des opérations ou, dans certains cas, ils collaborent
avec d'autres pour assumer leurs responsabilités.
EXEMPLE D’EXPERT

 Supposons que nous ayons besoin d'obtenir toutes les


vidéos d'un VideoStore.

 Puisque VideoStore connaît toutes les vidéos, nous


pouvons attribuer cette responsabilité de « donner
toutes les vidéos » à la classe VideoStore.

 VideoStore est l'expert en informations.


EXEMPLE D’EXPERT
EXEMPLE D’EXPERT
COUPLAGE FAIBLE

 Dans quelle mesure les objets sont-ils connectés les uns


aux autres ?
 Couplage – objet dépendant d'un autre objet.
 Lorsque l’élément principal change, cela affecte
également l’élément dépendant.
 Couplage faible – Comment pouvons-nous réduire l'impact
du changement de l’élément principal sur l’élément
dépendant.
 Préférez un couplage faible – attribuez des responsabilités
de manière à ce que le couplage reste faible.
 Minimise la dépendance, rendant ainsi le système
maintenable, efficace et le code réutilisable
COUPLAGE FAIBLE

 Deux éléments sont couplés, si

 Un élément a une association d'agrégation/composition avec


un autre élément.

 Un élément implémente/étend un autre élément.


EXEMPLE DE COUPLAGE
FAIBLE

ici, la classe RentVideo connaît à la fois les


objets VideoStore et Video. La location dépend
des deux classes.
EXEMPLE DE COUPLAGE
FAIBLE
Les classes VideoStore et Video sont couplées, et
RentVideo est couplé à VideoStore offrant ainsi
un couplage faible.
CONTRÔLEUR
 Traite la façon de déléguer la demande des objets de la
couche UI aux objets de la couche de domaine.

 Lorsqu'une requête provient d'un objet de la couche UI, le


modèle de contrôleur nous aide à déterminer quel est le
premier objet qui reçoit le message des objets de la couche
UI.

 Cet objet est appelé objet contrôleur qui reçoit la demande de


l'objet de la couche UI, puis contrôle/coordonne avec un autre
objet de la couche de domaine pour répondre à la demande.

 Il délègue le travail à d'autres classes et coordonne l'activité


globale.
CONTRÔLEUR

 Nous pouvons créer un objet comme contrôleur, si

 L'objet représente le système global (contrôleur de


façade)

 L’objet représente un cas d’utilisation, gérant une


séquence d’opérations (contrôleur de session).

 Avantages
 On peut réutiliser cette classe de contrôleur.
 Peut être utilisé pour maintenir l’état du cas d’utilisation.
 Peut contrôler la séquence des activités
EXEMPLE DE CONTRÔLEUR
CONTRÔLEURS GONFLÉS

 La classe du contrôleur est dite gonflée, si

 La classe est surchargée de trop de


responsabilités.

Solution – Ajouter plus de contrôleurs

 La classe contrôleur effectue également de


nombreuses tâches au lieu de déléguer à une
autre classe.

Solution – la classe contrôleur doit déléguer des choses


à d’autres.
FORTE COHÉSION
EXEMPLE DE FAIBLE
COHÉSION
EXEMPLE DE COHÉSION
FORTE
POLYMORPHISME

 Comment gérer les éléments liés mais variables en


fonction du type d'élément ?

 Le polymorphisme nous guide pour décider quel


objet est responsable de la gestion de ces différents
éléments.

 Avantages : gérer de nouvelles variantes deviendra


facile.
EXEMPLE DE
POLYMORPHISME
 getArea() varie selon le type de forme, nous attribuons
donc cette responsabilité aux sous-classes.

 En envoyant un message à l'objet Shape, un appel sera


effectué vers l'objet de sous-classe correspondant –
Cercle ou Triangle.
FABRICATION PURE

 Classe fabriquée/classe artificielle – attribue un ensemble de


responsabilités associées qui ne représentent aucun objet de
domaine.

 Fournit un ensemble d'activités très cohérent.

 Comportement décomposé – implémente un algorithme.


 Exemples : adaptateur, stratégie

 Avantages : Cohésion élevée, faible couplage et possibilité de


réutiliser cette classe.
EXEMPLE DE FABRICATION
PURE
 Supposons que nous ayons une classe Shape, si nous
devons stocker les données de forme dans une base de
données.

 Si nous mettons cette responsabilité dans la classe Shape,


il y aura de nombreuses opérations liées à la base de
données rendant ainsi Shape incohésive.

 Créez donc une classe DBStore fabriquée qui est chargée


d'effectuer toutes les opérations de base de données.

 De même, logInterface, responsable de la journalisation des


informations, est également un bon exemple pour Pure
Fabrication.
INDIRECTION

 Comment éviter un couplage direct entre deux ou plusieurs


éléments.

 L'indirection introduit une unité intermédiaire pour


communiquer entre les autres unités, de sorte que les autres
unités ne soient pas directement couplées.

 Avantages : faible couplage

 Exemple : Adaptateur, Façade, Observer


EXEMPLE D’INDIRECTION

 Ici, le polymorphisme illustre l'indirection


 La classe Employé fournit un niveau d’indirection
vers d'autres unités du système.
VARIANTE PROTÉGÉE

 Comment éviter l'impact des variations de certains


éléments sur les autres éléments.

 Il fournit une interface bien définie afin qu'il n'y ait


aucun effet sur les autres unités.

 Offre flexibilité et protection contre les variations.

 Fournit une conception plus structurée.


 Exemple : polymorphisme, encapsulation de données,
interfaces

Vous aimerez peut-être aussi