1

次のイメージ: (<> は、UML の構成を参照する黒いひし形を示します)

+---+ 0..1   * +---+
| A |<>--------| B |
+---+          +---+

クラス A とクラス B があります。A から B への包含参照が存在し、多重度はバインドされていません。反対の参照の多重度は 0..1 です。

私の質問は次のとおりです。この反対の多重度は間違っている/不可能ではありませんか?! なぜなら Ecore では、封じ込め参照は、B が A として存在する場合にのみ存在できると指定しているからです。したがって、B から A への多重度は常に 1 ですよね?!

0..1 は、B のインスタンスが A を持つかどうかを意味します。

更新: 私の仕事は、次の UML ダイアグラムを Ecore に変換することです

+---+ 0..1   * +---+ *     1  +---+
| A |<>--------| B |--------<>| C |
+---+          +---+          +---+

UML 構成を Ecore にマップする方法がわかりません

  • A から B への格納参照、上限: -1
  • A に対する参照 B の反対、下限 0、上限 1
  • C から B への格納参照、上限: -1
  • B から C への逆参照、下限 = 上限 = 1

私は正しいですか?

4

3 に答える 3

1

UML の意味は、A には多くの B を含めることができ、C には多くの B を含めることができ、B は 0..1 As と正確に 1 つの B を参照できるということです。

B のインスタンスは共有できないため、この UML ダイアグラムは正しくありません (これが合成の意味です)。したがって、リンク BC も 0..1 である必要があり、その場合、A と C の両方からのコンテインメントを使用できます。

于 2012-05-29T20:29:56.400 に答える
0

B のインスタンスは A に含まれていなくても存在できますが、その状態で永続化できないことは確かです(デフォルトの XML/XMI 永続化を使用)。実際、有効なモデルをこの状態にすることができます。

  • Bへの外部参照を持つ他のオブジェクトCがある場合
  • A (およびそのコンテインメントの性質上、B) と C がメモリにロードされ、すべての参照が解決されます。
  • A を編集して B を削除する
  • C は B のインスタンスへの参照を持つようになりますが、そのインスタンスにはコンテナーがなく、C を永続化することはできません (「B はリソースに存在しません」という例外が発生します)。
于 2012-05-29T14:43:54.257 に答える
0

B が EMF リソースのルートである場合、ゼロになる可能性があります。EMF リソース ルートにはコンテナがありません。また、どの EMF モデルもリソース ルートとして機能できます。

于 2012-05-29T14:37:08.653 に答える