我有两个问题要问。所以我们假设有一个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;
}
答案 0 :(得分:2)
正如其他评论/回复所指出的,不存在同一类之间存在不同关联(组成与否)的问题。
从实施的角度来看(这也适用于上一个问题)您需要了解composition association means是什么。
基本上,如果我们有实例规范 a1 和 a2 (作为类 A 的实例),则只有其中一个可以组成实例 b1 (作为类 B 的实例)通过复合关联的角色(关联结束)“composesB”。
同样,只要 a1 通过复合关联的“composesB”角色组成 b1 ,每当 a1 被“销毁”时,< strong> b1 也应该“被破坏”。相反,如果 a1 对象通过聚合关联的“aggregatesB”角色聚合 b1 ,则不会发生这种情况。
正如您可能想象的那样,从实现的角度来看,您需要的不仅仅是字段和类中的简单方法,以支持两个类之间的复合关联。
更新:包含示例。
例如,EMF是EMOF规范(它不是UML)的实现,其中包含引用的概念(类似于复合关联的概念)可以描述如下。在我们的特定情况下:
远离技术细节,当您将A实例设置为A实例对象的一部分(包含,组合)时,您可能会意识到这一点。您首先必须通过相同的包含引用检查前者是否可能包含在不同的A实例中,如果是这样,则需要从旧的A实例中删除此类实例。
答案 1 :(得分:0)
Creating Multiple Associations Between Classes实际上是合法的。建议在您执行此操作时为每个关系分配一个角色。
我会说是的,这仍然是一种构成关系(尽管其他人可能不同意)。为了说明我的情况,我们看一下简单的IBM definition,显示由Schedule组成的学生(可能包括其他内容)。很容易想象,还会有一个由附表组成的教师,教师可能想要获得学生的时间表,反之亦然。另一个类获得一个附表是否会使作文关系无效?我想不是;或者至少,IBM的定义似乎并不那么狭隘,以至于排除了这种可能性。