ECoreエンティティ間に参照を作成する場合、参照を「包含」としてマークする可能性があります。誰かが私を簡単な言葉で説明できますか?単純な参照と封じ込めの違いは何ですか?私がこれまでに見つけた定義と説明は、私にとってはうまくいきませんでした。
2 に答える
参照:参照は、単純な「AはBを知っている」関係です。個別の参照は相互に影響を与えません。AはBを知ることができ、BはCを知ることができます。したがって、Aがある場合は、Bを介してCに移動できます。参照を削除すると、A、B、およびCは引き続き存在し、お互いを知ることができなくなります。 。
封じ込め:封じ込めとは、「AにはBがある」という種類の関係です。通常、リストに使用されます。たとえば、「Aには複数のBがあります」。ECore / EMFは、すべてのオブジェクトをある格納容器から別の格納容器に移動するなど、そのようなコレクションに対してアトミックコマンドを実行できます。また、含まれるオブジェクトの最小量や含まれるオブジェクトの最大量などの制約を適用したり、含まれているオブジェクトが他のどの封じ込めにも含まれないようにすることもできます。
例:
ShoppingCart
と呼ばれる参照とCustomer
と呼ばれる包含で呼び出されるオブジェクトがあると仮定しますOrderedProducts
。へのOrderedProducts
参照がありProduct
ます。
このモデルは何を教えてくれますか?
- 顧客をShoppingCartに割り当てることができます。ShoppingCartからCustomerを削除しても、Customerオブジェクト自体は引き続き存在します(データベースなど)。
- OrderedProductオブジェクトが存在するには、ShoppingCartが必要です。ShoppingCartから削除すると、存在しなくなります。
- 各OrderedProductには、データベース内の既存の製品への参照があります。OrderedProductsの1つをShoppingCartから削除しても、データベース内の製品は引き続き存在します。その特定の顧客に対するその製品の注文だけが失われます。
参照:UMLの関連付けのようにすることができます
封じ込め:UMLからの合成関係です
また、これはEMFダイアグラムで確認できます。containment
をtrueに設定すると、線は塗りつぶされた側になり、包含/構成を示します。これは私が観察したことです。