Diagramme comportemental — Dynamique
Diagramme
de Séquence
Modélise les interactions entre objets dans le temps. Répond à : "Comment les objets collaborent-ils ?"
Rôle du Diagramme
Le diagramme de séquence décrit le comportement dynamique d'un scénario précis : quels objets s'envoient quels messages, dans quel ordre.
Un diagramme de séquence = un scénario. Pour modéliser plusieurs scénarios, créer plusieurs diagrammes (scénario principal, alternatifs).
Éléments de Base
| Élément | Notation | Description |
|---|---|---|
| Participant / Lifeline | Rectangle en tête + ligne de vie pointillée vers le bas. Notation : nomObjet:NomClasse |
|
| Acteur | Bonhomme — utilisateur ou système externe qui initie les interactions | |
| Barre d'activation | Rectangle fin sur la lifeline — indique la période pendant laquelle l'objet est actif (exécute du code) | |
| Message synchrone | Flèche pleine — l'émetteur attend la réponse avant de continuer | |
| Message asynchrone | Flèche ouverte (bâtons) — l'émetteur n'attend pas (ex : notification, event) | |
| Message de retour | Pointillés + flèche — valeur de retour d'une méthode (souvent facultatif si évident) | |
| Message de création | Flèche pointillée vers la tête du nouveau participant — «create» |
|
| Destruction | Croix (×) en bas de la lifeline — l'objet est détruit |
Lignes de Vie (Lifelines)
Chaque participant a une ligne de vie : la tête (rectangle) identifie l'objet, la ligne pointillée matérialise son existence dans le temps.
Notation de la tête
| Notation | Signification |
|---|---|
| :Classe | Objet anonyme de type Classe |
| objet:Classe | Objet nommé de type Classe |
| objet | Objet dont la classe n'est pas précisée |
| :«actor» | Acteur (bonhomme) |
Le nom est souligné dans la tête pour signifier qu'il s'agit d'une instance (pas d'une classe).
Types de Messages
Les messages représentent les appels de méthodes ou signaux envoyés entre participants.
| Type | Flèche | Usage |
|---|---|---|
| Synchrone | → pleine | Appel de méthode standard — bloquant |
| Asynchrone | → ouverte | Event, notification — non bloquant |
| Retour | -- - → pointillés | Valeur retournée après exécution |
| Création | -- - → pointillés | Instanciation d'un objet («create») |
| Auto-message | → boucle | Objet qui s'envoie un message à lui-même |
Le message de retour est souvent omis quand la valeur retournée est évidente ou non pertinente pour le scénario.
Barres d'Activation
Une barre d'activation (rectangle fin) sur une lifeline indique que l'objet est en train d'exécuter du code.
Les barres montrent visuellement qui a le contrôle à chaque instant. Elles rendent les dépendances de contrôle très claires.
Fragments Combinés
Les fragments structurent les interactions pour exprimer conditions, boucles et alternatives.
alt[ ]optlooploop(min, max) ou loop [condition]parcriticalrefnegFragment alt
Fragment loop
Création & Destruction d'objets
Un objet peut être créé ou détruit pendant le scénario, pas seulement au début.
«create»«destroy»Exemple Complet — Authentification
Scénario complet avec acteur, fragment alt, messages synchrones, retours et fragment opt.
Messages Spéciaux
Message réflexif
Un message qu'un objet s'envoie à lui-même — appel interne, méthode privée ou récursivité. Représenté par une flèche qui revient sur la même lifeline.
self.calculerTVA() appelé pendant calculerTotal()Messages perdus et trouvés
Permettent de modéliser des interactions avec des entités dont on ne représente pas la lifeline complète dans le diagramme.
| Type | Notation | Signification |
|---|---|---|
| Message perdu | Envoyé mais destination non représentée | |
| Message trouvé | Reçu mais origine non représentée |
Ces notations sont utiles pour représenter des interactions avec des systèmes tiers, des événements asynchrones ou des signaux matériels sans alourdir le diagramme avec toutes les lifelines.
Lien avec les Autres Diagrammes
Le diagramme de séquence ne s'utilise pas en isolation — il est le pont entre la structure statique et les besoins fonctionnels.
Diagramme de Cas d'utilisation
Chaque diagramme de séquence réalise un cas d'utilisation. Le scénario nominal et les scénarios alternatifs deviennent les fragments alt.
Diagramme de Classes
Les participants sont des instances des classes. Les messages correspondent aux méthodes. Concevoir un diagramme de séquence révèle souvent des méthodes manquantes dans les classes.
Communication
Le diagramme de communication montre les mêmes interactions mais met l'accent sur les liens entre objets (pas la chronologie). Les messages y sont numérotés. Le diagramme de séquence est préféré car la chronologie est généralement cruciale.
Workflow recommandé : Cas d'utilisation → description textuelle du scénario → Diagramme de séquence → découverte des méthodes → mise à jour du Diagramme de classes. Ce cycle itératif affine les trois diagrammes ensemble.
Quand utiliser ce Diagramme ?
Le diagramme de séquence est particulièrement adapté dans plusieurs contextes.
Analyse des exigences
Illustrer comment les acteurs interagissent avec le système pour valider les besoins fonctionnels avec le client.
Conception détaillée
Spécifier comment les objets collaborent pour implémenter un cas d'utilisation, en mettant en lumière les appels de méthodes.
Documentation
Documenter le comportement dynamique d'un système existant pour faciliter la maintenance et l'onboarding de nouveaux développeurs.
Validation d'architecture
Vérifier que l'architecture logicielle supporte les scénarios fonctionnels, détecter les dépendances problématiques ou les goulots d'étranglement.
Debug & Analyse
Reconstituer un bug en modélisant la séquence d'appels. Identifier où la chaîne se rompt ou quels objets manquent de méthodes.
Génération de tests
Servir de base pour générer automatiquement des cas de tests fonctionnels — chaque fragment alt est un cas de test potentiel.
Erreurs Courantes
Ces pièges sont fréquents et nuisent à la lisibilité ou à l'exactitude du diagramme.
Le diagramme se lit de haut en bas. Un message placé plus haut est toujours antérieur. Ne pas respecter cet ordre crée une confusion sur la séquence réelle.
Trop d'objets ou de messages rendent le diagramme illisible. Règle : 1 diagramme = 1 scénario. Créer plusieurs diagrammes pour les scénarios alternatifs.
Une flèche pleine (→) implique que l'émetteur attend la réponse. Une flèche ouverte (→) signifie qu'il continue sans attendre. Les confondre fausse l'interprétation du comportement.
Un fragment alt sans condition entre crochets est ambigu. Toujours préciser la garde : [solde suffisant], [else].
Tenter de représenter des conditions ou boucles sans fragments (avec des commentaires textuels) rend le diagramme non standard et difficile à interpréter.
Si un objet est créé ou détruit pendant le scénario, il faut le représenter explicitement. Une lifeline qui commence en haut implique que l'objet existait avant le scénario.
Lire un Diagramme → Coder en Python
Chaque élément du diagramme de séquence correspond à une construction Python.
| Élément UML | Python |
|---|---|
Participant :Classe | Variable de type Classe |
Message objet.methode() | Appel de méthode |
| Message retour | Valeur de retour return x |
Fragment alt | Structure if / else |
Fragment opt | Structure if condition |
Fragment loop | Boucle for ou while |
«create» | obj = Classe() |
«destroy» | del obj |
| Message asynchrone | Thread / async-await |
Scénario de connexion traduit
class AuthController:
def __init__(self):
self.user_service = UserService() # «create»
def se_connecter(self, user, password):
# validerIdentite(user, pass)
user_obj = self.user_service.valider(user, password)
if user_obj: # alt [valide]
token = self._generer_token(user_obj)
return token
else: # alt [invalide]
raise AuthException("Identifiants invalides")
class UserService:
def valider(self, user, password):
# findByUsername(user) → Database
db = Database()
user_obj = db.find_by_username(user)
if user_obj and user_obj.check_pass(password):
return user_obj
return None
Résumé
📐 Éléments
| Rectangle | participant |
| — — — | lifeline |
| ▬ | activation |
| × | destruction |
↔ Messages
| → plein | synchrone |
| → ouvert | asynchrone |
| - -→ | retour |
| - -→ tête | «create» |
📦 Fragments
| alt | if / else |
| opt | if seul |
| loop | boucle |
| par | parallèle |
| ref | référence |
✅ Conseils
| 1 diag | 1 scénario |
| Temps | de haut en bas |
| Acteur | à gauche |
| Retours | pointillés |