OCL in un modello di dominio per acquisire le regole per la costruzione di case e hotel a Monopoli

1

Forse è un vecchio cavallo da battere (non ancora morto?), ma mi chiedo se OCL consenta di modellare il problema delle regole di business per la costruzione di case e hotel nel gioco di Monopoli in un modello di dominio (diagramma di classe concettuale , separato da un'implementazione).

Ho fornito le regole dopo il mio ingenuo tentativo, ma non sono sicuro di come catturare gli aspetti dell'ordine in OCL. Cioè, si devono possedere tutte le proprietà di un gruppo di colori, quindi costruire le case su tali proprietà "in modo uniforme" (vedi sotto), quindi sostituire le 4 case in una proprietà con un hotel, ecc. C'è anche il caso di un "carenza di alloggi" perché ci sono solo un totale di 32 case e 8 hotel nel gioco. Mi rendo conto che questa domanda è ambiziosa, ma sto cercando di capire se è possibile in OCL e di avere alcune indicazioni su dove andare.

Finora, sono riuscito a specificare il fatto che una proprietà non può avere case e hotel contemporaneamente con l'opzione {xor} tra due associazioni.

Modellofattocon PlantUml / PlantText .

Ecco le regole riguardanti Case e Alberghi, citate da un sito di fan .

HOUSES

When a player owns all the properties in a colour-group they may buy houses from the Bank and erect them on those properties.

If you buy one house, you may put it on any one of those properties. The next house you buy must be erected on one of the unimproved properties of this or any other complete colour-group you may own.

The price you must pay the Bank for each house is shown on your Title Deed card for the property on which you erect the house. The owner still collects double rent from an opponent who lands on the unimproved properties of there complete colour-group.

Following the above rules, you may buy and erect at any time as many houses as your judgement and financial standing will allow. But you must build evenly, i.e., you cannot erect more than one house on any one property of any colour-group until you have built one house on every property of that group. You may then begin on the second row of houses, and so on, up to a limit of four houses to a property. For example, you cannot build three Houses on one property if you have only one house on another property of that group.

As you build evenly, you must also break down evenly if you sell houses back to the Bank (see SELLING PROPERTY).

HOTELS

When a player has four houses on each property of a complete colour-group, they may buy a hotel from the Bank and erect it on any property of the colour-group. They return the four houses from that property to the Bank and pay the price for the hotel as shown on the Title Deed card. Only one hotel may be erected on any one property.

NB. Questo non è un compito a casa, anche se potrebbe essere un grande forse per un corso di specializzazione?

    
posta Fuhrmanator 11.07.2017 - 21:57
fonte

1 risposta

3

Con OCL, puoi documentare gli invarianti di classe come ad esempio i vincoli strutturali nel diagramma delle classi, come ad esempio:

  • " una proprietà costruibile può avere 1 hotel o 0,4 case " (ovvero il tuo {xor} tra due link)
  • " 1 casa o più, e 1 hotel, richiedono che tutte le altre proprietà costruibili dello stesso gruppo (colore) appartengano allo stesso giocatore ". Ciò richiede che tu identifichi il gruppo e la proprietà del giocatore nel tuo diagramma di classe e usi le operazioni di raccolta OCL (ad esempio forAll e Exist )
  • " avere n case su una proprietà richiede che tutte le altre proprietà dello stesso gruppo abbiano almeno n-1 case " (stesso principio come sopra)
  • " avere un hotel in una proprietà richiede che tutte le altre proprietà dello stesso gruppo abbiano almeno 4 case o un hotel ".

Tuttavia, i vincoli UML in un diagramma di classe non sono realmente progettati per documentare i vincoli dinamici in un diagramma di classi.

Ovviamente, OCL consente di definire le condizioni pre e post sui metodi (ad esempio pre e post parole chiave). Questo potrebbe esprimere " prima di aggiungere un hotel, avresti bisogno di 4 case sulla proprietà, e che dopo aver aggiunto l'hotel non hai più nessuna casa ". Tuttavia, questo tipo di vincoli rende i diagrammi rapidamente illeggibili per i comuni mortali. E la leggibilità è lo scopo principale dei diagrammi UML.

Un approccio più piacevole sarebbe utilizzare un diagramma di stato per documentare le transizioni di stato ammissibili e i vincoli corrispondenti. Ciò ha il vantaggio di fare una chiara distinzione tra vincoli strutturali e vincoli comportamentali.

    
risposta data 12.07.2017 - 00:02
fonte

Leggi altre domande sui tag