Modélisation UMLDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

Génie logiciel · C3 Analyse et spécification · Chapitre 2 · 4 h

Modélisation UML

Diagramme de cas d'utilisation, acteurs et scénarios ; diagramme de classes en première approche ; diagramme de séquence simple ; du modèle vers le code.

Les besoins recueillis au chapitre 4 sont écrits en français — clairs, mais difficiles à structurer et à partager. UML (Unified Modeling Language) offre un langage graphique normalisé pour représenter un logiciel : des diagrammes qui se dessinent au tableau, se montrent au client, et font le pont vers le code.

UML compte treize types de diagrammes. Ce chapitre en présente trois, et pas un de plus — c'est un parti pris assumé. En L1, trois diagrammes maîtrisés valent mieux que neuf survolés : vous n'avez pas encore assez de code derrière vous pour que le reste ait du sens. Le principe directeur : UML sert à clarifier ; dès qu'un diagramme complique au lieu d'aider, on l'abandonne.

Le diagramme de cas d'utilisation

C'est le diagramme le plus utile en amont, et le plus proche des besoins. Il répond à une seule question : qui fait quoi avec le système ?

Deux ingrédients :

        ┌─────────── Bibliothèque ───────────┐        │   ( rechercher un livre )           │  Abonné│   ( emprunter un livre )            │  ──────┤   ( réserver un livre )             │        │   ( enregistrer un retour )─────────┤ Bibliothécaire        │   ( envoyer un rappel )─────────────┤ Horloge        └─────────────────────────────────────┘

Voici ce même diagramme, interactif : déplacez les acteurs et les cas d'utilisation pour le réorganiser, servez-vous des commandes de zoom, et repérez l'acteur non humain — l'horloge — relié au rappel nocturne.

Diagramme · Un diagramme de cas d'utilisation

  • Abonné
  • Bibliothécaire
  • Horloge
  • Rechercher un livre
  • Emprunter un livre
  • Réserver un livre
  • Enregistrer un retour
  • Ajouter un ouvrage
  • Envoyer un rappel

Relations

  • Abonné Rechercher un livre
  • Abonné Emprunter un livre
  • Abonné Réserver un livre
  • Bibliothécaire Enregistrer un retour
  • Bibliothécaire Ajouter un ouvrage
  • Horloge Envoyer un rappel

Ce diagramme se tire directement des besoins fonctionnels et des acteurs du chapitre 4. Sa force : il tient sur une page, se montre au client pour valider le périmètre (« ai-je oublié un service ? »), et découpe le travail de l'équipe — un cas d'utilisation correspond grosso modo à une fonctionnalité à développer et à tester. L'exercice vous fait en construire un à partir d'une description.

Quiz · 1 question

Dans un logiciel de bibliothèque, un rappel est envoyé automatiquement chaque nuit aux abonnés en retard. Comment le représente-t-on dans un diagramme de cas d'utilisation ?

  • Ce n'est pas un cas d'utilisation, puisqu'aucune personne ne le déclenchepas d'acteur humain, donc rien
  • C'est un cas d'utilisation « envoyer un rappel » relié à un acteur non humain — le temps (une horloge), ou « le système » — qui le déclencheacteur non humain (horloge)
  • C'est un besoin non fonctionnel, à mettre à part du diagrammenon fonctionnel

Réponse : Un acteur est un rôle qui interagit avec le système — pas nécessairement une personne. Un traitement déclenché par le temps a pour acteur une HORLOGE (ou « le système ») : « envoyer un rappel » est bien un cas d'utilisation, relié à cet acteur non humain. Oublier les acteurs non humains (horloge, autre logiciel, capteur) est une erreur fréquente. Ce n'est pas un besoin non fonctionnel : c'est une vraie fonction du système, simplement déclenchée automatiquement.

Le diagramme de classes, en première approche

Le diagramme de classes décrit les objets du domaine que le logiciel manipule, et fait le pont vers le code (surtout en programmation orientée objet). Chaque classe est une boîte à trois compartiments :

┌─────────────────┐│      Livre      │   ← nom├─────────────────┤│ titre           │   ← attributs (les données)│ auteur          ││ disponible      │├─────────────────┤│ emprunter()     │   ← méthodes (les opérations)│ rendre()        │└─────────────────┘

Les classes sont reliées par des associations qui traduisent les liens du domaine : un Abonné « emprunte » des Livre. On annote ces liens de multiplicités — « un abonné peut emprunter 0 à 5 livres », « un livre est emprunté par 0 ou 1 abonné » — qui capturent des règles métier directement dans le modèle.

En première approche, on s'en tient là : identifier les bonnes classes (les noms importants du domaine : Livre, Abonné, Emprunt), leurs attributs essentiels, et les associations principales. Le passage vers le code est alors presque mécanique — chaque classe du diagramme devient une classe du programme.

Le diagramme de séquence, simple

Le diagramme de séquence montre, pour un scénario précis, l'ordre des échanges entre les participants au fil du temps. Chaque participant a une ligne de vie verticale ; les messages sont des flèches horizontales, lues de haut en bas.

 Abonné        Système        Catalogue   │  emprunter()  │              │   │──────────────▶│ disponible ? │   │               │─────────────▶│   │               │◀──── oui ────│   │◀── confirmé ──│              │

Il répond à « comment ça se passe, étape par étape » pour un cas d'utilisation donné — par exemple l'emprunt d'un livre disponible. Il est précieux pour comprendre une interaction avant de la coder, et pour repérer les cas où ça se passe mal (le livre n'est pas disponible : que renvoie le système ?). On en fait un par scénario important, pas pour tout.

Du modèle vers le code

Ces trois diagrammes ne sont pas une fin : ce sont des outils de réflexion et de communication qui mènent au code.

Le danger, en L1, est de tomber amoureux du dessin et de passer plus de temps à modéliser qu'à construire. La règle de bon sens : un diagramme qu'on ne regardera plus après l'avoir dessiné ne valait pas la peine d'être dessiné. On modélise ce qui aide à décider ou à communiquer, et on code le reste. Pour votre projet, un diagramme de cas d'utilisation, un diagramme de classes et un ou deux diagrammes de séquence suffisent amplement.

Quiz · 1 question

Pourquoi ce cours limite-t-il volontairement UML à trois diagrammes en L1 ?

  • Parce que les autres diagrammes UML sont obsolètesobsolescence
  • Parce que trois diagrammes maîtrisés valent mieux que neuf survolés : sans assez de code derrière soi, les diagrammes avancés n'ont pas de sens, et UML ne vaut que s'il clarifiemaîtriser peu, utilement
  • Parce que les outils de dessin ne gèrent que trois diagrammeslimite technique

Réponse : UML compte treize types de diagrammes, tous valides — la limitation n'est ni une obsolescence ni une contrainte d'outil. C'est un choix pédagogique : en L1, on n'a pas encore assez d'expérience du code pour que les diagrammes avancés (état, activité, composants…) aient du sens. Trois diagrammes bien maîtrisés — cas d'utilisation, classes, séquence — couvrent le périmètre, la structure et le comportement, l'essentiel d'un projet modeste. Le principe : UML sert à clarifier ; dès qu'il complique, on l'abandonne.

À vous

L'exercice construit le diagramme le plus utile en amont : le diagramme de cas d'utilisation. À partir d'une description du logiciel de bibliothèque, vous identifiez les acteurs (qui) et les cas d'utilisation (quoi) — sans oublier l'acteur non humain, l'horloge qui déclenche le rappel nocturne.

C'est exactement le diagramme que vous dessinerez pour votre projet, juste après le cahier des charges : il en validera le périmètre et découpera le travail de l'équipe.

Exercice de code

Tirez un diagramme de cas d'utilisation d'une description : identifiez les acteurs (qui) et les cas d'utilisation (quoi). N'oubliez pas les acteurs non humains, comme l'horloge qui déclenche un rappel. En L1, trois diagrammes maîtrisés valent mieux que neuf survolés.

Point de départ

// Une description du logiciel de bibliothèque, telle que le client la donne.
// Un ACTEUR est un rôle qui interagit avec le système (souvent un SUJET :
// « l'abonné », « le bibliothécaire »). Un CAS D'UTILISATION est un service
// rendu à un acteur (souvent un VERBE + objet : « emprunter un livre »).
const description =
  "L'abonné peut rechercher un livre et l'emprunter. Il peut aussi réserver " +
  "un livre déjà emprunté. Le bibliothécaire enregistre les retours et ajoute " +
  "de nouveaux ouvrages au catalogue. Chaque nuit, le système envoie " +
  "automatiquement un rappel aux abonnés en retard.";

// ── À VOUS : identifier acteurs et cas d'utilisation ────────────────────────
// (1) Lister les acteurs (les rôles/sujets qui agissent).
const acteurs = [
  // "abonné", ...
];
// (2) Lister les cas d'utilisation (les services, verbe + objet).
const casUtilisation = [
  // "rechercher un livre", ...
];

// ── Vérification ────────────────────────────────────────────────────────────
console.log("Acteurs identifiés :", acteurs.join(", "));
console.log("Cas d'utilisation :");
casUtilisation.forEach((c) => console.log("   - " + c));
console.log("");
console.log("Attendu ~ 3 acteurs (abonné, bibliothécaire, système/horloge)");
console.log("et ~ 6 cas d'utilisation.");

Solution

const acteurs = ["abonné", "bibliothécaire", "système (horloge nocturne)"];

const casUtilisation = [
  "rechercher un livre",     // abonné
  "emprunter un livre",      // abonné
  "réserver un livre",       // abonné
  "enregistrer un retour",   // bibliothécaire
  "ajouter un ouvrage",      // bibliothécaire
  "envoyer un rappel",       // système, déclenché par le temps
];

// ── Ce que l'exercice enseigne ──────────────────────────────────────────────
//
// 1. Le diagramme de CAS D'UTILISATION répond à « QUI fait QUOI avec le
//    système ». On le tire directement des besoins fonctionnels (chapitre 4) :
//    - ACTEURS = les rôles/sujets qui interagissent (abonné, bibliothécaire) ;
//    - CAS D'UTILISATION = les services rendus (verbe + objet), une bulle par
//      service, reliée aux acteurs concernés.
//
// 2. Un acteur n'est pas forcément une personne. Le RAPPEL nocturne est
//    déclenché par le TEMPS, sans intervention humaine : l'horloge (ou « le
//    système ») est un acteur à part entière. Oublier ces acteurs non humains
//    est une erreur classique.
//
// 3. C'est le diagramme le plus utile en amont : il tient sur une page, se
//    montre AU CLIENT pour valider le périmètre (« ai-je oublié un service ? »),
//    et découpe naturellement le travail de l'équipe (un cas d'utilisation ≈
//    une fonctionnalité à développer et à tester).
//
// 4. En L1, on s'en tient à TROIS diagrammes maîtrisés plutôt qu'à neuf
//    survolés :
//    - CAS D'UTILISATION (celui-ci) : qui fait quoi — le périmètre ;
//    - CLASSES : les objets du domaine, leurs attributs et leurs liens — vers
//      le code (une classe Livre { titre, auteur, disponible }, une classe
//      Abonné, reliées par « emprunte ») ;
//    - SÉQUENCE : l'ordre des échanges dans UN scénario (l'abonné demande,
//      le système vérifie la disponibilité, confirme l'emprunt).
//    UML n'a de valeur que s'il CLARIFIE ; dès qu'il complique, on l'abandonne.

Ce que la suite en fait

Le bloc III est complet : vous savez recueillir des besoins, les écrire sans ambiguïté, et les structurer en trois diagrammes utiles. Le quoi est fixé. Le bloc IV attaque le comment : la qualité du code lui-même.

Le chapitre 6 apprend à écrire un code lisible — car un logiciel se lit dix fois plus qu'il ne s'écrit — et le chapitre 7, à le concevoir pour qu'il résiste au changement. Le diagramme de classes que vous venez de voir y trouvera un prolongement naturel : bien découper en classes, c'est déjà de la conception.

À retenir

Flashcards · 4 cartes

À quoi sert le diagramme de cas d'utilisation, et de quoi est-il fait ?
Il répond à « qui fait quoi avec le système ». Ingrédients : les ACTEURS (rôles qui interagissent, humains OU non — un abonné, une horloge) et les CAS D'UTILISATION (services rendus, verbe + objet : « emprunter un livre »). On le tire des besoins fonctionnels ; il tient sur une page, valide le périmètre avec le client, et découpe le travail (un cas ≈ une fonctionnalité à développer et tester).
Que représente un diagramme de classes, et comment mène-t-il au code ?
Les objets du domaine : chaque CLASSE est une boîte à trois compartiments (nom, attributs, méthodes), reliée aux autres par des ASSOCIATIONS annotées de multiplicités (un abonné emprunte 0 à 5 livres). En première approche, on identifie les bonnes classes (Livre, Abonné, Emprunt), leurs attributs et liens principaux. Le passage au code est presque mécanique : chaque classe du diagramme devient une classe du programme.
Que montre un diagramme de séquence, et quand l'utilise-t-on ?
L'ORDRE des échanges entre participants, pour UN scénario précis, au fil du temps : chaque participant a une ligne de vie verticale, les messages sont des flèches lues de haut en bas. Il clarifie « comment ça se passe étape par étape » (l'emprunt d'un livre) et aide à repérer les cas où ça se passe mal. On en fait un par scénario important, pas pour tout.
Quelle règle de bon sens gouverne l'usage d'UML, surtout en L1 ?
UML sert à CLARIFIER et à COMMUNIQUER ; dès qu'un diagramme complique au lieu d'aider, on l'abandonne. Un diagramme qu'on ne regardera plus après l'avoir dessiné ne valait pas la peine d'être dessiné. En L1, trois diagrammes maîtrisés (cas d'utilisation, classes, séquence) valent mieux que neuf survolés — le danger est de modéliser plus qu'on ne construit.