Accueil
   
   
   
   
 

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


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

Enseignants CSC4002

Images/logotelecomsudparis

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.

 
1// Copyright (c) 1999 Brian Wellington (bwelling@xbill.org) 
package org.xbill.DNS; 
import java.io.*; 
import org.xbill.DNS.utils.*; 
5 
public class CNAMERecord extends NS_CNAME_PTRRecord { 
 
private CNAMERecord(Name name, int dclass, int ttl) { 
9        super(name, Type.CNAME, dclass, ttl); 
} 
 
/** 
13 * Creates a new CNAMERecord with the given data 
 * @param target The name to which the CNAME alias points 
 */ 
public CNAMERecord(Name name, int dclass, int ttl, Name target) { 
17        super(name, Type.CNAME, dclass, ttl, target); 
} 
 
protected Record rrFromWire(Name name, int type, int dclass, int ttl, int length, 
21           DataByteInputStream in) throws IOException { 
        return rrFromWire(new CNAMERecord(name, dclass, ttl), in); 
} 
 
25protected Record rdataFromString(Name name, int dclass, int ttl, Tokenizer st, Name origin) 
throws IOException { 
        return rdataFromString(new CNAMERecord(name, dclass, ttl), st, origin); 
} 
29 
}
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 BE

Nous 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)1.

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ée2.

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.

../../CorrigesBE/CBE6-7/Figures/usecase

3.3 Diagramme de classes

La figure suivante présente le diagramme de classes proposé.

../../CorrigesBE/CBE6-7/Figures/diaclas

3.4 Diagramme de machine à états

La figure suivante présente le diagramme de machine à états de la classe « Vol ».

../../CorrigesBE/CBE6-7/Figures/dme

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 ».

../../CorrigesBE/CBE6-7/Figures/dcom

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.

1.Pour simplifier, le tableau ci-dessous n’en représente que quelques-uns.

2.En raison du temps limité, nous ignorons la tenue à jour de la localisation des équipages et le décompte de leurs temps de vol et de repos.