Julie Vachon, Hiver 2006
IFT2251 : Génie logiciel
Chapitre 4. Analyse orientée objets Section 7. Diagramme de collaboration
Chap.4, Sect.7, p.2 Copyrights Julie Vachon, 2006
Diagramme de collaboration
1.
Introduction
2.
Collaboration – partie statique
3.
Collaboration – partie dynamique
4.
Modes d’interaction
5.
Création et destruction dynamiques
6.
Notation utilisée
Chap.4, Sect.7, p.3 Copyrights Julie Vachon, 2006
4.7.1. Introduction
Diagramme illustrant les interactions entre les instances d’un logiciel en mettant l’accent sur l’organisation structurelle des objets participants (et non pas sur l’ordre temporel des messages)
Diagramme généralement utilisé pour
Décrire en détail le déroulement d’un cas d’utilisation, i.e., décrire la conceptiond’un scénario d’un cas d’utilisation
Collaboration
Ensemble d’instances qui interagissent ensemble pour réaliser une tâche commune
Ensemble de liens (pertinents) existant entre ces instances
Chap.4, Sect.7, p.4 Copyrights Julie Vachon, 2006
Collaboration
Partie statique
Illustre les instance (des classes) et les liens (instances d’associations) impliqués dans la réalisation d’une collaboration donnée.
mb :MembreBiblio
unExemplaire :Exemplaire leLivre :Livre unMembre: Emprunteur
Chap.4, Sect.7, p.5 Copyrights Julie Vachon, 2006 mb
:MembreBiblio
cetExemplaire :Exemplaire leLivre :Livre unMembre: Emprunteur
1. emprunter(cetExemplaire)
1.1. okPourEmprunter()
1.2. emprunter(mb)
1.2.1. est_emprunté(self)
Collaboration
Partie dynamique
Illustre les interactions (les messages envoyés par les instances) nécessaires pour réaliser la tâche décrite par la collaboration
Chap.4, Sect.7, p.6 Copyrights Julie Vachon, 2006
4.7.2. Collaboration
Partie statique du diagramme (i.e., sans interactions)
Éléments composant une collaboration
Objets : instance d’une classe
Rectangle avec étiquette de la forme nomObjet:nomClasse ou :nomClasse
Uniquement les instances pertinentes, i.e., interagissant dans le cas d’utilisation ou le scénario
Liens : instances d’associations du diagramme de classes
Uniquement les instances d’associations pertinentes pour la collaboration
Acteurs : acteurs participant au cas d’utilisation ou scénario
L’acteur initiant un cas d’utilisation est appelé initiateur
Chap.4, Sect.7, p.7 Copyrights Julie Vachon, 2006
4.7.3. Collaboration
Partie dynamique du diagramme
Ajout des messages sur les liens
Indique les messages à côté des liens appropriés sur le diagramme de collaboration
La flèche est issue de l’émetteur et pointe vers le destinataire
L’association correspondante dans le diagramme de classes doit être navigable dans la même direction Le destinataire doit pouvoir comprendre le message
(opération appropriée ?)
no: message
Chap.4, Sect.7, p.8 Copyrights Julie Vachon, 2006
Représentation des interactions
Numéro du message : en mode procédural, lorsqu’un objet O reçoit un message, le numéro de ce message est utilisé comme préfixe pour tous les messages envoyés par O par la suite… jusqu’à ce que O réponde à ce message.
En général, les messages de retour n’apparaissent pas explicitement dans les diagrammes de collaboration
Types de messages
Synchrone Asynchrone
Aussi : garde, itération, etc.
Chap.4, Sect.7, p.9 Copyrights Julie Vachon, 2006
Représentation des interactions
Remarques
Comme le diagramme de séquence, le
diagramme de collaboration permet de découvrir de nouvelles propriétés aux classes. Il peut aider à compléter et développer le diagramme de classes
Ajout d’opérations, d’associations, etc.
Le diagramme de classes doit être mis à jour pour demeurer « correct » et « cohérent » avec les diagrammes de séquence et de collaboration
Chap.4, Sect.7, p.10 Copyrights Julie Vachon, 2006
4.7.4. Modes d’interaction
Identiques à ceux des diagrammes de séquence
Flot de contrôle (un seul en mode procédural ; plusieurs possibles en mode concurrent)
Activation (déclenchée par réception d’un message en mode procédural ; constante en mode concurrent) Types de messages: synchrone, asynchrone
Numérotation des messages
Préfixée (pour les chaînes d’appel en mode procédural)
Séquentielle
Avec étiquette (messages concurrents)
Chap.4, Sect.7, p.11 Copyrights Julie Vachon, 2006
4.7.5 Création et destruction dynamiques
Ajout d’une contrainte ({new} ou {destroyed}) après l’étiquette dans le rectangle représentant l’instance
Si au cours des interactions représentées par le diagramme de collaboration, une instance est créée puis détruite, on utilise la contrainte {transient}
Utilisation des messages de création et de destruction d’instance : new, destroy
Chap.4, Sect.7, p.12 Copyrights Julie Vachon, 2006
Création et destruction dynamiques
Exemple
:Etudiant-PhD{new}
:Etudiant-Msc {destroyed}
: Régistraire
1: n : = obtenirNom()
2: new Etudiant-PhD(n)
3 : destroy()
Chap.4, Sect.7, p.13 Copyrights Julie Vachon, 2006
4.7.6. Notation utilisée
On peut utiliser (comme pour les diagrammes de séquence)
Messages avec garde (condition)
Ex. : [i=0] 1: a(), [i=1] 1: b()
Messages avec clause itérative
Ex. : 1: ∗[i:=1..n] a()
Chap.4, Sect.7, p.14 Copyrights Julie Vachon, 2006
Notation utilisée
Exemple – Message avec garde
:ServeurImprimante :Ordinateur
:Imprimante :Queue_d’impressions
1.
imprimer(fichier)
[imprimante occupée]
1.1. ajouter(fichier)
[imprimante libre] 1.1.
imprimer(fichier)
Chap.4, Sect.7, p.15 Copyrights Julie Vachon, 2006
Notation utilisée
Concurrence
Le message 1 est un message asynchrone itératif
Les messages 2 et 3 sont des messages synchrones séquentiels
Les messages 4.a. et 4.b. sont des messages asynchrones concurrents
t:TourDeContrôle
b:Boeing
a1:Avion état = à_terre position = piste
a2:Avion état = à_terre position = piste
:Pompiers 1. ∗alerte()
4.b. atterrir(piste)
4.a: envoyer(piste)
3: déplacer(piste,parking) 2. déplacer(piste,parking)
Chap.4, Sect.7, p.16 Copyrights Julie Vachon, 2006
Notation utilisée
Autre exemple
:Ascenseur
:Cabine
:Lumière
:Porte
1. monter_étage(n)
1.1. monter()
1.1.1.a. allumer() 1.1.1.b. fermer()
:Moteur
1.2. actionner(n)
:Panneau de contrôle
Aller_etage(x)
Chap.4, Sect.7, p.17 Copyrights Julie Vachon, 2006
Notation utilisée
Résumé
:A
:B
1: message()
Message
:A
:B
[cond]1: message()
:A
:B
1: res:= message()
:A
B
1: *[i:=1..n] message()
B:B
:A
:B :C
1: m1()
1.1: m2()
1.2: m3()
2: m4() 1.a: m1()
:A
:B :C
1.b: m2() Message conditionnel Message avec retour
Itération Invocations synchrones Concurrence