Corrige du be6?
Transcription
Corrige du be6?
Corrigé du BE6–7 Équipe enseignante Revision : 1510 CSC 4002 Télécom SudParis Octobre 2015 Corrigé du BE6–7 1 Corrigé-type 1.1 Analyse du texte Les classes et — attributs — obtenus après analyse du texte sont les suivants : • Équipage — — la classe équipage sert à regrouper l’ensemble des membres d’équipage (pilote, copilote et PNC) qui participent à un vol (à une date donnée) ; • Avion — — un avion appartient à une catégorie donnée, il participe à plusieurs vols ; • Pilote — — un membre d’équipage qui a pour métier pilote ; • Copilote — — un membre d’équipage qui a pour métier copilote ; • PNC — — un membre d’équipage qui a pour métier PNC ; • MembreÉquipage — nom, prénom — ; • CatégorieAvion — nom, nbPNCmin, nbPNCmax — un membre d’équipage ne peut voler que sur deux catégories d’avion. Plusieurs avions peuvent appartenir à la même catégorie, d’où la nécessité de créer une classe CatégorieAvion ; • Vol — numéro, site, destination, date — un vol est une classe entre un avion et un ensemble de membres d’équipage. Un vol se déroule à une date donnée. Remarque : Nous faisons la distinction entre les classes Pilote et Copilote car ce sont des métiers différents dans les équipages et nous souhaitons éviter qu’un équipage ne comprenne que des pilotes ou que des copilotes. Erreurs fréquemment observées : • confondre acteur du cas d’utilisation avec classe du système (administrateur et manager se retrouvent par erreur en classes) ; • oublier de mettre la catégorie d’avion comme classe du système. En effet, comment alors préciser qu’un membre d’équipage peut voler sur deux catégories d’avion ? • oublier de mettre l’avion comme classe du système. En effet, comment vérifier qu’une instance d’avion n’est pas affectée sur deux vols simultanément ? Variantes possibles : • la classe Équipage peut être omise. Le diagramme de classes est à modifier en conséquence ; • une classe Aéroport peut être ajoutée avec les associations a pour origine et a pour destination. Le diagramme de classes est à modifier en conséquence. Barème : • sur 2 points : – – – – 1.2 0.5 0.5 0.5 0.5 classe Vol, 3 attributs de la classe Vol, classe Avion, classe CatégorieAvion. Diagramme de cas d’utilisation La figure suivante présente les acteurs et les cas d’utilisation du système. Télécom SudParis — Équipe enseignante — Octobre 2015 — CSC 4002 2 Corrigé du BE6–7 ajouter un membre d’équipage supprimer un membre d’équipage créer un vol Administrateur du système supprimer un vol créer une catégorie d’avion supprimer une catégorie d’avion créer un avion Manager supprimer un avion affecter un membre d’équipage à un vol retirer un membre d’équipage d’un vol afficher les données d’un vol afficher mes vols Membre d’équipage Erreurs fréquemment observées : • ne pas respecter les notations du diagramme de cas d’utilisation, • oublier un acteur, • ne pas détailler les entités à créer et à supprimer. Variantes possibles : • introduire une généralisation spécialisation entre acteurs (même si au niveau métier cela n’a pas de sens). Barème : • sur 3 points : – – – – 0.5 respect des notations UML (il faut les 4 : bonhomme, trait, système et oval), 0.5 trouver 3 acteurs (0 si seulement deux acteurs), 0.5 affecter les cas d’utilisation aux bons acteurs, 0.5 cas d’utilisation pour « ajout et suppression d’entités dans le système » (pas bon si on ne peut pas créer d’avion ou de vol, pas bon si entité non détaillée), – 0.5 cas d’utilisation « affecter un membre d’équipage à un vol », – 0.5 cas d’utilisation « visualiser mes vols ». 1.3 Diagramme de classes Les figures suivantes présentent les diagrammes de classes proposés, en version simple (sans utilisation des concepts avancés des classes) et complète (utilisant les concepts avancés du diagramme de classes). Télécom SudParis — Équipe enseignante — Octobre 2015 — CSC 4002 3 Corrigé du BE6–7 TableauNavigants Avion 1 *possède * * 1 CatégorieAvion est assuré avec 0..2 peut voler sur * * Vol * MembreÉquipage * * * 1 Équipage est assuré par * Pilote PNC 0..1 0..1 Copilote * * a pour co−pilote a pour PNC 0..* a pour pilote TableauNavigants Avion 1 *possède * 1 0 1 0 1 0 1 0 * 1 CatégorieAvion est assuré avec peut voler sur 0..2 * * Vol * MembreÉquipage * * * 1 Équipage est assuré par * Pilote 0..1 PNC 0..* Copilote 0..1 * * a pour co−pilote a pour PNC a pour pilote Télécom SudParis — Équipe enseignante — Octobre 2015 — CSC 4002 4 Corrigé du BE6–7 Erreurs fréquemment observées : • B747 et A320 ne peuvent pas être des classes. En effet, il faudrait alors changer le modèle UML à chaque fois qu’une nouvelle catégorie d’avion sort sur le marché ; • appeler Équipage la classe MembreÉquipage. C’est une erreur de français, mais qui peut porter à conséquence : on oubliera alors la multiplicité « * » ; • Administrateur et Manager ne sont pas des classes, ce sont des acteurs extérieurs au système ; • oublier d’avoir une classe d’accès aux différents éléments du système (patron de conception Façade, qui est représenté par la classe TableauNavigants sur le corrigé). Barème : • sur 5 points : – – – – – – – 0.5 nom des associations (3 minimum), 1.0 multiplicité (2 oublis tolérés), 1.0 généralisation spécialisation (présence d’une généralisation spécialisation et notation correcte), 0.5 agrégation, 0.5 point d’entrée au système avec le patron « Façade », 0.5 association « Avion — CatégorieAvion », 0.5 association « MembreÉquipage — CatégorieAvion » (ou vers « Avion » pour ceux qui ont mélangé « CatégorieAvion » et « Avion ») avec multiplicité « 2 », – 0.5 association « Avion — Vol ». Variantes possibles : • pas de classe Équipage, mais trois associations depuis la classe Vol vers les membres d’équipage. 1.4 Diagramme de machine à états La figure suivante présente le diagramme de machine à états de la classe Vol. [durée archive>1an] entry:destructeur() PeutVoler ajout: ajouterMembre() [nbPNC>=nbmin && pilote != null && copilote != null] te bu l vo qu é id lé nu n la vo Archivé vol qui débute suppression: supprimerMembre() [tailleÉquipage=nbmax] EnDestruction || copilote == null] Équipage [pilote = null || copilote = null] ajout: ajouterMembre() suppression: supprimerMembre() vol annulé entry: constructeur() [nbPNC<nbmin || pilote == null [tailleÉquipage<nbmax] ÉquipageEn Construction EnCréation Équipage AuComplet suppression: supprimerMembre() entry:archiver() vol annulé Erreurs fréquemment observées : • avoir un état qui ne peut jamais aller vers l’état final, Télécom SudParis — Équipe enseignante — Octobre 2015 — CSC 4002 5 Corrigé du BE6–7 • • • • se tromper de classe, ne pas faire apparaître d’état Archivé, ne pas faire apparaître les actions (qui découlent pourtant du diagramme de cas d’utilisation), ajout possible de PNC mais sans retrait possible. Barème : • sur 3 points : – 0.5 états initial et final, – 1 flèches de passage d’un état à un autre cohérentes permettant d’aller de l’état initial à l’état final, – 0.5 événements de passage d’un état à un autre, – 0.5 état Archivé, – 0.5 ajout et suppression de membres d’équipage. 1.5 Conception des classes Dans le diagramme de classes avancé, voici les attributs correspondant aux associations de la classe Vol : − avion : @Avion − équipage : @Équipage Erreurs fréquemment observées : • pas fait, • non conforme au diagramme de classes, • collection pour traduire une multiplicité « * » qui n’existe pas. Variantes possibles : − avion : @Avion − équipage : collection @MembreÉquipage Barème : • sur 3 points : – – – – 1.6 0.5 visibilité privé, 0.5 « @ » pour référence sur, 1 attribut d’association vers Avion, 1 attribut d’association vers Équipage (ou 3 associations si pas de classe Équipage) Diagramme de communications ou de séquence La figure suivante présente le diagramme de communications associé au cas d’utilisation « affecter un PNC à un vol ». Télécom SudParis — Équipe enseignante — Octobre 2015 — CSC 4002 6 Corrigé du BE6–7 3:pv=peutVolerSur(ca):booléen[!complet] pnc:MembreEquipage affecterPNCVol(pnc,vol) :TableauNavigants :Avion 1.1.1:max=getNBMaxPNC():int 1.1:max=getNBMaxPNC():int 2.1:ca=getCatégorieAvion() :CatégorieAvion 1:complet=équipageAuComplet():booléen 2:ca=getCatégorieAvion():CatégorieAvion[!complet] 4:addPNC(pnc)[!complet && pv] 5:auComplet=équipageAuComplet()[!complet && pv] ca:CatégorieAvion vol:Vol 1.2:nb=getNBPNC():int 4.1:addPNC(pnc) :Équipage Erreurs fréquemment observées : • sur les diagrammes de communications : erreur dans la numérotation des messages, • sur les diagrammes de séquence : erreur dans l’ordre temporel des messages, • oubli de classes participant à la collaboration. Variantes possibles : • présenter le diagramme de séquences, • pas de classe Équipage, directement la classe PNC. Barème : • sur 4 points : – 0.5 notation UML des objets participants (« : » et soulignés), – 0.5 présence des objets nécessaires au fonctionnement de la séquence ou des communications (un oubli toléré), – 0.5 ordre des messages (diagramme de séquence) ou numéro de séquence (diagramme de communications), – 1.0 interactions pour connaître la taille max équipage et taille actuelle (au moins 3 interactions), – 0.5 interactions pour vérifier que le PNC peut voler sur la catégorie d’avion, – 0.5 interaction pour ajouter le PNC à l’équipage, – 0.5 paramètres sur les appels d’opérations. Télécom SudParis — Équipe enseignante — Octobre 2015 — CSC 4002 7