我正在尝试为一个非常简单的场景制作一个 UML 类图。考虑以下代码:List<Food> foods = {new Tomato(), new Pizza()};
作为 A 类的一个字段。显然,A 类在番茄和披萨之间有关联,但它也应该在食物之间有关联吗?
当然,番茄和披萨是从食物延伸而来的:)
最佳答案
使用泛型,例如 List<Food>
这始终是 UML 中的一个挑战,因为泛型的语义在不同的编程语言中并不相同。
这里,字段foods
类A
意味着有一个 navigable关联来自A
至Food
。和Tomato
和Pizza
是specializations的Food
(基于您对术语“扩展”的使用):
附加说明:
association与
Food
,因为类型是List<Food>
A
之间没有直接耦合和Tomato
或Pizza
。请记住,类图显示的是总体情况,而不是单个对象的特定场景(这就是前面 object diagram 的目的)。
列表的使用表明关联可以是 0 or more
Food
。但我们不知道是否有Food
对象可以被多个人使用A
或不(如果Food
是引用类型,则理论上有几种可能):因此A
上未指定多重性边。根据语义,您可以考虑将关联设置为 composition或 aggregation 。但无论如何,简单的关联都是正确的。
基于您想要在
A
中突出显示的设计内容-到-Food
协会:- 您可能更喜欢 dot notation关于
Food
最后,如果您想强调该关联(也称为列表)由A
拥有。 - 您可以使用navigability notation正如我的图中所示,如果不太关心当前的实现,只是想表达从 A 访问食物应该很容易。
- 如果您想保持这些主题的开放性,则可以不显示上述任何内容。
- 您可能更喜欢 dot notation关于
关于class - 当基类隐含时是否应该有关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61677802/