Diagramma classi per scenario vagone-treno

0

Ho dei dubbi sull'approccio a questo.

Ho una classe di treno e una classe di vagoni. Esistono tre tipi di carro: FirstClass, TouristClass e DiningCar. Ognuno di questi tipi ha le stesse proprietà e metodi, l'unica differenza tra loro è la loro molteplicità con la classe Train.

Ogni classe di treno ha un solo vagone DiningCar, almeno un carro FirstClass e almeno un carro TouristClass.

Qual è il modo migliore per farlo. Le classi FirstClass, TouristClass e DiningCar dovrebbero ereditare dalla classe Wagon, renderle vuote e quindi metterle in relazione con la classe del treno? O c'è un altro approccio?

    
posta allnex 13.11.2017 - 18:09
fonte

1 risposta

1

Non fornirò il diagramma perché si tratta ovviamente di una sorta di compiti a casa. Ma qui alcuni suggerimenti:

Le basi

Each train class has one and only one DiningCar wagon, at least one FirstClass wagon and at least one TouristClass wagon.

Innanzitutto, intuitivamente, DiningCar , FirstClass e TouristClass offrono diversi servizi e comportamenti. Ad esempio, non ti aspetteresti che FirstClass offra una funzione getNumberOfFreeRestaurantTables() , mentre ci si aspetterebbe che DiningCar faccia. Quindi specializzato il Wagon sembra una buona idea.

Each train class has one and only one ... at least one ... and at least one ....

Devi tradurlo in associazioni tra Train e le tue specializzate Wagon classes. Per ogni associazione puoi specificare la molteplicità .

Il più elaborato

Poiché esiste un'associazione a parte intera tra Train e il suo Wagons , puoi prendere in considerazione l'utilizzo di un aggregazione al posto di una normale associazione.

Dato che un carro potrebbe essere rimosso da un treno e collegato a un altro treno, possiamo ipotizzare che l'aggregazione sia l'alternativa corretta e che composition non soddisfa i bisogni.

Ci sono altri approcci?

Certo! Non potresti specializzarti su Wagon e lasciare che Wagon abbia una proprietà che indichi di che tipo si tratta.

L'associazione di aggregazione tra Train e Wagon dovrebbe quindi avere una molteplicità che dice che ci sono almeno il 3% diWagons (uno di ciascuno).

Ma come esprimeresti che esiste esattamente un% di% di% su almeno uno dell'altro tipo? Bene, potresti considerare di scrivere un vincolo per l'associazione. L'espressione OCL per esprimere formalmente questo vincolo è comunque molto meno auto-esplicativa del nostro approccio iniziale con la specializzazione ...

    
risposta data 13.11.2017 - 20:03
fonte

Leggi altre domande sui tag