web-dev-qa-db-ja.com

一般化によるクラスの関連付けを拡張するUML

下の画像のような単純な概念があります。基本的に3種類中1種類のアイテムと2種類中1種類のキャラクターがあります。すべての一般化はばらばらです。

enter image description here

私がやろうとしているのは、UML表記で、キャラクターは常に1つのアイテムしか運ぶことができないが、モンクは本またはスタッフしか運ぶことができず、パラディンはあらゆる種類のアイテム(本、剣、またはスタッフ)。

前述の制約を維持するために、これらのクラスをこのように関連付ける方法がわかりません。このUML構成でも可能ですか?

1
Regs

最初の修正(推奨):

まず、UMLはJavaではありません。一方のBookSword、またはStuffクラスともう一方のItemクラスの関係は、 一般化 で示されます。 、矢印にExtendsのラベルを付ける必要はありません。後者は 点線で と表示されるため、このUML図では実現関係(つまり「実装」)と混同することはありません。

2回目の修正(必須):

あなたの物語はあなたの図と矛盾しています。質問の中で、CharacterまたはMonkPalladinについて言及しましたが、図では、PalladinMonk(表示する一般化関係によると、Monkはより一般的な概念であり、Palladinはより特殊な種類のモンクです)。これは紛らわしいです。

開始点

したがって、開始図は次のようになります。
enter image description here

表示したい関係:

Charactercanがいつでも1つのItemしか持たないことを示したいと思います。したがって、実際には、これは、Characterと0または1(0..1Itemsの間に関係があり、「所有」(キャラクターがアイテムを所有している)と読み取ることができることを意味します。 )。逆に、Itemは0または1つのCharacterが所有できます。

これは次のように表示されます。
enter image description here

残念ながら、これにより、どのキャラクターもあらゆる種類のアイテムを所有できるようになります。これを制限したい場合は、 ML制約 を使用する必要があります。これは、コメントボックスを使用して行われ、中括弧{...}の間に制約を設定します。正式な方法は、OCL言語を使用することです。しかし、より実用的なアプローチは、制約を平易な文字で文書化することです。

enter image description here

ここでは、制約が協会に示されています。他の種類の文字に他の制約を追加できるので、実用的です。ただし、代わりにMonkクラス(および関連付けが制約されている他のクラス)の制約を表示することもできます。

2
Christophe