Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 1213 minIntermédiaire

UML à l'examen : E6 et E7 SLAM, méthode et pièges

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • repérer où et comment UML intervient à l'E6 et à l'E7 ;
  • lire un diagramme de classes fourni pour écrire du code ;
  • justifier tes choix de conception devant une commission ;
  • éviter les erreurs de notation qui coûtent des points.

3 exercices corrigés

Au BTS SIO SLAM, UML intervient à deux épreuves : à l'E6 (conception et développement d'applications, bloc 2), où tes diagrammes figurent dans le dossier de tes réalisations et où tu dois modéliser l'évolution que la commission te demande ; et à l'E7 (cybersécurité des services informatiques, écrit de 4 heures), où le dossier documentaire fournit des diagrammes, le plus souvent un diagramme de classes, à lire pour écrire ou corriger du code. Ce chapitre décrit les types de questions, la méthode pour lire un diagramme fourni, les règles pour en dessiner un à la main et les erreurs qui coûtent des points.

Où UML intervient

ÉpreuveCe qu'on te demandeDiagrammes concernés
E6 SLAM, dossierLes éléments techniques de tes deux réalisations : la commission y lit ton besoin et ta conceptionCas d'utilisation, classes, éventuellement déploiement
E6 SLAM, phase 1 (30 min de préparation, 20 min d'entretien)Analyser l'expression des besoins et proposer des spécifications techniques : les classes, associations ou cas d'utilisation que l'évolution ajoute ou modifie, et les justifierClasses, cas d'utilisation, parfois séquence
E6 SLAM, phase 2 (1 h) et recetteRéaliser l'évolution, mettre le diagramme à jour si elle touche la conception, l'expliquer pendant l'entretien d'explicitationClasses surtout
E7 SLAM, écritLire les classes métier fournies pour écrire, compléter ou corriger des méthodes ; parfois compléter un diagramme pour une évolutionClasses surtout, parfois séquence

À l'E6, le référentiel évalue notamment la compétence « Modéliser une solution applicative » : la commission attend une modélisation conforme au besoin et cohérente avec ton code. Le détail des compétences est dans le cours Épreuve E6 SLAM.

À l'E7, les sujets donnent régulièrement un diagramme des classes métier de l'application étudiée, accompagné d'un extrait de leur code : le sujet de la session 2025, par exemple, fournissait un extrait du diagramme des classes métier d'une application Java et le code de ces classes. Le diagramme n'est pas une fin en soi : c'est la carte qui te permet d'écrire du code juste. Les annales classées par thème sont dans le cours Épreuve E7 SLAM.

Les types de questions

Verbe de la consigneCe qu'on attendExemple
Expliquer, interpréterTraduire une partie du diagramme en phrases, avec les multiplicités« Expliquez la relation entre Commande et LigneCommande. »
JustifierDonner la raison d'un choix de conception« Pourquoi l'attribut solde est-il privé ? », « Pourquoi Utilisateur est-elle abstraite ? »
Compléter, faire évoluerAjouter les classes, attributs, associations et multiplicités qu'exige un nouveau besoin« Complétez le diagramme pour gérer les remboursements partiels. »
Écrire, coderÉcrire une méthode en suivant les associations du diagramme« Écrivez la méthode getMontantTotal() de la classe Facture. »
CorrigerTrouver l'erreur dans un code ou un diagramme, et la corriger« Le test échoue : identifiez l'anomalie. »
Représenter, modéliserProduire un diagramme à partir d'un texte« Représentez les cas d'utilisation du nouveau module. »

Quand le sujet te laisse choisir le formalisme, tu peux répondre en UML ou en Merise, ou par un schéma relationnel textuel pour une base de données. Choisis celui que tu maîtrises le mieux et respecte-le jusqu'au bout.

Lire un diagramme de classes fourni

Avant toute question de code, prends cinq minutes pour lire le diagramme. Elles te feront gagner bien plus.

  1. Repère les classes centrales : celles qui ont le plus d'associations. C'est le cœur du métier (dans AppliFrais, FicheFrais).
  2. Lis chaque association en deux phrases, une dans chaque sens, avec les multiplicités : « une fiche a un visiteur ; un visiteur a zéro ou plusieurs fiches ».
  3. Repère les héritages et les classes abstraites : une méthode écrite dans la mère s'applique aux filles ; une méthode abstraite est redéfinie dans chaque fille.
  4. Note la façon dont les associations sont implémentées dans le code fourni : getLesFiches() renvoie une liste, getVisiteur() un objet. C'est ce que tu utiliseras dans ton code, avec exactement ces noms.
  5. Annote le diagramme sur le sujet : entoure les classes et les méthodes dont tu auras besoin pour chaque question.

Dessiner à la main

À l'écrit de l'E7 comme sur ton brouillon pendant la préparation de la phase 1 de l'E6, tu dessines souvent sans outil de modélisation.

  • Fais propre et grand. Une règle, un crayon, puis le stylo. Laisse de la place entre les classes pour les multiplicités et les noms d'associations.
  • Écris ce que l'italique ne montre pas : {abstract} à côté d'une classe ou d'une opération abstraite, «interface» au-dessus du nom d'une interface.
  • Mets les multiplicités aux deux bouts de chaque association. Une multiplicité oubliée est une information perdue, et le correcteur ne la devinera pas.
  • Soigne les symboles qui changent le sens : triangle creux (héritage), losange plein ou creux (du côté du tout), pointillé (réalisation, dépendance, «include», «extend»). Un losange placé du mauvais côté inverse la relation.
  • Ne recopie pas tout quand on te demande de compléter : redessine les classes concernées par l'évolution, et indique « (classes existantes inchangées) ».
  • Ajoute une phrase d'explication sous un diagramme d'évolution : « Une classe Remboursement est ajoutée car une fiche peut être remboursée en plusieurs fois ; elle porte la date et le montant de chaque versement. » Elle montre ton raisonnement et rattrape une notation maladroite.

Les erreurs qui coûtent des points

ErreurDiagrammeComment l'éviter
Multiplicités recopiées d'un MCD sans les déplacerClassesRelire chaque association en phrases
Clés étrangères (idClient) comme attributsClassesUne association, pas une clé
Attribut et association pour le même lienClassesGarder l'association seule
Losange du côté de la partieClassesLe losange est collé au tout
Héritage utilisé pour « récupérer des attributs »ClassesTest du « est un », sinon association
Attributs publics sans raisonClassesAttributs privés, opérations publiques
Base de données comme acteurCas d'utilisationSeuls les systèmes extérieurs sont acteurs
«extend» du cas de base vers l'extensionCas d'utilisationLa flèche part de l'option
Cas d'utilisation trop fins (« cliquer sur… »)Cas d'utilisationUn objectif de l'acteur
Message vers une opération absente du diagramme de classesSéquenceVérifier chaque message
Jonction (barre) après une décisionActivitéUne fusion (losange)
Transition vers un état d'où l'objet ne devrait pas pouvoir revenirÉtats-transitionsRelire les règles de gestion

À l'E6 : ta conception dans le dossier et pendant l'épreuve

Pour chacune de tes réalisations, ton dossier gagne à contenir :

  • un diagramme de cas d'utilisation, qui montre en une image ce que fait ton application et pour qui ;
  • un diagramme de classes (métier, pas forcément exhaustif), cohérent avec ton code et, si tu as une base de données, avec ton schéma relationnel ;
  • si l'application a un scénario délicat (une authentification, un appel d'API, un traitement en plusieurs étapes), un diagramme de séquence de ce scénario ;
  • éventuellement un diagramme de déploiement, pour montrer où tourne chaque partie.

La commission ne te demande pas les 14 diagrammes. Pendant les deux entretiens, elle te demande de justifier tes choix : « pourquoi une composition ici ? », « que se passe-t-il si la fiche est déjà validée ? ». Un diagramme que tu ne sais pas expliquer fait plus de mal que de bien.

En phase 1, l'expression des besoins porte sur l'une de tes réalisations. Repère d'abord, sur ton propre diagramme de classes, les classes que l'évolution touche, puis esquisse ce qui change : une classe, un attribut, une association avec ses multiplicités, un cas d'utilisation. Cette esquisse est une spécification technique que tu présentes et justifies pendant l'entretien (analyser l'expression des besoins). En phase 2, pendant la réalisation de l'évolution, si elle ajoute une classe ou une association, mets le diagramme à jour : c'est une preuve de méthode, que tu peux montrer à la recette (épreuve E6 SLAM : les évolutions types).

La checklist finale

Avant de rendre un diagramme, vérifie :

  • Classes : noms au singulier ; attributs typés et privés ; opérations avec paramètres et type de retour ; multiplicités aux deux bouts de chaque association ; pas de clé étrangère ; {abstract} et «interface» visibles ; losanges du côté du tout.
  • Cas d'utilisation : acteurs hors du cadre ; cas nommés « verbe + complément » ; flèches «include» et «extend» dans le bon sens ; pas d'ordre d'étapes.
  • Séquence : chaque message correspond à une opération ; fragments avec leurs gardes ; l'acteur ne parle qu'à l'interface.
  • Activité : un nœud initial, au moins un nœud final ; gardes exclusives et complètes ; fusion après une décision, jonction après une bifurcation.
  • États-transitions : état initial ; chaque transition porte son événement ; les transitions interdites n'existent pas ; cohérence avec les opérations de la classe.

Exercices

Exercice 1 sur 3 Justifier des choix de conception Réussi À revoir

À propos du diagramme de classes d'AppliFrais (chapitre 5), réponds en deux ou trois phrases chacune, comme à l'entretien d'E6.

  1. Pourquoi Utilisateur est-elle une classe abstraite ?
  2. Pourquoi la relation entre FicheFrais et LigneFraisHorsForfait est-elle une composition, et celle entre Region et Visiteur une agrégation ?
  3. Pourquoi la quantité est-elle dans LigneFraisForfait et pas dans FicheFrais ou FraisForfait ?
  4. Pourquoi montantValide a-t-il la multiplicité [0..1] ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. On ne crée jamais un utilisateur qui ne serait ni visiteur ni comptable : Utilisateur regroupe ce qu'ils ont en commun (identité, authentification). Elle déclare l'opération abstraite Role(), que chaque fille redéfinit ; le code qui affiche le rôle traite tous les utilisateurs de la même façon (polymorphisme).
  2. Une ligne hors forfait n'a pas de sens sans sa fiche, n'appartient qu'à elle et disparaît avec elle : c'est une composition, et c'est la fiche qui crée ses lignes. Un visiteur, lui, existe indépendamment de sa région : si la région est supprimée ou redécoupée, il est rattaché à une autre ; c'est une agrégation (une association simple serait aussi défendable).
  3. La quantité dépend du couple fiche-forfait : une fiche a une quantité différente pour chaque forfait, et un forfait a une quantité différente sur chaque fiche. Elle appartient donc à l'association, d'où la classe-association LigneFraisForfait.
  4. Le montant validé n'existe pas tant que la fiche n'est pas validée : la multiplicité 0..1 dit qu'il peut être absent. En C#, il devient un decimal?, que le code doit tester avant de l'utiliser.

Tu avais trouvé ?

Exercice 2 sur 3 Lire un extrait de sujet Réussi À revoir

Un sujet fournit ce diagramme de classes (extrait) : Agence "1" ──── "0..*" Vehicule ; Vehicule "1" ──── "0..*" Location ; Location "0..*" ──── "1" Client ; Location a les attributs - dateDebut : Date, - dateFin : Date [0..1], - kmDepart : int, - kmRetour : int [0..1] et les opérations + getVehicule() : Vehicule, + estEnCours() : boolean ; Vehicule a + getLesLocations() : List<Location> et Agence a + getLesVehicules() : List<Vehicule>.

  1. Que signifie dateFin : Date [0..1] ?
  2. Quel chemin suivre pour compter les locations en cours d'une agence ?
  3. Écris la méthode nbLocationsEnCours() : int de la classe Agence, en Java ou en C#.
Voir la réponseMasquer la réponse de l'exercice 2
  1. La date de fin est facultative : elle est vide tant que le véhicule n'est pas rendu. Une location sans date de fin est en cours.
  2. Agence → getLesVehicules() (liste, 0..*) → pour chaque véhicule, getLesLocations() (liste, 0..*) → pour chaque location, estEnCours(). Deux boucles imbriquées.
  3. En Java :
java
public int nbLocationsEnCours() {
    int nb = 0;
    for (Vehicule v : this.getLesVehicules()) {
        for (Location l : v.getLesLocations()) {
            if (l.estEnCours()) {
                nb++;
            }
        }
    }
    return nb;
}

On utilise estEnCours(), qui existe, plutôt que de tester dateFin soi-même : la règle reste à un seul endroit. En C#, la même méthode s'écrit avec foreach (Vehicule v in GetLesVehicules()).

Tu avais trouvé ?

Exercice 3 sur 3 Corriger une copie Réussi À revoir

Pour la question « Complétez le diagramme pour qu'un client puisse laisser un avis (une note de 1 à 5 et un commentaire) sur chaque location terminée », un candidat a ajouté : une classe Avis avec + note : int, + commentaire : string, + idLocation : int, et une flèche d'héritage de Avis vers Location. Corrige sa réponse.

Voir la réponseMasquer la réponse de l'exercice 3
  • Avis n'est pas une location : l'héritage est faux. C'est une association : Location "1" ──── "0..1" Avis (une location a au plus un avis ; un avis concerne une location). Une composition, losange du côté de Location, est défendable : l'avis n'existe pas sans sa location.
  • idLocation est une clé étrangère : à supprimer, l'association suffit.
  • Les attributs doivent être privés : - note : int, - commentaire : string. On peut ajouter la contrainte {1 <= note <= 5} et, pour la date, - dateAvis : Date.
  • La règle « sur chaque location terminée » ne se dessine pas par une multiplicité : on l'écrit dans une note, ou dans l'opération qui crée l'avis (+ laisserAvis(note : int, commentaire : string) dans Location, qui vérifie que la location n'est plus en cours).

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Exercices UML corrigés type BTS SIORevoir le sommaire du cours