当A类与B类具有聚合和组合关系时,如何绘制UML图?

时间:2013-11-15 19:29:43

标签: java uml aggregation composition

我有两个问题要问。所以我们假设有一个A类和B类,它们都是这样定义的。

1

class A {
    private B b;
    private B otherB;
    public A(B otherB)
    {
        this.otherB = otherB; 
    }
}
class B {
}

因此,A类与变量b具有组合关系,与变量otherB具有聚合关系。我如何在UML图中绘制它。

2.以下情况是否仍然是一种构成关系?

class A
{
    private B b;
    public B getMethod(){
        B newB = new B();
        newB.bValue = b.bValue;
        return newB;
    }  
}
class B
{
    private int bValue;
}

2 个答案:

答案 0 :(得分:2)

  1. 正如其他评论/回复所指出的,不存在同一类之间存在不同关联(组成与否)的问题。 composition vs aggregation

  2. 从实施的角度来看(这也适用于上一个问题)您需要了解composition association means是什么。

  3. 基本上,如果我们有实例规范 a1 a2 (作为类 A 的实例),则只有其中一个可以组成实例 b1 (作为类 B 的实例)通过复合关联的角色(关联结束)“composesB”。

    同样,只要 a1 通过复合关联的“composesB”角色组成 b1 ,每当 a1 被“销毁”时,< strong> b1 也应该“被破坏”。相反,如果 a1 对象通过聚合关联的“aggregatesB”角色聚合 b1 ,则不会发生这种情况。

    正如您可能想象的那样,从实现的角度来看,您需要的不仅仅是字段和类中的简单方法,以支持两个类之间的复合关联。

    更新:包含示例。

    例如,EMF是EMOF规范(它不是UML)的实现,其中包含引用的概念(类似于复合关联的概念)可以描述如下。在我们的特定情况下:

    Generated code for a composite reference

    远离技术细节,当您将A实例设置为A实例对象的一部分(包含,组合)时,您可能会意识到这一点。您首先必须通过相同的包含引用检查前者是否可能包含在不同的A实例中,如果是这样,则需要从旧的A实例中删除此类实例。

答案 1 :(得分:0)

  1. Creating Multiple Associations Between Classes实际上是合法的。建议在您执行此操作时为每个关系分配一个角色。

  2. 我会说是的,这仍然是一种构成关系(尽管其他人可能不同意)。为了说明我的情况,我们看一下简单的IBM definition,显示由Schedule组成的学生(可能包括其他内容)。很容易想象,还会有一个由附表组成的教师,教师可能想要获得学生的时间表,反之亦然。另一个类获得一个附表是否会使作文关系无效?我想不是;或者至少,IBM的定义似乎并不那么狭隘,以至于排除了这种可能性。