使用关系关联

时间:2017-09-19 04:57:15

标签: uml

说我有这样的关系

Class Lion{
    private int health;
    public void eat(Food f){
          health+=f.getweight();
    }
}

Class Food{
     private int weight;
}

然后,我是正确的说这种关系是一种关联,而不是聚合或组合。

我可以说Lion使用Food并像这样绘制UML图表

+-----+              +-----+
| Lion| _____uses___>|Food | 
+-----+              +-----+ 

此关系也没有多重性,因为Lion没有Food的数组,食物也没有作为实例变量的Lions数组。与组合和聚合不同,其中关系具有多重性。

如果我希望Food也以同样的方式使用Lion,该怎么办?我是否在两个班级之间画了两支箭?

2 个答案:

答案 0 :(得分:1)

<<uses>>关系是一个依赖关系,而不是一个关联,这对LionFood很有意义,因为一旦吞下Food,关联就会消失由Lion

enter image description here

关于聚合:这是关于对象的生命周期。共享聚合没有定义的语义,只能在域定义之后使用。复合聚合告诉聚合对象与聚合它的对象一起死亡。这没有多大意义。如果Lion被拍摄,Food仍在那里。

我不知道Food将如何使用Lion

答案 1 :(得分:0)

事实上,食物不是狮子的财产或属性,因此它们之间的关系不是协会。你无法指定多重性这一事实也是另一个提示,即狮子和食物之间的关系不是一个关联。

您的Lion类使用食物进食,因此您可以考虑UML使用关系。但根据UML规范&#34; A Usage是一种依赖关系,其中客户端元素(又名Lion)要求供应商Element(aka Food)进行全面实施或操作。这不是你的情况,你只需要知道食物存在,你真的不关心它的实施。

事实上,如果Lion知道什么是Food,你不需要它们之间的任何关系(Cf screenshot enter image description here)。

如果你的狮子不知道什么是食物,你需要他们之间的ElementImport关系。