UML类图关联vs(聚合|组合)-Diamonds

Chr*_*utz 9 uml

我不确定我是否正确使用了关联和聚合或合成钻石.

我会使用Association for interfaces,因为我无法实例化它们.就像他们在这里做的那样.或者对于静态类,同样的原因.

我只使用可以实例化的物体的钻石.像普通班一样.

但我不确定这是否是区分它们的正确方法,因为如果你再次检查,你会发现它们并没有那么具体.在UML 2.3 规范中,我无法获得更多,所以你如何使用它?

还有第三种方式,虚线<>箭头,但我没有胶水何时使用这个.那么也许你也可以帮助我呢?

sfi*_*nie 18

我会使用Association for interfaces,因为我无法实例化它们.就像他们在这里做的那样.或者对于静态类,同样的原因.

我只使用可以实例化的物体的钻石.像普通班一样.

这不是他们的工作方式.三种形式(关联,聚合和组合)定义了关系的不同属性.所有这三个通常在类之间使用,但也可以与接口相关.协会和作文是最容易的两个:

  • 关联(无钻石)是最通用的形式,允许在两端定义基数和导航性.
  • 构图(实心钻石)是一个整体关系,其中"整体"(以黑色钻石结尾)"包含"该部分.它强加了两个关键限制:
    1. 只能有1个容器(即整个基数正好是1);
    2. 它对整个部件施加了生命周期责任.因此容器负责创建和删除部件.如果删除其容器,则部件不能继续存在.

聚合(未填充的钻石)位于中间的某个位置.它有点像组合 - 除了它不强制要求上述属性.我不亲自使用它.语义太不清楚了,因为它值得.

还有第三种方式,虚线<>箭头,但我没有胶水何时使用这个.

我认为你的意思是依赖关系.这是一种较弱的关联形式.例如,采用以下类定义

class Foo {

 def bar(Baz: aParam) {
  ...
 }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,类型Foo依赖于在bar()方法签名中使用的类型Baz.但是有他们之间没有关联(不能理智地讨论美孚的实例和巴兹的实例之间的关系,如基数).

从实际角度来看,我会说:

  • 您可以使用直接关联来获得您可能想要建模的关系的80%以上
  • 组合可能占剩余场景的大部分
  • 在某些情况下,依赖性可能很有用
  • 在没有使用聚合的情况下,您可以非常愉快地获得.

心连心.