图像如下:(<>表示黑色菱形,表示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
我是对的吗?!
答案 0 :(得分:1)
你的UML的含义是A可以包含很多B,C包含很多B,B可以引用0..1 As和正好一个B.
这个UML图是不正确的,因为无法共享B的实例(这就是组合的含义)。所以链接B-C也应该是0..1,在这种情况下你可以使用A和C的包含。
答案 1 :(得分:0)
如果B是EMF资源的根,则它可以为零。 EMF资源根永远不会有任何容器。任何EMF模型都可以充当资源根。
答案 2 :(得分:0)
B的实例可以存在但不包含在A中,但我很确定它在该状态下不能持久化(使用默认的XML / XMI持久性)。实际上,您可以将有效模型置于此状态: