Diagramme de séquences version 1
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 :
Inconvénients.
Diagramme de séquences version 2.
Avantages
Inconvénients.
Voici ce que donnerait le daigramme de classe :
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 d’une
formation entraînera la disparition de ses sessions -
la contrainte {ordonné} sur
l’association 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é n’est pas restreinte.
Ceci est justifié par la présence dans la classe Participant de l’attribut
laSession et dans la classe Session par la présence de l’attribut lesParticipants. |
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 : l’opérateur
d’affectation 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 l’ancienneté 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é d’affectation revient à l’ancienneté, il suffit donc
de satisfaire les participants par ordre d’ancienneté en vérifiant si
la session de son premier choix n’est pas pleine, et de parcourir éventuellement
les choix suivants |