 |
 |
TP13-14 : TP de synthèse
Tableaux de service des navigants Air France
Enseignants CSC4002

CSC 4002
Octobre 2015
Revision :
1567
suivant
1 Questions de cours
En partant de la classe CNAMERecord dont le code source est donné ci-après,
répondez aux questions suivantes. Les questions 1 à 6 doivent être répondues
au plus en trois lignes.
- Question 1 (1pt) :
- Quel doit être le nom du fichier source qui contient
cette classe ?
- Question 2 (1pt) :
- Sachant que la variable d’environnement
CLASSPATH contient la chaîne de caractères
suivante : « /usr/local/java:. » dans quel(s)
répertoire(s) peut se trouver ce fichier ?
- Question 3 (1pt) :
- À quelle classe fait référence le mot réservé
super de la ligne 9 ou 17 ?
- Question 4 (1pt) :
- Combien doit-on passer de paramètres pour créer un
objet de la classe CNAMERecord lorsque
l’on est hors de la classe ?
- Question 5 (1pt) :
- Quelles classes peuvent utiliser la méthode
rrFromWire ?
- Question 6 (1pt) :
- On désire ajouter une méthode public String toString() à la classe CNAMERecord. Cette méthode doit décrire l’objet par
une chaîne de caractères, et en particulier le nom de sa classe. Écrire le
corps de la méthode toString().
2 Rappel du sujet du BENous avons réalisé
l’analyse d’un cas d’étude lors du bureau d’étude de
synthèse dont nous rappelons ci-après le sujet ainsi que la correction que nous
en avons faite.
L’équipage d’un avion est toujours constitué
d’un pilote, d’un copilote et de plusieurs personnels naviguants et
commerciaux (PNC). Chacune de ces personnes est identifiée par son nom et sa
fonction. L’équipage d’un avion est reconstitué pour chacun de ses
vols.
Chaque membre d’équipage doit être opérationnel sur
deux catégories d’avions (par exemple, le PNC Richard est opérationnel
sur Airbus A320 et Boeing 747). Chaque catégorie d’avions requiert un
nombre de PNC dans son équipage oscillant entre un minimum et un maximum (par
exemple, les PNC des Airbus A320 doivent être entre six et huit, et ceux
d’un B747 entre 12 et 16).
Voici ci-dessous un extrait du tableau de service de quelques
employés de la compagnie AIR FRANCE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Avion |
Vol |
Dest |
Date |
Catégorie |
Site |
Nom |
Fonction |
|
|
|
|
|
|
|
|
|
13562 |
AF347 |
Londres |
11/10/06 |
A320 |
Orly |
Corinne |
Pilote |
|
|
|
|
|
|
|
|
|
13562 |
AF347 |
Londres |
11/10/06 |
A320 |
Orly |
Amy |
Copilote |
|
|
|
|
|
|
|
|
|
13562 |
AF347 |
Londres |
11/10/06 |
A320 |
Orly |
Maureen |
PNC |
|
|
|
|
|
|
|
|
|
13562 |
AF347 |
Londres |
11/10/06 |
A320 |
Orly |
Richard |
PNC |
|
|
|
|
|
|
|
|
|
13562 |
AF347 |
Londres |
11/10/06 |
A320 |
Orly |
Ben |
PNC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32156 |
AF545 |
New-York |
12/10/06 |
B747 |
Roissy |
Nicolas |
Pilote |
|
|
|
|
|
|
|
|
|
32156 |
AF545 |
New-York |
12/10/06 |
B747 |
Roissy |
Jean-Marc |
Copilote |
|
|
|
|
|
|
|
|
|
32156 |
AF545 |
New-York |
12/10/06 |
B747 |
Roissy |
Ségolène |
PNC |
|
|
|
|
|
|
|
|
|
32156 |
AF545 |
New-York |
12/10/06 |
B747 |
Roissy |
François |
PNC |
|
|
|
|
|
|
|
|
|
32156 |
AF545 |
New-York |
12/10/06 |
B747 |
Roissy |
Fabien |
PNC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
L’objectif du système à modéliser est de constituer le
tableau de service. Les membres de l’équipage peuvent visualiser les vols
sur lesquels ils sont affectés. L’administrateur du système peut créer et
supprimer des entités dans le système. Le manager peut ajouter et supprimer des personnes dans un
équipage pour un vol donné (un vol est désigné par un numéro de vol et une
date). Les données du vol sont archivées après le vol pour une
année.
3 Résultat de l’analyse UML
3.1 Liste des classes
Les classes et
— attributs — obtenus
après analyse du texte sont les suivants :
- Équipage
— auMin, auMax — la
classe équipage regroupe 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 d’association entre un
avion et un ensemble de membres d’équipage. Un vol se déroule à une date
donnée.
Nous décidons aussi d’appeler le système global
TableauNavigants.
3.2 Cas d’utilisation
La figure suivante présente les acteurs et les cas
d’utilisation du système.
3.3 Diagramme de classes
La figure suivante présente le diagramme de classes
proposé.
3.4 Diagramme de machine à états
La figure suivante présente le diagramme de machine à états
de la classe « Vol ».
3.5 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 ».
4 Questions de l’étude de cas
- Question 1
- Donnez en Java tous les attributs de la classe
Vol. Proposez un constructeur.
- Question 2
- Donnez en Java tous les attributs de la classe
MembreÉquipage. Vous devez réaliser
l’association avec la classe CatégorieAvion avec une collection. Proposez un
constructeur et une méthode equals.
- Question 3
- Proposez un constructeur pour la classe Pilote
- Question 4
-
En considérant que la classe TableauNavigants
utilise un vecteur appelé personnel pour
stocker la collection des membres d’équipage. Réalisez le corps de la
méthode de prototype suivant : MembreÉquipage
chercherMembre(MembreÉquipage membre).
Pour cette méthode, nous supposons qu’il est possible
que des objets de type MembreÉquipage existent
sans être référencés dans la collection personnel de la classe TableauNavigants, et cela, même si le diagramme de classes
l’interdit par la présence de la composition entre la classe TableauNavigants et la classe MembreÉquipage. C’est de la programmation défensive :
même si la composition est mal programmée (des objets MembreÉquipage existent en dehors de la collection
personnel), les objets trouvés sont
effectivement dans la collection.
Par conséquent, l’objectif de la méthode chercherMembre est de tester si un objet égal à celui
fourni en argument de la méthode est membre de la collection et, si c’est
le cas, de donner l’objet qui est dans la collection. Sinon, elle
retourne null.
- Question 5
- Écrivez le corps de la méthode affecterPNCVol appelée dans le diagramme de communications
correspondant au cas d’utilisation affecterPNCVol. La méthode affecterPNCVol de la classe TableauNavigants lève une exception appelée TableauNavigantsException pour décrire les cas
d’erreur. Elle fait aussi appel à des méthodes de la classe Equipage qui lèvent des exceptions de type EquipageException. La méthode affecterPNCVol relaiera ces exceptions. En outre, la valeur
booléenne retournée permet de savoir si l’équipage est au complet suite à
l’ajout du membre. Le prototype de la méthode affecterPNCVol est le suivant :
public boolean affecterPNCVol(Vol v, PNC pnc)
throws TableauNavigantsException,
EquipageException
- Question 6
-
Nous désirons intégrer un invariant à la classe MembreÉquipage. Nous avons choisi l’invariant suivant
: le nombre de qualifications de la personne est entre 0 et 2. Écrivez
l’invariant.
Dans cette question, nous supposons que la collection
utilisée dans la classe MembreÉquipage ne
contient pas deux éléments égaux.
- Question 7
-
Nous ajoutons maintenant des tests d’invariant sur les méthodes de la
classe MembreÉquipage qui modifient le nombre
de qualifications. Ces méthodes lèveront donc l’exception InvariantBroken.
Voici les nouveaux prototypes des méthodes à votre
disposition :
- MembreÉquipage(String nom, String
prenom) throws InvariantBroken
- public boolean
addQualification(CatégorieAvion type) throws InvariantBroken, EquipageException
- public boolean
delQualification(CatégorieAvion type, boolean fromType) throws EquipageException, InvariantBroken
Proposez un ensemble de tests unitaires pour vérifier que
cet invariant n’est pas violé, puis implantez-les en utilisant le canevas
logiciel JUnit. Voici les quatre tests :
- la construction d’un objet correct (c.-à-d.,
l’invariant est vérifié) ;
- l’ajout d’une qualification sans dépasser le
maximum est permis ;
- l’ajout d’une qualification déjà présente est
interdit ;
- l’ajout d’une qualification au delà du maximum
n’est pas permis.
|
|