Exercices UML avec Corrections - Diagrammes UML avec Mermaid.js
Exercices UML avec Corrections
5 exercices complets avec corrections détaillées utilisant Mermaid.js pour les diagrammes UML
Thème: Système de Gestion de Bibliothèque
Exercice 1 : Système de Gestion de Bibliothèque
Énoncé détaillé :
Une bibliothèque municipale souhaite informatiser sa gestion. Le système doit permettre aux bibliothécaires de gérer les livres, les adhérents et les emprunts. Les lecteurs peuvent s'inscrire, rechercher des livres, emprunter et rendre des ouvrages. Le système doit également envoyer des rappels automatiques pour les retours en retard.
Fonctionnalités principales :
Gestion des adhérents (inscription, modification, suppression)
Gestion du catalogue (ajout, modification, suppression de livres)
Gestion des emprunts (emprunt, retour, prolongation)
Recherche de livres par titre, auteur, catégorie
Envoi de rappels automatiques pour les retours en retard
Génération de rapports statistiques
Contraintes :
Un adhérent peut emprunter maximum 5 livres
La durée d'emprunt est de 14 jours
Un livre peut être réservé si indisponible
Des pénalités s'appliquent après 30 jours de retard
Question 1 : Créer le diagramme de classes pour ce système. Identifiez toutes les classes nécessaires avec leurs attributs et méthodes. Définissez les relations entre les classes (héritage, association, agrégation, composition).
Question 2 : Créer le diagramme de cas d'utilisation pour ce système. Identifiez tous les acteurs et cas d'utilisation. Montrez les relations entre acteurs et cas d'utilisation, ainsi que les relations entre cas d'utilisation (inclusion, extension).
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Emprunter un livre". Montrez l'interaction complète entre l'adhérent, l'interface, le service d'emprunt, le catalogue et la base de données.
flowchart LR
%% Actors
A[Adhérent] ---|Interagit| Sinscrire[(S'inscrire)]
A --- Rechercher[(Rechercher livre)]
A --- Emprunter[(Emprunter livre)]
A --- Rendre[(Rendre livre)]
A --- Prolonger[(Prolonger emprunt)]
B[Bibliothécaire] --- Ajouter[(Ajouter livre)]
B --- Supprimer[(Supprimer livre)]
B --- Gerer[(Gérer adhérents)]
B --- Rapports[(Générer rapports)]
C[Système] --- Rappels[(Envoyer rappels automatiques)]
%% Includes
Emprunter -->|include| VerifDispo[(Vérifier disponibilité)]
Emprunter -->|include| VerifLimite[(Vérifier limite adhérent)]
%% Extends
Rendre -->|extend| Penalite[(Appliquer pénalité)]
%% Note
note right of Penalite
Condition: retard > 30 jours
end note
Diagramme de Séquence - "Emprunter un livre"
sequenceDiagram
actor Adherent
participant InterfaceWeb
participant ServiceEmprunt
participant Catalogue
participant BaseDonnees
Adherent->>InterfaceWeb: Sélectionne livre
InterfaceWeb->>ServiceEmprunt: Demande emprunt(livreId, adherentId)
ServiceEmprunt->>Catalogue: VerifierDisponibilite(livreId)
Catalogue->>BaseDonnees: Requete disponibilite
BaseDonnees-->>Catalogue: Resultat verification
Catalogue-->>ServiceEmprunt: Disponible(true/false)
ServiceEmprunt->>BaseDonnees: VerifierLimite(adherentId)
BaseDonnees-->>ServiceEmprunt: Nombre livres empruntes
alt Limite non atteinte ET livre disponible
ServiceEmprunt->>BaseDonnees: CreerEmprunt(empruntData)
BaseDonnees-->>ServiceEmprunt: Confirmation creation
ServiceEmprunt->>Catalogue: MettreAJourDisponibilite(livreId)
Catalogue->>BaseDonnees: Update disponibilite
ServiceEmprunt->>InterfaceWeb: Confirmation succes
InterfaceWeb->>Adherent: Affiche confirmation
else Conditions non remplies
ServiceEmprunt->>InterfaceWeb: Message erreur
InterfaceWeb->>Adherent: Affiche erreur
end
Thème: Plateforme E-commerce
Exercice 2 : Plateforme E-commerce
Énoncé détaillé :
Une entreprise souhaite développer une plateforme e-commerce pour vendre des produits électroniques. La plateforme doit permettre aux clients de naviguer dans le catalogue, ajouter des produits au panier, passer des commandes et effectuer des paiements sécurisés. Les administrateurs peuvent gérer le catalogue, suivre les commandes et gérer les stocks.
Fonctionnalités principales :
Gestion du catalogue produits (catégories, descriptions, prix, images)
Gestion du panier d'achat
Processus de commande (validation, paiement, expédition)
Système de notation et avis clients
Gestion des stocks et alertes de réapprovisionnement
Interface d'administration complète
Contraintes :
Support de multiples moyens de paiement
Gestion des promotions et codes réduction
Système de newsletter et notifications
Historique des commandes pour chaque client
Stock minimum pour déclencher alertes
Question 1 : Créer le diagramme de classes pour cette plateforme e-commerce. Incluez les classes pour les produits, clients, commandes, paiements, stocks, etc. Définissez les relations et multiplicités appropriées.
Question 2 : Créer le diagramme de cas d'utilisation pour la plateforme. Identifiez les acteurs (client, administrateur, système de paiement) et tous les cas d'utilisation principaux et secondaires.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Passer une commande". Montrez l'interaction complète depuis l'ajout au panier jusqu'à la confirmation de commande et le traitement du paiement.
Correction :
Diagramme de Classes
classDiagram
class Client {
-id: Integer
-nom: String
-email: String
-adresse: String
-telephone: String
-dateInscription: Date
-historiqueCommandes: List~Commande~
+sInscrire()
+modifierProfil()
+consulterHistorique()
}
class Produit {
-id: Integer
-nom: String
-description: String
-prix: Double
-categorie: String
-stockDisponible: Integer
-imageURL: String
+mettreAJourStock()
+appliquerRemise()
}
class Panier {
-id: Integer
-listeItems: List~ItemPanier~
-totalHT: Double
-totalTTC: Double
-dateCreation: Date
+ajouterItem()
+supprimerItem()
+calculerTotal()
}
class ItemPanier {
-quantite: Integer
-prixUnitaire: Double
+modifierQuantite()
+calculerSousTotal()
}
class Commande {
-id: Integer
-dateCommande: Date
-statut: String
-total: Double
-adresseLivraison: String
+validerCommande()
+annulerCommande()
+suivreCommande()
}
class Paiement {
-id: Integer
-montant: Double
-methodePaiement: String
-datePaiement: Date
-statut: String
+traiterPaiement()
+rembourser()
}
class Stock {
-quantiteDisponible: Integer
-seuilAlerte: Integer
-dateDerniereMaj: Date
+verifierStock()
+genererAlerte()
}
class Promotion {
-code: String
-reductionPourcentage: Double
-dateDebut: Date
-dateFin: Date
-utilisationsRestantes: Integer
+verifierValidite()
+appliquerReduction()
}
Client "1" -- "0..*" Commande : passe
Client "1" -- "1" Panier : possède
Panier "1" o-- "0..*" ItemPanier : contient
ItemPanier "1" -- "1" Produit : concerne
Commande "1" *-- "1" Paiement : inclut
Produit "1" *-- "1" Stock : gère
Commande "0..*" -- "0..*" Produit : comprend
Panier "0..*" -- "0..1" Promotion : utilise
Diagramme de Cas d'Utilisation
usecaseDiagram
actor Client
actor Administrateur
actor SystemePaiement
actor SystemeNotification
Client --> (Parcourir catalogue)
Client --> (Ajouter au panier)
Client --> (Consulter panier)
Client --> (Passer commande)
Client --> (Effectuer paiement)
Client --> (Consulter historique commandes)
Client --> (Laisser avis)
Administrateur --> (Gérer produits)
Administrateur --> (Gérer commandes)
Administrateur --> (Gérer stocks)
Administrateur --> (Gérer promotions)
Administrateur --> (Consulter rapports)
SystemePaiement --> (Traiter paiement)
SystemeNotification --> (Envoyer confirmation commande)
(Passer commande) ..> (Valider panier) : include
(Passer commande) ..> (Traiter paiement) : include
(Traiter paiement) ..> (Appliquer promotion) : extend
note right of (Appliquer promotion)
Condition: code valide
end note
(Gérer stocks) ..> (Vérifier seuil alerte) : include
Un hôpital souhaite informatiser sa gestion administrative et médicale. Le système doit gérer les patients, les médecins, les rendez-vous, les dossiers médicaux, les prescriptions et la facturation. Différents profils d'utilisateurs ont accès à différentes fonctionnalités selon leurs rôles.
Fonctionnalités principales :
Gestion des patients (inscription, dossier médical, antécédents)
Gestion des médecins et personnel médical
Planification des rendez-vous et consultations
Gestion des prescriptions et traitements
Système de facturation et prise en charge assurance
Accès sécurisé aux dossiers médicaux
Contraintes :
Confidentialité stricte des données médicales
Plusieurs spécialités médicales avec agendas distincts
Prescriptions avec posologies et durées précises
Intégration avec les systèmes d'assurance santé
Alertes pour les examens et traitements programmés
Question 1 : Créer le diagramme de classes pour ce système hospitalier. Incluez les classes pour les patients, médecins, rendez-vous, prescriptions, dossiers médicaux, etc. Respectez les contraintes de confidentialité et de sécurité.
Question 2 : Créer le diagramme de cas d'utilisation pour le système. Identifiez les différents acteurs (médecins, infirmiers, patients, administrateurs) et leurs cas d'utilisation respectifs.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Programmer un rendez-vous". Montrez l'interaction entre le patient/secretaire, le système de planification, la vérification de disponibilité et la confirmation du rendez-vous.
Une entreprise de développement logiciel souhaite créer une application de gestion de projet agile. L'application doit permettre la gestion des équipes, des tâches, des sprints, des jalons et du reporting. Elle doit supporter les méthodologies Scrum et Kanban avec des tableaux visuels et des indicateurs de performance.
Fonctionnalités principales :
Gestion des projets et équipes de travail
Gestion des tâches et user stories
Tableaux Kanban et burndown charts
Gestion des sprints et rétrospectives
Système de notification et commentaires
Rapports et indicateurs de performance
Contraintes :
Support des méthodologies Scrum et Kanban
Gestion des dépendances entre tâches
Estimation des charges et priorités
Intégration avec des outils de versioning (Git)
Accès multi-appareils et synchronisation temps réel
Question 1 : Créer le diagramme de classes pour cette application de gestion de projet. Incluez les classes pour les projets, équipes, membres, tâches, sprints, etc. Modélisez les relations entre ces éléments.
Question 2 : Créer le diagramme de cas d'utilisation pour l'application. Identifiez les acteurs (chef de projet, développeurs, product owner) et leurs interactions avec le système.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Créer un sprint". Montrez l'interaction entre le chef de projet, l'interface, le service de sprint, la sélection de tâches et la validation du sprint.
Correction :
Diagramme de Classes
classDiagram
class Projet {
-id: Integer
-nom: String
-description: String
-dateDebut: Date
-dateFinPrevu: Date
-statut: String
-methodeAgile: String
+demarrerProjet()
+terminerProjet()
+genererRapport()
}
class Equipe {
-id: Integer
-nom: String
-membres: List~Membre~
-roles: String
-dateCreation: Date
+ajouterMembre()
+retirerMembre()
}
class Membre {
-id: Integer
-nom: String
-prenom: String
-email: String
-competences: String
-roleDansEquipe: String
+participerCeremonie()
+mettreAJourStatut()
}
class Tache {
-id: Integer
-titre: String
-description: String
-priorite: String
-estimationCharge: Integer
-statut: String
-dateCreation: Date
+mettreAJourStatut()
+assignerMembre()
}
class UserStory {
-id: Integer
-titre: String
-description: String
-valeurMetier: String
-critereAcceptation: String
+definirCritere()
+validerStory()
}
class Sprint {
-id: Integer
-numero: Integer
-dateDebut: Date
-dateFin: Date
-objectif: String
-statut: String
-velocity: Integer
+demarrerSprint()
+terminerSprint()
+calculerVelocity()
}
class KanbanBoard {
-id: Integer
-colonnes: List~String~
-tachesAffichees: List~Tache~
+deplacerTache()
+ajouterColonne()
}
class RapportPerformance {
-id: Integer
-type: String
-periode: String
-donnees: String
-dateGeneration: Date
+genererRapport()
+exporterDonnees()
}
Projet "1" -- "1" Equipe : a
Equipe "1" -- "0..*" Membre : comprend
Projet "1" *-- "0..*" Sprint : organise
Sprint "1" -- "0..*" Tache : contient
Tache "0..*" -- "1" UserStory : realise
Projet "1" *-- "1" KanbanBoard : utilise
KanbanBoard "1" -- "0..*" Tache : affiche
Projet "1" -- "0..*" RapportPerformance : genere
Tache "0..*" -- "0..*" Tache : depend
Membre "0..*" -- "0..*" Tache : assigne
Diagramme de Cas d'Utilisation
usecaseDiagram
actor ChefProjet
actor Developpeur
actor ProductOwner
actor MembreEquipe
actor SystemeNotification
ChefProjet --> (Creer projet)
ChefProjet --> (Creer sprint)
ChefProjet --> (Assigner taches)
ChefProjet --> (Gerer equipe)
ChefProjet --> (Generer rapports)
Developpeur --> (Mettre à jour tache)
Developpeur --> (Deplacer tache Kanban)
Developpeur --> (Ajouter commentaire)
Developpeur --> (Signaler bloqueur)
ProductOwner --> (Definir user stories)
ProductOwner --> (Prioriser backlog)
ProductOwner --> (Valider taches)
ProductOwner --> (Participer retrospective)
MembreEquipe --> (Consulter taches assignees)
MembreEquipe --> (Participer ceremonies)
MembreEquipe --> (Mettre à jour avancement)
SystemeNotification --> (Envoyer alertes)
(Creer sprint) ..> (Selectionner taches) : include
(Creer sprint) ..> (Definir objectif) : include
(Mettre à jour tache) ..> (Estimer completion) : extend
note right of (Estimer completion)
Condition: tache en cours
end note
(Generer rapports) ..> (Calculer metriques) : include
Une compagnie de transport souhaite développer un système de réservation en ligne pour ses services de bus, trains et covoiturage. Le système doit permettre aux passagers de rechercher des trajets, comparer les options, réserver des places, effectuer des paiements et recevoir des confirmations. Le système doit aussi gérer les horaires, les disponibilités et les tarifs dynamiques.
Fonctionnalités principales :
Recherche et comparaison de trajets multi-modal
Réservation de places avec choix de sièges
Gestion des tarifs dynamiques et promotions
Système de paiement sécurisé multi-moyens
Gestion des horaires et disponibilités en temps réel
Notifications et rappels automatiques
Contraintes :
Intégration avec plusieurs compagnies de transport
Gestion des correspondances et temps de transit
Tarification dynamique selon la demande
Système de points de fidélité pour les clients réguliers
Gestion des remboursements et modifications
Question 1 : Créer le diagramme de classes pour ce système de réservation. Incluez les classes pour les trajets, véhicules, passagers, réservations, tarifs, paiements, etc.
Question 2 : Créer le diagramme de cas d'utilisation pour le système. Identifiez les acteurs (passager, agent, système de paiement) et tous les cas d'utilisation liés à la réservation et à la gestion.
Question 3 : Créer le diagramme de séquence pour le cas d'utilisation "Réserver un trajet". Montrez l'interaction complète depuis la recherche jusqu'à la confirmation de réservation et l'émission de billet.