Puoi usare xor contstraint per modellare esclusivi o. Se conosci davvero le basi, dovresti averlo già visto.
Il resto è semplice. Hai una classe d'ordine che ha uno o più cartoni (1 .. *). È possibile modellare questa associazione con un'aggregazione ma non è specificata esattamente. Tuttavia, non è una composizione, in quanto i cartoni possono sicuramente esistere da soli.
Esistono diverse soluzioni su come modellare il cartone. La prima cosa che mi viene in mente è quella di dividere i cartoni in due tipi. Uno per tipo di birra singola, uno per più tipi di birra. Entrambi derivano da una classe astratta che usa la generalizzazione. L'ordine è associato solo alla classe di cartone astratta.
La cosa con la birra è che potresti dividerlo in una classe astratta e i suoi tipi di birra derivati, ma qui non è davvero necessario. Quindi potresti semplicemente creare tre diverse classi di birra. Il primo cartone (tipo di birra singola) è associato a tutte e tre le classi di birra con la molteplicità 6 e vincolato da vincoli xor tra le tre associazioni. L'altro cartone (tre tipi di birra) è anche associato a tutti e tre i tipi di birra. Tuttavia, non è necessario il vincolo xor e la molteplicità è 2 per ciascuna associazione.
Esistono modi decisamente più eleganti per modellarlo, ma almeno questo dovrebbe essere considerato corretto.