Un Diagramme d’état UML est un outil visuel puissant qui modélise le comportement dynamique d’un système en illustrant comment il passe d’un état à un autre en réponse à des événements. Il capture le cycle de vie d’un objet ou d’un processus — en montrant ce qu’il peut être dans, ce qui déclenche un changement, et quelles actions se produisent lors des changements d’état — ce qui en fait un outil idéal pour comprendre des systèmes complexes comme les feux de circulation, les distributeurs automatiques, les workflows de connexion ou les personnages de jeu. En se concentrant sur les états (comme « Rouge », « En attente de paiement » ou « En saut »), les transitions (déclenchées par des événements tels que « le minuteur expiré » ou « bouton pressé ») et les conditions (garde), les diagrammes d’état apportent de la clarté, évitent les lacunes logiques et constituent une base solide pour la conception et le code. Que vous soyez un débutant apprenant la modélisation de systèmes ou un développeur construisant des logiciels robustes, maîtriser les diagrammes d’état vous donne la capacité de penser, concevoir et communiquer le comportement des systèmes avec précision et clarté.

💡 Objectif: Apprenez à modéliser des systèmes du monde réel à l’aide de machines à états — du concept à un diagramme propre et professionnel.
🔑 Les concepts clés que vous devez comprendre en premier
| Concept | Ce que cela signifie | Pourquoi cela importe |
|---|---|---|
| État | Une condition ou situation dans laquelle se trouve le système (par exemple Rouge, En attente de pièce) |
Montre ce qui se passe à tout moment |
| Événement | Quelque chose qui déclenche un changement (par exemple Insérer une pièce, le minuteur expiré) |
Provient le passage d’un état à un autre |
| Transition | Une flèche d’un état à un autre | Lien les états via des événements |
| État initial | Le point de départ (●) | Il y en a toujours un |
| État final | Fin du processus (○) | Facultatif — pas toujours nécessaire |
| Garde [condition] | Condition qui doit être vraie pour que la transition ait lieu | Ajoute de la logique (par exemple, si assez d’argent ?) |
| Action / entrée / exécution | Ce qui se produit lors de l’entrée, pendant ou de la sortie d’un état | Ajoute un comportement aux états |
📌 Pensez :
« Ce système peut être dans X états. »
Quand Y se produit, il passe à Z.”
C’est une machine à états !
🛠 Étape 0 – Mentalité : Posez ces questions
Avant de dessiner quoi que ce soit :
-
Quelles sont les situations clairement différentes dans lesquelles cet objet peut se trouver ?
-
Quels événements (les actions de l’utilisateur, le temps, les erreurs) provoquent des changements ?
-
Peut-il être dans deux états en même temps ? (Non → les machines à états basiques sont mutuellement exclusives.)
👉 Exemple : Un interrupteur d’éclairage est soit Allumé ou Éteint. Jamais les deux à la fois.
🧩 Étape 1 – Choisissez une chose concrète à modéliser
✅ Bonnes options pour les débutants :
-
Barrière à accès (verrouillée/déverrouillée)
-
Feu de signalisation (rouge/vert/jaune)
-
Distributeur automatique
-
Système de connexion
-
Statut de la commande :
Créé → Payé → Expédié → Livré
❌ À éviter :
-
« Toute la boutique en ligne » → trop grand
-
« L’expérience utilisateur » → trop vague
✏️ Commencez par quelque chose de simple. Maîtrisez d’abord l’exemple simple.
📌 Étape 2 – Liste des états (utilisez des noms ou des participes présents)
Écrivez 4 à 8 états réalistes.
Utilisez des adjectifs ou des participes présents pour qu’il ressemble à un état :
-
Rouge -
Vert -
Jaune -
En attente d'une pièce -
Distribution de l'article -
Préparation -
Paiement échoué
✅ Astuce : Si vous avez plus de 10 états → divisez le système en systèmes plus petits.
🖌 Étape 3 – Dessinez les états sous forme de rectangles arrondis
Utilisezrectangles arrondis:
[ Rouge ]
[ Vert ]
[ En attente d'une pièce ]
✅ Outils :
draw.io / diagrams.net (meilleur choix gratuit)
Excalidraw (effet dessiné à la main)
PlantUML (basé sur le texte → facile à gérer avec le contrôle de version)
Lucidchart / Miro
🔷 Étape 4 – Ajouter l’état initial (point noir)
Dessinez uncercle noir rempliavec une flèche pointant vers le premier état.
[*] --> Rouge
Le
[*]signifie « état initial » — c’est le point de départ.
➡️ Étape 5 – Dessinez les transitions avec des événements
Pour chaque état, demandez :
« Qu’est-ce qui peut se produire ici qui me fait quitter cet état ? »
Étiquetez les flèches avec :
événement [garde] / action
🔹 Commencez simplement : juste
événementouévénement / action
Événements courants:
-
Insérer une pièce -
le minuteur expiré -
paiement échoué -
bouton pressé -
pedButton -
expiration du délai
✅ Étape 6 – Ajouter un état final (facultatif)
Utilisez un cercle avec une bordure épaisse pour l’état final.
[Livré] --> [●]
Tous les systèmes n’ont pas d’états finaux (comme les feux de circulation qui fonctionnent indéfiniment).
🔁 Étape 7 – Ajouter des cas limites réalistes
Demandez :
-
Pouvez-vous annuler ? → ajouter
Annuler→ retour àInactif -
Le temps s’écoule ? →
expiration du délai→ retourner àEn attente -
Peut-il échouer ? → ajouter
erreur→Retour au début -
Peut-il rester dans le même état ? →transition auto
Exemple detransition auto (ajout d’argent) :
[A crédit] -- pièce insérée --> [A crédit]
🚦 Étape 8 – Utilisez les gardes pour une logique intelligente
Lorsquele même événement mène à des résultats différents, utilisezles gardes.
Exemple :
Si vous appuyez sur
pedButtonpendantVert, mais la demande n’est pas encore présente → vous entrez dansVert avec piéton en attente.
Mais si la demande est déjà définie → vous l’ignorez simplement.
[Vert véhicule] --> [Vert véhicule] : pedButton / définir demande = vrai
Ceci est unetransition auto avec action — pas un nouvel état.
🎯 Étape 9 – Ajouter les actions d’entrée/execution/sortie (facultatif mais puissant)
Vous pouvez écrire des actionsà l’intérieur de la boîte d’état:
[Rouge]
entrée / allumer le rouge
sortie / éteindre le rouge
do / attendre 30 secondes
Aide à clarifier le comportement sans surcharger les transitions.
✅ Étape 10 – Liste de vérification finale (posez-vous les questions)
| ✅ Vérifier | Pourquoi cela importe |
|---|---|
| Un état initial ? | Doit commencer quelque part |
| Tous les états ont des flèches sortantes (sauf le dernier) ? | Pas de cul-de-sac |
| Pas d’états inaccessibles ? | Chaque état doit être accessible |
| Les transitions sont-elles étiquetées avec des événements ? | Cause et effet clairs |
| Les flèches ne disent pas « aller vers X » — la flèche indique la direction | Plus propre |
| Les chemins d’annulation / expiration / erreur sont-ils inclus ? | Les systèmes réels échouent — préparez-vous à cela |
| Le diagramme tient à l’écran ? | Propre et lisible |
📋 Référence rapide : Syntaxe PlantUML (standard UML)
| Symbole | Signification |
|---|---|
[*] |
État initial |
[*] --> État |
Commencer à partir de cet état |
État --> État |
Transition |
événement [garde] / action |
Étiquette sur la flèche |
état "Nom" |
État nommé (facultatif) |
état "X" comme X |
Alias pour les noms complexes |
note à droite de l'État |
Boîte de commentaire |
🎯 Exemple 1 : Feu de circulation simple (cycle à 3 états)
Parfait pour les absolus débutants.
🧠 Utilisation réelle :
-
Cycle de base du feu de circulation :Rouge → Vert → Jaune → Rouge
✅ États :
-
Rouge -
Vert -
Jaune
🔄 Événements :
-
le minuteur expiré(après 30s, 25s, 5s)
🛠 Code PlantUML (prêt à copier-coller) :

@startuml
skinparam monochrome true
[*] --> Rouge
Rouge --> Vert : après(30s)nle minuteur expiré
Vert --> Jaune : après(25s)nle minuteur expiré
Jaune --> Rouge : après(5s)nle minuteur expiré
Rouge : entry / allumer le rouge
Vert : entry / allumer le vert
Jaune: entry / allumer le jaune
note à droite de Rouge
Les véhicules doivent s'arrêter
fin note
note à droite de Vert
Les véhicules peuvent avancer
fin note
note à droite de Jaune
Préparez-vous à vous arrêter
fin note
@enduml
✅ Comment l’utiliser:
Allez sur https://www.plantuml.com/plantuml, collez le code, puis appuyez sur « Générer ».
🖼️ Sortie : un diagramme d’état machine propre et aux allures animées.
🎯 Exemple 2 : un feu de circulation réaliste avec demande de passage piéton
Le la version la plus pédagogique — présente les gardes, les transitions auto et la logique complexe.
🧠 Utilisation réelle :
-
Les piétons appuient sur un bouton pour traverser.
-
La lumière attend plus longtemps si quelqu’un est en attente.
-
Après la fin du vert, il passe au jaune → rouge → marche → feu clignotant ne pas traverser → retour au vert.
📌 États clés :
-
VéhiculeVert_AucuneDemande– vert, aucun piéton en attente -
VéhiculeVert_PiétonEnAttente– vert, quelqu’un a appuyé sur le bouton -
VéhiculeJaune– feu jaune (pas de marche) -
ToutRouge– délai de sécurité (très court) -
PiétonMarche– signal marche allumé -
PiétonClairance– feu clignotant ne pas traverser (temps de dégagement)
🧩 Transitions clés :
-
boutonPiéton→ si pas en attente → définir la demande -
→ le minuteur expiré→ passer au jaune (si le temps vert est atteint) -
boutonPiétonpendant jaune/rouge → se souvenir de la demande -
timerWalk→ passer au clignotement « ne pas traverser » -
timerClearance→ réinitialiser et retourner au vert
🚨 Remarque : Cette version utilise des gardes et des transitions auto, montrant pourquoi les machines d’état sont puissantes.
✅ Code PlantUML (entièrement fonctionnel, prêt à être utilisé) :

@startuml
skinparam monochrome true
skinparam shadowing false
skinparam dpi 120
[*] --> VehicleGreen_NoDemand
state "Vert véhiculen(pas de demande piétonne)" as VG_No
state "Vert véhiculen(piéton en attente)" as VG_Wait
state "Jaune véhicule" as VYellow
state "Rouge toutn(blocage de sécurité)" as AllRed
state "Marche piéton" as PedWalk
state "Clairance piétonn(clignotement « ne pas traverser »)" as PedClear
VG_No --> VG_Wait : pedButton / setPedDemand = true
VG_No --> VYellow : après(35s)nor (pedDemand && minGreenTimeMet)
VG_Wait --> VYellow : après(45s)nvert prolongé quand piéton en attente
VG_Wait --> VG_Wait : pedButton / ignorer (déjà en attente)
VYellow --> AllRed : après(4s)
AllRed --> PedWalk : après(1s)
PedWalk --> PedClear : après(10s)nfin du temps de marche
PedClear --> VG_No : après(5s)nclairence terminéen/ resetPedDemand
note bas de VG_No
Fonctionnement normal
Pas de demande piétonne
end note
note à droite de PedClear
Les piétons terminent leur traversée
Signal clignotant « ne pas traverser »
end note
note à droite de VG_Wait
Piéton a appuyé sur le bouton
Le vert est prolongé jusqu'à 10s
end note
note à droite de VYellow
Préparation à l'arrêt
Changement de lumière véhicule
end note
note à droite de PedWalk
Signal marche allumé
Les piétons peuvent traverser
end note
@enduml
💡 Pourquoi c’est mieux que la version simple ?
Montre complexité du monde réel
Démontre gardes (
si pedDemand)Utilise transitions auto (
VG_Wait --> VG_Wait)Modélise comportement réel: le vert peut être prolongé !
Séparation claire entre véhicule et piéton logique
🎓 Exercices pratiques recommandés (à faire dans l’ordre)
| # | Exemple | Temps | Compétences acquises |
|---|---|---|---|
| 1 | Interrupteur lumineux (Allumé ↔ Éteint) | 5 min | Transitions basiques |
| 2 | Barrière (Verrouillée ↔ Déverrouillée) | 10 min | Événements, gardes |
| 3 | Feu de circulation (cycle à 3 états) | 10 min | Chronomètres, actions d’entrée |
| 4 | Distributeur automatique (en attente → paiement → distribution) | 15 min | Événements multiples, logique monétaire |
| 5 | Connexion (vide → saisie → envoi → succès/échec) | 15 min | Gestion des erreurs, états finaux |
| 6 | Statut de la commande (6 états) | 20 min | Modélisation de systèmes du monde réel |
✅ Commencez par #1–3 sur papier ou dans draw.io. Ensuite utilisez PlantUML pour le reste.
🧠 Conseils finaux pour réussir
-
Commencez petit — n’essayez pas d’inclure tout d’un coup.
-
Utilisez des noms réels —
En attente d'un jeton, pasÉtat1. -
Libellez clairement les transitions —
bouton appuyé,expiration du délai,paiement échoué. -
Dessinez-le d’abord à la main — puis digitalisez-le.
-
Testez-le mentalement: « Ce système peut-il se bloquer ? » → si oui, ajoutez une transition.
📌 Résumé : Votre liste de vérification de machine à états
✅ Un [*] (état initial)
✅ Les rectangles arrondis pour les états
✅ Les flèches pour les transitions
✅ Les événements sur les flèches (après(30s), boutonPied)
✅ Les gardes là où nécessaire ([demandePied])
✅ Les auto-transition pour les actions répétées
✅ Les actions d’entrée/sortie pour le comportement
✅ Mise en page propre, police lisible
🎯 Mot final : Vous êtes maintenant prêt !
Vous venez d’apprendre :
-
Ce qu’est un schéma de machine à états est
-
Comment penser en termes d’états et d’événements
-
Comment dessiner et lire comme un professionnel
-
Comment modéliser des systèmes réels, comme les feux de circulation
-
Comment utiliser PlantUMLécrire des diagrammes propres et maintenables
🎉 Vous n’apprenez pas seulement UML — vous apprenez à modéliser des systèmes réels, un état à la fois.
📌 Étapes suivantes (Votre parcours d’apprentissage)
-
Dessinez le feu de circulation à trois états à la main— pas d’outils, juste du papier.
-
Essayez PlantUMLavec le code ci-dessus — voyez-le s’afficher.
-
Modifier: Modifiez les temps d’attente. Ajoutez un état « surcharge d’urgence ».
-
Essayez la machine à boissons→ même logique, mais avec de l’argent.
-
Dessinez le vôtre: Un personnage de jeu (marcher → sauter → attaquer → mort).
💬 Besoin d’aide ? Essayez ceci : « Je tente de modéliser un [votre système]— pouvez-vous m’aider à créer une machine à états ?»
🙌 Dernière réflexion
🔄 Tout ce qui change — qu’il s’agisse d’une lumière, d’une connexion ou d’une commande — peut être modélisé avec une machine à états.
Vous n’avez pas besoin d’être programmeur pour le comprendre. Il vous suffit de vous demander « Quels états peut prendre cet objet, et qu’est-ce qui le fait changer ? »
✅ Vous savez maintenant comment créer un diagramme de machine à états professionnel et fonctionnel — du débutant au modélisateur confiant.
🎉 Bonne modélisation !
Faites-moi savoir si vous souhaitez une version PDF imprimable, un quiz ou un défi de codage pour tester vos compétences.