Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UML聚合可以是双向的吗?_Python_Uml - Fatal编程技术网

Python UML聚合可以是双向的吗?

Python UML聚合可以是双向的吗?,python,uml,Python,Uml,我正在用Python实现一个具有MVC模式的应用程序,其类定义如下: class Controller(object): def __init__(self, model, view): self.model = model self.view = view self.view.register(self) class Model(object): def __init__(self): pass class

我正在用Python实现一个具有MVC模式的应用程序,其类定义如下:

class Controller(object):
    def __init__(self, model, view):
        self.model = model
        self.view = view

        self.view.register(self)

class Model(object):
    def __init__(self):
        pass

class View(object):
    def __init__(self):
        self.controller = None

    def register(self, controller):
        self.controller = controller
类由

model = Model()
view = View()
Controller(model, view)
控制器可以访问视图,但视图也可以访问控制器(因为控制器将自身传递给视图)。用UML表示这种结构的合适方法是什么?我猜是

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

(UML2.5第9.5.3节)

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

因此,拥有一个双向的构图是没有意义的,因为你不能对存在负有双向的责任——一旦一方摧毁了另一方,另一方就无法摧毁第一方

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

所以只需使用规则关联,具有单向和双向导航能力


您使用的是共享合成(空心钻石)。引用p。规格的110

指示属性具有共享聚合语义。共享聚合的精确语义因应用程序区域和建模者而异

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

如果您打算使用复合聚合,则两侧都禁止使用。这意味着每个连接元素的寿命取决于另一个元素的寿命

引用p。下文第110段:

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


双向性不是非循环的。

聚合与合成不同。组合是一种也表示所有权的聚合。