Exo Diagramme de Classes & UML - Free
1) Cas d'utilisation, création d'une formation et ses sessions liées ... 1.1
construire le diagramme de classes relatif à ce cas. On fournit les .... CORRIGE. 1
) Cas ...
part of the document
Énoncé
Contexte de travail
Afin de gérer les inscriptions demployés dune organisation à des sessions de formations, une application réalisée avec un langage de programmation objet est développée. Lorganisme propose un catalogue de formations. Chaque formation, étalée sur plusieurs jours contigus, propose différentes sessions identiques ; seuls le numéro de session, la date de début de session et le nombre de participants maximum diffèrent.
Lors de linscription à une formation, chaque employé classe toutes les sessions par ordre de préférence.
A la clôture des inscriptions de chaque formation, laffectation des participants aux sessions a lieu. Si le nombre de demandes pour une session dépasse le nombre de places disponibles, lancienneté de lemployé dans lentreprise un participant plus « ancien » est prioritaire-. Si un vu pour une session ne peut être satisfait pour un participant, on étend son choix à son deuxième vu de session, et ainsi de suite. On considère pour la suite de létude que deux employés nont jamais la même ancienneté.
Diagramme des cas dutilisation.
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/exonetFormation/ExonetPGFormation_fichiers/image002.gif" \* MERGEFORMATINET
1) Cas d'utilisation, création dune formation et ses sessions liées
Cas dutilisation : création dune formation et ses sessions liées
Acteur principal : lorganisateur des formations
Evénement déclencheur : nouvelle formation
Pré-conditions :
Les informations sur la formation et les sessions sont disponibles
Scénario normal
1. Lorganisateur fournit les informations sur la formation et les sessions
2. Le système enregistre ces informations.
Travail à faire.
1.1 construire le diagramme de classes relatif à ce cas.
On fournit les méthodes principales nécessaires à la réalisation du cas.
Organisme :: ajouterFormation(code entier, libellé chaîne)
leCatalogue.ajouterFormation(code,libellé)
fin
Organisme :: ajouterSession(numéro entier,date Date, nbMax entier, codeF entier)
leCatalogue.ajouterSession(numéro,date,nbMax,codeF)
fin
Catalogue :: ajouterFormation(codeF entier,libellé chaîne)
Formation f
f.init( code,libellé)
lesFormations.ajouter(f) // appel de la méthode ajouter de la collection lesFormations
fin
Catalogue :: ajouterSession(numéro entier, date Date, nbMax entier, codeF entier)
Formation f = getFormation( codeF)
f.ajouterSession(numéro,date,nbMax)
fin
Formation :: ajouterSession(numéro entier, date Date, nbMax entier)
Session s
s.init(numéro, date, nbMax)
mesSessions.ajouter( s ) // apel de la méthode ajouter de la collection mesSessions
fin
1.2 établir le diagramme de séquences
1.3 mettre à jour le diagramme de classes
2) Cas d'utilisation, inscription des employés à une formation
Cas dutilisation : inscription des employés à une formation
Acteur principal : lorganisateur des formations
Evénement déclencheur : demande d'inscription d'un participant
Pré-conditions :
La formation existe ainsi que ses sessions
Scénario normal
1. Lorganisateur fournit les information sur le participant, code de la formation, nom, prénom, ancienneté, les numéros des sessions par ordre préférentiel
2. Le système enregistre le participant pour la formation demandée ainsi que ses vux hiérarchiques de sessions.
Travail à faire.
2.1 proposer un diagramme de classes.
2.2 proposer une répartition des responsabilités à l'aide d'un diagramme de séquence
3) Cas d'utilisation, affectation des inscrits aux sessions dune formation
Cas dutilisation : affectation des inscrits aux sessions dune formation
Acteur principal : lorganisateur des formations
Evénement déclencheur : clôture des inscriptions
Pré-conditions :
La formation existe ainsi que ses sessions
Les inscriptions ont eu lieu, les vux des inscrits ont été exprimés
La formation pourra accueillir tous ses inscrits
Scénario normal
1. Lorganisateur demande laffectation des inscrits aux sessions
2. Le système affecte une session à chaque inscrit selon les vux hiérarchiques exprimés et au privilège de lancienneté dans lentreprise en cas de litige.
Post condition.
Tous les inscrits sont affectés dans des sessions
Description des classes :
classe Participant // Un participant est un employé de lorganisation inscrit à une formation
attributs privés :
nom : chaîne
prénom : chaîne
ancienneté : entier // Ancienneté de lemployé dans lorganisation exprimé en nombre de //jours
laSession : Session // Session de formation affectée à lemployée lors du traitement des //affectations
lesChoix : Collection de Session // Sessions choisies par lemployé lors de son inscription à la formation, classées par ordre de préférence décroissante
méthodes publiques :
procédure init(unNom, unPrénom : chaînes, uneAncienneté : entier, desChoix : Collection de Session)
fonction getChoixSession( index entier) : Session
procédure setLaSession(uneSession Session )
fin classe
Lattribut lesChoix contient les choix de sessions classés par préférence.
classe Session
attributs privés :
numéro : entier
dateDébut : date
nbMax : entier // Nombre de places offertes
lesParticipants : Collection de Participants // Participants retenus pour la session
méthodes publiques :
procédure init(unNuméro : chaîne, uneDate : date, unNb : entier )
fonction getNuméro() : entier
procédure ajouteParticipant (unParticipant : Participant)
fonction estPleine() : booléen
fin classe
classe Formation
attributs privés :
code : chaîne
libellé : chaîne
nbJours : entier // Nombre de jour de la formation , identique pour toute ses sessions
lesInscrits : Collection de Participants // Participants inscrits à la formation
mesSessions : Collection de Sessions // Sessions proposée par la formation
méthodes publiques :
procédure affecteParticipants()
fin classe
Commentaire :
- Une classe Collection est utilisée afin de réaliser les associations de multiplicité n ; lannexe fournit la description de cette classe.
- La méthode Participant :: getChoixSession retourne la session dont lindex représente le numéro de choix, par exemple Participant :: getChoixSession(2) retourne la session choisie en seconde position
- La méthode Session :: ajouteParticipant ajoute un participant à la session
- La méthode Session :: estPleine indique si le nombre dinscrits atteint le maximum toléré.
La méthode Formation :: affecteParticipants réalise laffectation des inscrits à des sessions en fonction de leurs choix et de leurs ancienneté.
Travail à faire
3.1. Etablir le diagramme de classes en faisant figurer les attributs, les valeurs de multiplicité et les sens de navigabilité entre classes.
3.2. Ecrire les méthodes suivantes :
- Participant ::init
- Participant ::getChoixSession
- Session ::ajouteParticipant
- Session ::estPleine
- Formation ::affecteParticipants
Annexe : Classe Collection
Classe Collection
// Classe générique. Un objet de la classe Collection permet de gérer // un ensemble dobjets de même classeFonction cardinal () : entier
// retourne le nombre d'éléments de la collection.Fonction existe (e unObjet : objet) : booléen
// teste si lobjet passé en paramètre fait partie de la collection.Fonction index (e unObjet : objet) : entier
// retourne l'index de lobjet passé en paramètre dans la collection, // le premier objet de la collection a pour index 1.Fonction donnerObjet (e index : entier) : objet
// retourne lobjet qui se trouve à lindex passé en paramètreProcédure ajouter (e unObjet : objet)
// ajoute un objet à la collection.
Procédure trier(e nomChamp : chaîne, e typeTri : caractère)
// trie la collection sur les valeurs de nomChamp, attribut de la classe stockée dans la collection ; typeTri prend « a » pour ascendant et « d » pour descendant
Procédure remplacerA (e index : entier ; e unObjet :objet)
// remplace, au sein de la collection, lobjet figurant à lindex passé en // en paramètre par lobjet passé en paramètre.Procédure enlever (e index : entier)
// supprime de la collection lobjet figurant à lindex passé en paramètreProcédure vider()
// vide le contenu de la collection.Fin classe Collection
Pour instancier une collection : uneCollection : Collection de maClasse
// La collection instanciée contiendra des objets de la classe maClasse
L'avantage de cette classe est de proposer des services d'ajout et de suppression plus simples que la gestion d'un tableau. En outre le problème du dimensionnement de la structure n'est pas à la charge du développeur.
Toute variable d'un type de base (entier, chaîne) peut être considérée comme un objet d'une collection.
CORRIGE
1) Cas d'utilisation, création dune formation et ses sessions liées
1.1 construire le diagramme de classes relatif à ce cas.
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagClasse1Uc1.gif" \* MERGEFORMATINET
1.2 établir le diagramme de séquences
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagSequenceCas1.gif" \* MERGEFORMATINET
1.3 mettre à jour le diagramme de classes
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagClasse2Uc1.gif" \* MERGEFORMATINET
2) Cas d'utilisation, inscription des employés à une formation
2.1 proposer un diagramme de classes.
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagClasse1Uc2.gif" \* MERGEFORMATINET
2.2 proposer une répartition des responsabilités à l'aide d'un diagramme de séquence
Diagramme de séquences version 1
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagSequenceCas2V1.gif" \* MERGEFORMATINET
Ce scénario montre une bonne répartition des responsabilités. Les classes qui créent les différents objets sont celles qui leurs sont liés par une relation d'association
Avantages :
pas de relation de dépendance supplémentaire
très peu de circulation d'objet dans les paramètres des méthodes
le couplage entre classes est réduit aux associations
Inconvénients.
le point de passage pour la création d'un participant est le Catalogue, ce qui peut apparaître formel.
Diagramme de séquences version 2.
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagSequencecas2V2.gif" \* MERGEFORMATINET
Avantages
moins de messages envoyé
c'est l'organisme qui crée le participant
Inconvénients.
couplage plus fort entre classes, ajout de dépendances
passages d'objet dans les méthodes
la méthode getSession doit devenir publique
Voici ce que donnerait le diagramme de classe :
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/diagClasse2Uc2.gif" \* MERGEFORMATINET
3) Cas d'utilisation, affectation des inscrits aux sessions dune formation
3.1. Etablir le diagramme de classes en faisant figurer les attributs, les valeurs de multiplicité et les sens de navigabilité entre classes.
INCLUDEPICTURE "http://grand.patrice.free.fr/ExoUMLformation/exonetFormation/ExonetPGFormation_fichiers/image004.gif" \* MERGEFORMATINET
Commentaires :
- les rôles des classes dans les associations correspondent aux noms des attributs des classes réalisant les associations
- le losange noir indique une composition entre la classe Formation et la classe Session. En effet une formation est « composée » de sessions et la suppression dune formation entraînera la disparition de ses sessions
- la contrainte {ordonné} sur lassociation indique que les choix sont triés par ordre de préférence
- la non-présence de flèche dans une association indique que la navigabilité nest pas restreinte. Ceci est justifié par la présence dans la classe Participant de lattribut laSession et dans la classe Session par la présence de lattribut lesParticipants.
3.2. Ecrire les méthodes suivantes :
- Participant ::init
- Participant ::getChoixSession
- Session ::ajouteParticipant
- Session ::estPleine
- Formation ::affecteParticipants
Procédure Participant::init(unNom, unPrénom : chaîne, uneAncienneté : entier, desChoix : Collection de Session)
Variables :
index : entier
Début
nom(unNom
prénom( unPrénom
mesChoix ( desChoix
laSession ( mesChoix.donnerObjet(1) // valorisation par défaut
FinProcédure
Remarque : lopérateur daffectation nétant pas fourni explicitement par la classe Collection, on a procédé à une affectation élément par élément
Procédure Participant ::getChoixSession( index : entier ) : Session
retourne lesChoix.donnerObjet(index)
FinFonction
procédure Session ::ajouteParticipant (unParticipant : Participant)
lesParticipants.ajoute(unParticipant)
finProcédure
fonction Session ::estPleine() : booléen
retourne lesParticipants.cardinal() = nbMax
finFonction
procédure Formation ::affecteParticipants()
variables :
numChoix, i , nbInscrits: entier
sessionRetenue : Session
unInscrit : Participant
début
lesInscrits.trier(« ancienneté »,d) // on trie sur lancienneté afin de satisfaire les demandes selon ce //critère
nbInscrits ( lesInscrits.cardinal()
pour i(1 jqa nbInscrits
unInscrit(lesInscrits.donnerObjet(i)
numChoix(1
sessionRetenue ( unInscrit.getChoixSession(numChoix)
tant sessionRetenue.estPleine()
numChoix ++
sessionRetenue ( unInscrit.getChoixSession(numChoix)
fin tant que
unInscrit.setLaSession(sessionRetenue) // réalise le lien entre le participant et sa session //définitive, attribut Partcipant :: laSession
sessionRetenue.ajouteParticipant(unInscrit) // ajoute le nouvel inscrit à la collection Session :: //lesParticipants
fin pour
fin procédure
Remarque : dans tous les cas, la priorité daffectation revient à lancienneté, il suffit donc de satisfaire les participants par ordre dancienneté en vérifiant si la session de son premier choix nest pas pleine, et de parcourir éventuellement les choix suivants
Diagramme de Classe & UML DA - IG2
PAGE 13/ NUMPAGES13