web-dev-qa-db-ja.com

UMLアソシエーションの多重度

アソシエーションの多重度について質問があります。私はそれを理解していますが、例えば私が持っているとしたら:

 ---------            ---------
|         |1      *  |         |
|CLASS    |----------| STUDENT |
|         |          |         |
 ---------            ---------

それは、システムが存在する間の任意の時点で、クラスに少なくとも1人の学生が割り当てられている必要があることを意味しますか、またはシステムが正常に動作している場合、それらの多重度は真である必要がありますか?

オブジェクトの作成の瞬間について疑問に思っていたので、私はこの質問をしています。最初に空のクラスを作成し、次にそれを生徒で埋めます。しばらくの間、クラスは空ですが、作成と入力の間だけ、少なくとも1人の生徒がいます。 1を0..1に変更した場合、空のクラスが存在する可能性があることを示しています。これは(入力の時点で)誤りではありませんが、後で生徒のいないクラスを許可したくありません。

編集:0 .. *を0..1に変更しました。混乱して申し訳ありませんが、現在のようになっているはずです。

17
Andna

つまり、システムが存在する間の任意の時点で、クラスに少なくとも1人の学生が割り当てられている必要があります。または、システムが正常に動作している場合は、これらの多重度が真である必要があります。

それは良い質問です。これは、システムが安定した状態にある場合、すべての学生が正確に1つのクラスに関連付けられている必要があることを意味します。それは次に別の問題を提起します:「安定した状態」を構成するものは何ですか?一般に、UMLはこれを形式化しません。直感的には、進行中のアクティビティがなく、アクティブに状態が変化していることを意味します。 UMLのいくつかのプロファイルは、これをより厳密にしています。たとえば、Executable UMLは、状態のアクションの実行中にシステムがカーディナリティ制約に違反する可能性があることを示しています。ただし、状態アクションが完了すると、システムを有効な状態、つまりすべてのカーディナリティ制約が満たされている状態のままにする必要があります。

データベースはここで良い例えを提供します。システムが安定している場合、DBの制約(null以外のキーや外部キーなど)が当てはまる必要があります。トランザクションの実行中に、制約に一時的に違反する可能性があります。ただし、トランザクションが完了すると、データベースを有効な状態のままにする必要があります。

したがって、示されている例の場合:

  • システムが安定している場合、クラスが生徒なしで存在することは有効です(*は0以上と言います-したがって、クラスに生徒がいる必要はありません)
  • システムが安定している場合、クラスに割り当てられずに学生が存在することは無効です(「1」は正確に1つを意味します)。したがって、「トランザクション」が生徒を作成する場合は、生徒をクラスに関連付ける必要もあります。

hth。

11
sfinnie

システム存在中の任意の時点で、クラスに少なくとも1人の学生が割り当てられている必要があることを意味する線量

これは、複数の生徒に割り当てられたクラスが1つだけであることを意味します。

関連付けの両端には、多重度の上限と多重度の下限がありますが、ほとんどのUMLエディターでは、上限と下限が同じ場合に1つの値しか表示されません。 (0または1)を多数に許可する場合は、次のように記述できます。

0..1      *  
-----------

ここで本当に必要なのは、多対多の関係です...学生は多くのクラスに参加でき、クラスには多くの学生を含めることができます。

1
Dagg Nabbit

いいえ、*は、各クラスに常に少なくとも1人の生徒がいることを意味するものではありません。しかし、逆に、学生からクラスに目を向けると、多様性は、すべての学生が正確に 1つのクラスにいることを意味します。

モデリング上の理由から、1の多重度も*に変更することをお勧めしますが、これはコンテキストによって異なります。

0
Markus