聚合与组合
2003年5月17日
在UML中,很少有东西比聚合和组合更令人困惑,尤其是它们与普通关联的不同之处。
完整的历史充满了混乱。在UML出现之前的各种方法中,人们普遍认为需要定义某种形式的整体-部分关系。问题在于,每种方法都为这些关系定义了不同的语义(尽管公平地说,其中一些语义几乎是毫无意义的)。
因此,当需要标准化时,许多人都想要整体-部分关系,但他们无法就其含义达成一致。于是,UML 定义者引入了两种关系。
聚合(白色菱形)除了普通关联之外没有其他语义。正如 Jim Rumbaugh 所说,它是一种建模安慰剂。人们可以并且确实使用它 - 但它没有标准的含义。因此,如果你看到它,你应该询问作者的意图。我建议不要在没有某种解释的情况下自己使用它。
组合(黑色菱形)确实带有语义。最特别的是,一个对象只能是单个组合关系的一部分。因此,即使窗口和面板都可以包含菜单栏,任何菜单栏实例都只能被一个整体包含。这是一种你无法通过常规的多重性标记轻松表达的约束。