Analyse, Conception et Programmation par objets

Transcription

Analyse, Conception et Programmation par objets
Analyse, Conception
et Programmation par objets
Exercices “UML” : diagrammes de classes
Centre de Calcul
Fabien Moutarde et Norbert Kajler
fmoutarde, [email protected]
60 Bd. Saint Michel 75272 Paris Cedex 06
(Dernière mise à jour le 17 septembre 2008)
1 Avions
Une compagnie aérienne veut développer un logiciel de gestion intégrée des avions, des équipages et des
vols. Sa flotte est actuellement constituée de trois modèles d’avion : Airbus A320, Boeing 747 et Concorde.
L’équipage d’un avion se compose toujours d’un pilote, d’un copilote et de plusieurs hôtesses (en nombre
dépendant du type d’avion). Chacune de ces personnes est identifiée par son nom et sa fonction. Les vols
sont identifiés par la tour de contrôle de l’aéroport d’Orly par leur numéro, origine, et destination.
Proposer un (ou plusieurs) diagramme(s) de classes répondant à ce cahier des charges.
2 Catalogue de pièces détachées
Une entreprise veut informatiser son catalogue de pièces détachées. Elle distingue deux types de pièces :
d’une part les pièces élémentaires (achetées telles quelles à un fournisseur extérieur), et d’autre part les
pièces composites obtenues par assemblage d’autres pièces (élémentaires ou composites). Chaque pièce est
identifiée par son nom. Le prix de revient d’une pièce élémentaire est simplement son coût unitaire, tandis
que celui d’une pièce composite est la somme d’un coût d’assemblage et des prix des pièces la composant.
On doit pouvoir :
– calculer automatiquement le prix des pièces composites,
– afficher le catalogue (noms et prix de revient des pièces),
– afficher les informations détaillées sur une pièce (fournisseur, ou bien prix d’assemblage et liste des
composants, selon son type).
Trouver un diagramme de classes répondant à ce cahier des charges.
3 Société humaine
Dans une certaine société humaine (plutôt traditionnaliste...), les lois réglementant les relations entre personnes (hommes, femmes, enfants, ...) sont les suivantes :
a) Aucune personne ne peut être à la fois un homme et une femme.
b) Chaque personne est obligatoirement un homme ou une femme.
c) Les femmes ont au plus un mari.
d) Seuls les hommes peuvent avoir une épouse, qui doit être une femme.
e) Les hommes ont au plus une épouse.
f) Une mère est obligatoirement une femme mariée.
g) Seules les femmes peuvent avoir un mari qui doit être un homme.
h) Seules les femmes majeures peuvent être mariées.
Imaginer un diagramme de classes satisfaisant l’ensemble de ces exigences.
4 Billetterie SNCF
Dans une gare, on veut construire un système permettant de délivrer les billets de train et faire des statistiques
journalières (nombre de billets délivrés, nombre de billets par catégorie, liste des gares de départ, nombre
de billets pour un parcours supérieur à 250km, etc...). Les règles suivantes devront être prises en compte :
1. Le coût d’un trajet est proportionnel au nombre de kilomètres parcourus.
2. Les trajets en TGV sont majorés d’un supplément proportionnel au nombre de kilomètres parcourus
et d’un coût de réservation dépendant de l’horaire et du trajet.
3. Un client peut bénéficier d’une réduction (pourcentage), qui ne s’applique pas aux suppléments TGV.
Donner un diagramme de classes du futur système.
1
2
3
Deuxième partie
CORRECTIONS
1 Avions
pilote
1
{fonction == pilotage}
Avion
MembreEquipage
modèle : string
appareil
0..1
1
Aéroport
nom : string
copilote nom : string
fonction : foncEquipage
1
0..1
2..*
Vol
origine
{fonction == service}
*
destination
hôtesses
0..1
*
1
1
0..1
{Nombre d’hotesses dépend
du modèle d’Avion...}
numéro : integer
F IG . 1 – Un premier corrigé possible pour les avions
1
Avion
MembreEquipage
appareil
B747
A320
nom : string
Hôtesse
Pilote
Concorde
heuresDeVol : integer
pilote
Aéroport
1
nom : string
1
1..*
copilote
0..1
0..1
Equipage
*
1
personnel
Vol
*
1
0..1
0..1
origine
1
hôtesses
numéro : integer
0..1
{Nombre d’hôtesses dépend
du type d’appareil}
destination
F IG . 2 – Un second corrigé possible pour les avions
4
2 Catalogue de pièces détachées
Pièce
Catalogue
item
0..1
nom : string
/prix : real
+calculerPrix()
+afficher()
+afficherDétails()
*
+afficher()
composant
2..*
*
{disjoint, complete}
PièceElémentaire
PièceComposite
coûtUnitaire : real
fournisseur : string
+calculerPrix()
+afficherDétails()
coûtAssemblage : real
+calculerPrix()
+afficherDétails()
F IG . 3 – Un corrigé possible pour le catalogue de pièces détachées
5
3 Société humaine
Personne
{(card_enfant > 0) ==> (card_mari == 1)}
nom : string
age : integer
*
enfant
{complete,disjoint}
1 mère
Homme
mari
épouse
0..1
0..1
Femme
{(card_mari == 1) ==> (age >= 18)}
F IG . 4 – Un premier corrigé possible pour la société humaine
{card_mari==1
==> sexe==féminin && age>=18}
{épouse.sexe == féminin}
{mari.sexe == masculin}
mariage
0..1
épouse 0..1
{card_épouse==1
==> sexe==masculin}
mari
Personne
age : integer
sexe : genre
parent 2
*
enfant
{(card_enfant>0 && sexe==féminin)
==> card_mari==1}
F IG . 5 – Un second corrigé possible pour la société humaine
6
4 Billeterie SNCF
Billeterie
1
*
localisation
+délivrerBillet()
+faireStatistiques()
ticket
Gare
1
*
nom : string
Billet
origine
prixKilometrique : real
tauxRéduction : real
tarif : real
+calculerTarif()
1
1
destination
*
*
*
1
itinéraire
Trajet
nombreKilomètres : integer
+longueur():integer
BilletTGV
supplémentKilométrique : real
horaire : heure
jour : date
+calculerTarif()
calculerMajoration()
F IG . 6 – Un corrigé possible pour la billeterie SNCF
7