web-dev-qa-db-ja.com

UMLカーディナリティを*本当に*書く方法は?

私はUMLカーディナリティについて頻繁に議論しなければならなかったので、UMLカーディナリティの書き方を一度だけ知りたいと思います(したがって、証明とソースは大歓迎です:)

説明したい場合a Motherには複数のChildrenがありますが、a Childには1つだけのMother、私は書くべきですか:

Mother * ---------- 1 Child

または

Mother 1 ---------- * Child

20
sp00m

2番目の母親1 ----------------- 1 .. *子供

抽象構文に関連するすべての図について、 ML仕様 に多くの例があります。

23
Red Beard

もちろん、赤ひげは正しいです、正解は2番目のものです。

これを覚えておくためのヒントとして、英語で考えることをお勧めします。「子供には[〜#〜] one [〜#〜]母親がいる」と言います。この文では、UMLのように、 [〜#〜] one [〜#〜]は母の隣に書かれています。かなり簡単です。

15
Steph

多くの人は、UMLを使い始めたときにこの質問をします。特に、行のどちらの端にいるかに関係なく、名前が常に時計回りに読み取られる別の表記法から来た場合はそうです。それは本当に紛らわしいです!

赤ひげは正しいですが、UML仕様では、関連付けの終わりの情報(つまり、名前と多重度)がどこに書き込まれるかを明示的には述べていませんが、いくつかの場所でそれを暗示しています。たとえば、図7.11(属性を表示)と7.12(矢印の横にある関連付けの終わりとの一方向の関連付けを表示)は、同等のプロパティ表記です。したがって、多重度は実際にプロパティのタイプの隣にあります。

どちらの端にどの多重度があるかを覚える方法の1つは、インスタンスの一方向グラフを想像し、ターゲットを指す矢印の横に数字を書くことです。

ところで、説明的な関連付けの終了名を使用する必要があります。これらは多くの場合、Javaでは属性名、XSDでは要素名などになります。たとえば、Javaでは、Motherクラスに「Set <Child>」タイプの「children」属性がある場合があります。名前を付けないと、望ましくないデフォルト名が付けられることがよくあります。

1
Jim L.