下の画像のような単純な概念があります。基本的に3種類中1種類のアイテムと2種類中1種類のキャラクターがあります。すべての一般化はばらばらです。
私がやろうとしているのは、UML表記で、キャラクターは常に1つのアイテムしか運ぶことができないが、モンクは本またはスタッフしか運ぶことができず、パラディンはあらゆる種類のアイテム(本、剣、またはスタッフ)。
前述の制約を維持するために、これらのクラスをこのように関連付ける方法がわかりません。このUML構成でも可能ですか?
最初の修正(推奨):
まず、UMLはJavaではありません。一方のBook
、Sword
、またはStuff
クラスともう一方のItem
クラスの関係は、 一般化 で示されます。 、矢印にExtends
のラベルを付ける必要はありません。後者は 点線で と表示されるため、このUML図では実現関係(つまり「実装」)と混同することはありません。
2回目の修正(必須):
あなたの物語はあなたの図と矛盾しています。質問の中で、Character
またはMonk
のPalladin
について言及しましたが、図では、Palladin
がMonk
(表示する一般化関係によると、Monk
はより一般的な概念であり、Palladin
はより特殊な種類のモンクです)。これは紛らわしいです。
開始点
表示したい関係:
Character
canがいつでも1つのItem
しか持たないことを示したいと思います。したがって、実際には、これは、Character
と0または1(0..1
)Items
の間に関係があり、「所有」(キャラクターがアイテムを所有している)と読み取ることができることを意味します。 )。逆に、Item
は0または1つのCharacter
が所有できます。
残念ながら、これにより、どのキャラクターもあらゆる種類のアイテムを所有できるようになります。これを制限したい場合は、 ML制約 を使用する必要があります。これは、コメントボックスを使用して行われ、中括弧{...}
の間に制約を設定します。正式な方法は、OCL言語を使用することです。しかし、より実用的なアプローチは、制約を平易な文字で文書化することです。
ここでは、制約が協会に示されています。他の種類の文字に他の制約を追加できるので、実用的です。ただし、代わりにMonk
クラス(および関連付けが制約されている他のクラス)の制約を表示することもできます。