Diagrammes d’interaction
Un diagramme d’interaction fournit une représentation visuelle claire des messages échangés entre les différents acteurs, objets ou composants d’un système pendant un scénario spécifique.
Deux types principaux de diagrammes d’interactions sont couramment utilisés : les diagrammes de séquence et les diagrammes de communication.
Le diagramme de séquence met en évidence l’ordre chronologique des messages échangés entre les différents objets d’un système.
Le diagramme de communication met davantage l’accent sur le flux des messages échangés entre les objets que sur leur ordre chronologique.
La section suivante comporte une comparaison des 2 types de diagramme, mais nous nous concentrerons sur les diagrammes de séquence dans le reste du chapitre.
Représentation
Un diagramme de séquence doit montrer des messages échangés par des participants lors de la réalisation d’un scénario. L’exemple suivant représente les messages échangés, lors d’une requête HTTP (scénario), entre le participant Navigateur et le participant Serveur.
Voici le même scénario sous forme de diagramme de communication.
Participants aux interactions
Les participants aux interactions d’un diagramme de séquence sont représentés à l’aide d’un rectangle et d’une ligne verticale pointillée, appelée « ligne de vie ». Le nom du participant suit cette syntaxe:
nom_de_l’objet [sélecteur] : nom_de_la_classe
nom_de_l’objet | Le nom de l’instance impliqué dans l’interaction |
sélecteur | Permet de selectionner une instance particulière dans un tableau d’élement |
nom_de_la_classe | Le nom du type du participant |
Message
Les messages sont des flèches représentant des communications entre participants. Le texte juste au-dessus de la flèche d’un message représente un appel de méthode, le nom ou la description du message échangé entre les participants.
Message asynchrone | Représenté à l’aide d’une pointe de flèche ouverte. | |
Message synchrone | Représenté à l’aide d’une pointe de flèche remplie. | |
Message de Réponse | Représenté à l’aide d’une flèche pointillée et d’une pointe ouverte. | |
Message de création | Représenté à l’aide d’une flèche pointillée et d’une pointe ouverte et d’une fonction de création ou de l’étiquette «create». | |
Message de destruction | Représenté à l’aide d’une pointe pleine et d’une fonction de destruction ou de l’étiquette «destroy». On utilise une croix pour montré le moment où l’objet sera détruit. | |
Message perdu | Représenté à l’aide d’une flèche pointant vers un cercle plein. Montre que le participant P1 envoie un message dont la destination est inconnue ou pas importante dans la séquence. | |
Message trouvé | Représenté à l’aide d’une flèche partant d’un cercle plein. Montre que le participant P1 a reçu un message dont la provenance est inconnue ou pas importante dans la séquence. |
Occurrence d’exécution
Il est possible de représenter le temps de traitement ou l’attente d’un message par un participant à l’aide d’une occurrence d’exécution. Celles-ci sont illustrées par un rectangle vertical sur la ligne de vie.
Invariants d’état
Les invariants d’états représente des conditions qui doivent rester vraies pour le reste des interactions du scénario. Chaque invariant est attaché à la ligne de vie pour laquelle la condition s’applique.
Voici un exemple avec 2 invariants d’états dans un scénario de retrait d’argent.
Opérateur d’interaction
Un opérateur d’interaction est un élément utilisé dans les diagrammes de séquence pour spécifier le comportement et la structure des interactions entre les objets. Il permet de définir des scénarios d’exécution plus complexes en déterminant comment les messages sont échangés.
Alternates | Représente différentes branches d’exécution, chaque branche étant associée à une condition qui détermine si cette branche est exécutée ou non. | |
Option | Similaire à alt, mais avec une seul opérande | |
Break | Indique une interruption du scénario, après l’exécution du fragment, si la condition est vraie. Par exemple, si P1.attr == True, alors message3() sera envoyé, mais pas message4(). | |
Parallel | Indique que les deux fragments d’interactions peuvent s’exécuter en parallèle, en gardant l’ordre des fragments originaux. Par exemple, message2() et message3() doivent être exécutés après message1(). | |
Loop | Indique que le fragment d’interactions sera exécuté en boucle. La condition de sortie peut être représentée avec une condition de sortie ou comme ceci: loop(min, max). | |
ref | Réfère à une interaction définie dans un autre diagram |
Exemple
Voici un exemple d’un diagramme d’interaction basé sur le cas d’étude PolyAuto.