Prima correzione (consigliata):
In primo luogo, UML non è Java. La relazione tra Book , Sword o Stuff classi su un lato e Item classe sull'altro è mostrata con un generalization , e non c'è bisogno di etichettare la freccia con Extends . Non c'è alcuna confusione possibile in questo diagramma UML con una relazione di realizzazione (cioè "implementazioni"), poiché quest'ultimo sarebbe mostrato con una linea tratteggiata .
Seconda correzione (richiesta):
La tua narrazione è incoerente con il tuo diagramma. Nella tua domanda hai menzionato un Character che può essere un Monk o un Palladin , ma il tuo diagramma suggerisce che Palladin in un tipo di Monk (in base alla relazione di generalizzazione visualizzata, Monk sarebbe il concetto più generale e Palladin sarebbe un tipo di Mistico più specializzato). Questo è confusionario.
Punto di partenza
Quindi il diagramma di partenza potrebbe essere simile a:
Relazione che vuoi mostrare:
Vuoi mostrare che un Character può avere in qualsiasi momento solo un Item . Quindi, in pratica, questo significa che hai una relazione tra Character e zero o uno ( 0..1 ) Items che può essere letto come "proprietario" (il personaggio possiede un oggetto). Viceversa, un Item può essere posseduto da zero o un Character .
Questo sarebbe mostrato come segue:
Sfortunatamente, questo permetterebbe a qualsiasi personaggio di possedere qualsiasi tipo di oggetto. Se vuoi limitare questo, devi utilizzare un vincolo UML . Questo viene fatto usando una casella di commento e inserisci un vincolo tra parentesi graffe {...} . Il modo formale di fare sarebbe usare il linguaggio OCL. Ma un approccio più pratico è quello di documentare la contraint in lettere semplici:
Qui, il contraint è mostrato sull'associazione. È pratico, dal momento che è possibile aggiungere altri vincoli per altri tipi di personaggi. Tuttavia, potresti anche scegliere di mostrare il vincolo per la classe Monk (e altre classi che hanno le loro associazioni vincolate).