230 likes | 408 Views
Modélisation en UML : Diagramme des classes. Soit le cas ’’Réservation de vols dans une agence de voyage’’ 1° Des compagnies aériennes proposent différents vols. 2° Un vol est ouvert à la réservation et fermé sur ordre de la compagnie.
E N D
Modélisation en UML : Diagramme des classes Soit le cas ’’Réservation de vols dans une agence de voyage’’ 1° Des compagnies aériennes proposent différents vols. 2° Un vol est ouvert à la réservation et fermé sur ordre de la compagnie. 3° Un client peut réserver un ou plusieurs vols, pour des passagers différents. 4° Une réservation concerne un seul vol, et un seul passager. 5° Une réservation peut être annulée ou confirmée. 6° Un vol a un aéroport de départ et un aéroport d’arrivée. 7° Un vol a un jour et une heure de départ et un jour et une heure d’arrivée. 8° Un vol peut comporter des escales dans des aéroports 9° Une escale a une heure d’arrivée et une heure de départ. 10° Chaque aéroport dessert une ou plusieurs villes
Propose 1..* CompagnieAerinne Vol CompagnieAerinne Vol Propose 1..* 1..* affréteur • Modélisation de la phrase : • 1° Des compagnies aériennes proposent différents vols. CompagnieAerienne et Vols sont 2 objets métiers : 2 classes • Un vol est réalisé par une seule compagnie mais partagé par plusieurs affréteurs
CompagnieAerinne Vol CompagnieAerinne Propose 1..* 1..* état (ouvert, fermé) affréteur Propose Vol 1..* 1..* affréteur ouvrirVol( ) fermerVol( ) • Modélisation de la phrase : • 2° Un vol est ouvert à la réservation et fermé sur ordre de la compagnie. • Tout objet peut avoir un état (diagramme d’états). • Dans un diagramme de classes tout concept dynamique est modélisé en opération. • Il faut représenter la 2° phrase par 2 opérations : ouvrirReservation( ) et fermerReservation( ) • Dans quelle classe ? Responsabilité d’une classe • Les opérations sont déclarées dans l’objet dans lequel elles doivent s’exécuter • Les autres pourront déclencher ces opérations par envoi de messages • Le classe CompagnieAerienne a une association avec la classe vol.
CompagnieAerinne Propose 1..* 1..* affréteur Vol dateDepart heureDepart dateArrivee heureArrivee ouvrirVol( ) fermerVol( ) • Modélisation des phrases : • 7° Un vol a un jour et une heure de départ et un jour et une heure d’arrivée. • Les dates et les heures de départ et d’arrivée ne représentent que des valeurs : attributs. • Pour savoir si un élément doit être représenté en attribut ou en objet : • S’il n’ y a que sa valeur qui est intéressante : c’est plutôt un attribut. • Si plusieurs questions peuvent concerner l’élément, alors il faut le représenter en objet.
Vol dateDepart heureDepart dateArrivee heureArrivee aeroportDepart aeroportArivvee Aéroport 2 nom { ordered} ouvrirVol( ) fermerVol( ) • Modélisation des phrases : • 6° Un vol a un aéroport de départ et un aéroport d’arrivée. • Par quoi peut-on représenter l’élément ‘’Aéroport’’ ? 3 réponses sont envisageables : Soit avec une classe et une association de multiplicité 2 Modélisation peu parlante.
AeroportDepart AeroportArrivee Vols dateDepart heureDepart dateArrivee heureArrivee aeroportDepartr aeroportArivvee 1 Aéroport nom 1 ouvrirReservation( ) fermerReservation( ) • Modélisation des phrases : • 6° Un vol a un aéroport de départ et un aéroport d’arrivée. 2. Soit avec 2 classes Modélisation non correcte. Tout aéroport peut être de départ et d’arrivée.
Vol dateDepart heureDepart dateArrivee heureArrivee Départ 1 Aéroport Nom … Arrivée 1 ouvrirVol( ) fermerVol( ) • Modélisation des phrases : • 6° Un vol a un aéroport de départ et un aéroport d’arrivée. 2. Soit avec 2 associations Le rôle de chaque association précise son sens.
Aéroport dessert Ville 1..* • Modélisation des phrases : • 10° Chaque aéroport dessert une ou plusieurs villes • On ne peut pas savoir la multiplicité de ‘’Aéroport’’ 0..* • Si on considère que desservir une ville signifie l’aéroport le plus proche, il n’ en y a qu’un : la multiplicité est de 1 • Si on considère que desservir une ville signifie les aéroports dans un rayon de 35 km : la multiplicité est de 0..*
0..* Vol 0..* dateDepart heureDepart dateArrivee heureArrivee Depart 1 1..* Aéroport 1 nom 0..* 0..* Arrivee ouvrirVol( ) fermerVol( ) 1 Escale heureArrivee heureDepart • Modélisation des phrases : • 8° Un vol peut comporter des escales dans des aéroports • 9° Une escale a une heure d’arrivée et une heure de départ. • Une escale a les propriétés heure d’arrivée et heure de départ, c’est donc un objet. • Quelles sont alors les multiplicités entre ‘’Vols’’ et ‘’Escale’’, entre ‘’Escale’’ et ‘’Aeroport’’ et entre ‘’Aeroport’’ et ’Vols’’ ?
Vol dateDepart heureDepart dateArrivee heureArrivee ouvrirVol( ) fermerVol( ) Départ Aéroport 0..* 1 nom Arrivée 0..* 1 Escale 0..* 0..* {Ordered} Escale heureArrivee heureDepart • Modélisation des phrases : • 8° Un vol peut comporter des escales dans des aéroports • 9° Une escale a une heure d’arrivée et une heure de départ. • ‘’Escale’’ a peu d’informations propres. Elle n’est qu’une partie de ’’Vol’’ . • On peut la représenter comme une spécialisation de ’’Aéroport’’ . Mais elle n’est pas totalement un aéroport. • La meilleure solution serait de la modéliser comme une classe d’association entre et ’Vols’’ et ‘’Aéroport’’.
Réservation Vol concerne dateDepart heureDepart dateArrivee heureArrivee Annuler( ) Confirmer( ) 1 ouvrirVol( ) fermerVol( ) concerne 1 Passager • Modélisation des phrases : • 4° Une réservation concerne un seul vol, et un seul passager. • 5° Une réservation peut être annulée ou confirmée. • La réservation et le passager sont 2 concepts métier : 2 classes d’objets • Un réservation concerne un seul vol et un seul passager: donc 2 associations entre ‘’Vol’’ et ’’Réservation’’ et entre ’’Réservation’’ et ‘’Passager’’. • La 5° phrase se traduit par l’ajout de 2 opérations annuler( ) et confirmer( ) dans ‘’Reservation’’.
1 a effectué 0..* Réservation concerne Vol 0..* 1 0..* concerne Annuler( ) Confirmer( ) 1 Passager Client • Modélisation des phrases : • 3° Un client peut réserver un ou plusieurs vols, pour des passagers différents. • Il faut discerner un client d’un passager
Client nom Prénom adresse téléphone e-mail nom 1..* Propose 1..* CompagnieAerinne départ Réservation Vol 0..* 1 Ville concerne date numéro arrivée dateDepart heureDepart dateArrivee heureArrivee 0..* 1 0..* 1 Annuler( ) Confirmer( ) escale 0..* 0..* 0..* concerne {ordered} 1 Passager nom nom Prénom ouvrirVol( ) fermerVol( ) Aéroport nom 1 a effectué 0..* InfosEscale heureArrivee heureDepart • Le diagramme des classe complet est :
Client nom nom Prénom adresse tél e-mail numéro {reservation.date <= vol.dateDepart} 1..* {frozen} Propose 0..1 CompagnieAerinne départ Réservation Vol 0..* 1 Ville concerne date numéro arrivée dateDepart heureDepart dateArrivee heureArrivee 0..* 1 0..* 1 Annuler( ) Confirmer( ) {frozen} escale 0..* 0..* {ordered} Passager nom nom Prénom ouvrirVol( ) fermerVol( ) Aéroport nom 0..* concerne 1 a effectué 1 0..* • Diagramme des classe complet et annoté InfosEscale heureArrivee heureDepart
Client nom nom Prénom adresse téléphone e-mail 1..* Affréteur numéro 1 Propose {frozen} propose 0..1 ‘’ métaclasse ‘’ VolGenerique CompagnieAérienne départ jour heureDépart heureArrivée /durée périodevalidité {reservation.date <= vol.dateDepart} Réservation 0..* 1 0..* concerne arrivée Ville date numéro 0..* 1 0..* 1 Annuler( ) Confirmer( ) {frozen} escale ouvrirVol( ) fermerVol( ) 0..* 0..* Vol 0..* {ordered} dateDépart dateArrivée concerne {AddOnly} 0..* {frozen} 1 1 ouvrirVol( ) fermerVol( ) décrit Passager nom nom Prénom Aéroport nom 1 a effectué 0..* InfosEscale heureArrivée heureDépart • Le diagramme des classe complet devient :
nom Client nom Prénom adresse tééphonel e-mail 1..* numéro Affréteur 1..* Propose {frozen} propose CompagnieAerinne 0..1 ‘’ metaclasse ‘’ VolGenerique départ {reservation.date <= vol.dateDepart} Ville jour heureDepart heureArrivee /durée periodevalidite Réservation 0..* 1 0..* concerne arrivée date numero 0..* 1 0..* 1 Annuler( ) Confirmer( ) {frozen} escale ouvrirVol( ) fermerVol( ) Vol dateDepart dateArrivee 0..* 0..* 0..* {ordered} concerne {AddOnly} 0..* {frozen} 1 ouvrirVol( ) fermerVol( ) 1 décrit Passager nom nom Prénom Aéroport nom 1 a effectué 0..* InfosEscale heureArrivee heureDepart • Le diagramme des classes peut être réorganisé en packages
Vol Réservations concerne 0..* 1 {frozen} Réservation date numéro Annuler( ) Confirmer( ) Vol dateDepart dateArrivee ouvrirVol( ) fermerVol( ) • Réduirela dépendance mutuelle afin d’augmenter la modularité et l’évolutivité d’une application
Réservations Vol Client nom nom Prénom adresse téléphone e-mail 1..* Affréteur numéro 1 Propose {frozen} propose 0..1 CompagnieAerinne ‘’ metaclasse ‘’ VolGenerique départ jour heureDepart heureArrivee /durée periodevalidite Réservation 0..* 1 0..* concerne Ville arrivée date numéro 1 0..* 1 0..* Annuler( ) Confirmer( ) {frozen} escale ouvrirVol( ) fermerVol( ) 0..* 0..* Vol 0..* dateDepart dateArrivee {ordered} concerne {AddOnly} 0..* {frozen} 1 1 ouvrirVol( ) fermerVol( ) decrit nom Passager nom Prénom Aéroport nom 1 a effectué 0..* InfosEscale heureArrivee heureDepart
ReservationsBus VoyagesBus ReservationBus VoyageEnBus date numéro dateDepart dateArrivee concerne Annuler( ) Confirmer( ) 0..* 1 OuvrirVoyage( ) fermerVoyage( ) {frozen} Généralisation et réutilisation • On veut élargir ce domaine aux voyages par bus que des transporteurs assurent. • Un voyage en bus à une ville de départ et un ville d’arrivée avec des dates et des heures associées. • Un trajet peut comporter des arrêts dans des villes intermédiaires. • Un client peut réserver un ou plusieurs voyages pour un ou plusieurs passagers
ReservationsBus VoyagesBus Client nom Prénom adresse téléphone e-mail Voyagiste ReservationBus date numéro Ville nom Annuler( ) Confirmer( ) 0..* concerne 1..* Passager nom Prénom 1 a effectué 0..* InfosArret heureArrivee heureDepart nom référence 1 Propose {frozen} 0..1 départ VoyageEnBus dateDepart heureDepart dateArrivee heureArrivee /durée concerne 0..* 1 arrivée {frozen} 0..* 1 arrêt ouvrirVoyage( ) fermerVoyage( ) 0..* 0..* {ordered}
Vols ReservationVols Lieux AVION BUS ReservationBus VoyagesBus Fusion des 2 modèles Il faut isoler les classes communes dans des packages Il faut factoriser les propriétés communes
Réservations Client nom Prénom adresse tél e-mail concerne a effectué 0..* 1 1 0..* {frozen} Réservation date numéro Annuler( ) Confirmer( ) ReservationBus (from ReservationsBus) ReservationVol (from ReservationsVols) concerne concerne 1 VoyageEnBus (from VoyagesBus) Vol (from Vols) {frozen} 1 {frozen} Passager nom Prénom Il faut isoler les classes communes dans des packages Classe abstraite
Package généralisé Packages spécialisés Vols VoyagesBus Lieux ReservationsBus Réservations ReservationsVols Package réutilisable