UML聚合可以两种方式吗?

时间:2017-08-13 19:56:39

标签: python uml

我正在使用Python中的MVC模式实现一个带有以下类定义的应用程序:

model = Model()
view = View()
Controller(model, view)

通过

实例化类
{{1}}

Controller可以访问View,但View也可以访问Controller(因为Controller会将自身传递给View)。在UML中表示这种结构的适当方法是什么?我的猜测是

UML diagram of MVC.

但不确定两种方式的聚合是否存在。

2 个答案:

答案 0 :(得分:0)

(UML 2.5第9.5.3节)

  

[composite]表示属性是复合聚合的,即复合对象对组合对象的存在和存储负有责任

所以拥有双向构图是没有意义的,因为你不能对存在负双向责任 - 一旦一方摧毁另一方,另一方不能摧毁第一方。

此外,在MVC示例中使用聚合也是不正确的,因为控制器不负责模型的生命周期;实际上,可以从许多不同的控制器中使用模型。

所以只需使用常规关联,具有单向和双向导航功能。

enter image description here

答案 1 :(得分:0)

您使用的是共享作品(空心菱形)。引用p。 110规格

  

表示该属性具有共享聚合语义。共享聚合的精确语义因应用领域和建模者而异。

因此,除非您有自己的语义定义,否则不建议使用它。

如果您打算使用复合聚合,则禁止双方都使用。这意味着每个连接元素的生命周期取决于其他生命周期。

引用p。 110以下:

  

组合物可以在具有传递性缺失特征的有向无环图中链接;也就是说,删除图形某一部分中的对象也会导致删除该对象下面的子图的所有对象。

双向不是非循环的。