Vous êtes sur la page 1sur 3

M2 RSD : Module INDM

Exercices OCL

Le diagramme de classe ci-dessus décrit un système qui maintient


des informations sur les vols (instances de vol) et les réservations
(instances de réservation). Les passagers sont réservés sur les vols et
se voient attribuer des sièges (instances de FlightSeat) au moment de
la réservation. Un vol est opéré par un avion (instance de
FlightPlane) à une date donnée.
Questions:
1. Spécifiez les invariants suivants en utilisant le langage OCL:
a) Pour un vol donné, l'aéroport d'origine ne doit pas être le même
que celui de la destination.

context Flight
inv: self.origin <> self.destination

b) Si un avion de vol compte plus de 300 places, chacune de ses


sections de vol doit avoir au moins 20 sièges et au plus 100
sièges.

context FlightPlane
inv: if self.numberOfSeats > 300 then
self.FlightSection -> forAll(fs | fs.FlightSeat -> size() > 19 and
fs.FlightSeat -> size() <101)

2. Définissez les nouvelles opérations de requêtes en utilisant OCL,


qui fournissent les informations suivantes à partir du diagramme
de classes:

a) L'ensemble des réservations pour une compagnie aérienne à


une date spécifiée.

context Airline
def: FindBooking(d:Date):Set(Booking) =
self.Flight.FlightPlane -> select(f | f.flydate.equals(d)) ->
collect(Booking)

b) Les sections de vol sur un vol qui ont des places qui n'ont pas été
réservées

context Flight
def: OpenSection():
Set(FlightSection) = self.FlightSection -> select(fs |
fs.FlightSeat -> exists(s | s.Booking->isEmpty())
c) Les sections de vol sur un vol qui ont tous les sièges réservés.

context Flight
def: ClosedSection():Set(FlightSection) = self.FlightPlane.
FlightSection -> select(fs | fs.FlightSeat -> forAll(s |
s.Booking->notEmpty()) )

Vous aimerez peut-être aussi