Analyse, Conception et Programmation par objets Exercices UML : diagrammes de classes Centre de Calcul Fabien Moutarde et Norbert Kajler fmoutarde, kajlerg@cc.ensmp.fr 60 Bd. Saint Michel 75272 Paris Cedex 06 (Dernière mise à jour le 7 septembre 2008)
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 :. 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.
2
3
Deuxième partie CORRECTIONS Avions pilote Avion {fonction == pilotage} MembreEquipage modèle : string appareil 0.. Aéroport Vol origine destination numéro : integer 0.. 0.. 0.. copilote fonction : foncequipage hôtesses {fonction == service} {Nombre d hotesses dépend du modèle d Avion...} 2.. FIG. Un premier corrigé possible pour les avions Avion MembreEquipage appareil B747 A320 Concorde Pilote Hôtesse heuresdevol : integer hôtesses.. pilote copilote 0.. Aéroport origine destination 0.. Vol numéro : integer 0.. 0.. personnel 0.. Equipage {Nombre d hôtesses dépend du type d appareil} FIG. 2 Un second corrigé possible pour les avions 4
2 Catalogue de pièces détachées Pièce Catalogue +afficher() item 0.. /prix : real +calculerprix() +afficher() +afficherdétails() composant 2.. {disjoint, complete} PièceElémentaire coûtunitaire : real fournisseur : string +calculerprix() +afficherdétails() PièceComposite coûtassemblage : real +calculerprix() +afficherdétails() FIG. 3 Un corrigé possible pour le catalogue de pièces détachées 5
3 Société humaine Personne age : integer {(card_enfant > 0) ==> (card_mari == )} enfant {complete,disjoint} mère Homme mari épouse 0.. 0.. Femme {(card_mari == ) ==> (age >= 8)} FIG. 4 Un premier corrigé possible pour la société humaine {card_mari== ==> sexe==féminin && age>=8} {épouse.sexe == féminin} mariage {mari.sexe == masculin} {card_épouse== ==> sexe==masculin} épouse 0.. 0.. Personne age : integer sexe : genre parent 2 enfant mari {(card_enfant>0 && sexe==féminin) ==> card_mari==} FIG. 5 Un second corrigé possible pour la société humaine 6
4 Billeterie SNCF ticket Billeterie +délivrerbillet() +fairestatistiques() localisation Gare Billet prixkilometrique : real tauxréduction : real tarif : real +calculertarif() itinéraire origine destination Trajet BilletTGV nombrekilomètres : integer +longueur():integer supplémentkilométrique : real horaire : heure jour : date +calculertarif() calculermajoration() FIG. 6 Un corrigé possible pour la billeterie SNCF 7