我经常对 UML 感到困惑,这种情况也不异常(exception)。 假设我有一个接口(interface) IAnimal,类 Food 和 Cat:
interface IAnimal {
void Feed(Food food);
}
class Cat : IAnimal {
void Feed(Food food) {
//code
}
}
关于为这 3 个元素绘制 UML 类图,我有 3 个问题:
我认为我应该使用 IAnimal 和 Food 或 Cat 和 Food 之间的关联。关联线的一侧是否应该有箭头,如果有,那么在哪一侧以及为什么有?
如果我在图表上将 Feed 编写为 IAnimal 方法,我应该在 Cat 类中编写 Feed 方法还是只编写其他 Cat 方法?
最重要的是:关联应该是 IAnimal 和 Food、Cat 和 Food 还是两者之间?
最佳答案
UML 定义了许多关系类型。
关系有多种不同的表示法:
- 关联关系具有实体路径的基本表示法
- 依赖关系具有虚线箭头的基本表示法
- 泛化关系的基本符号是带有三角形箭头的实心路径
- 实现关系的基本符号是带有三角形箭头的虚线箭头(依赖性和泛化的混合)
如图
+---------------------------+
| <<interface>> |
| IAnimal |
+---------------------------+ +--------+
| + Feed(food: Food) : void |- - - - <<use>> - - - ->| Food |
+---------------------------+ +--------+
^
/_\
|
|
|
+-----------+
| Cat |
+-----------+
即:
IAnimal
和Food
之间的关系是使用关系。 这显示为与构造型“use”的依赖关系IAnimal
和Cat
之间的关系是一种实现关系。
关联关系用于指示两个或多个分类器之间的连接。这意味着至少一个类具有另一种类型(或集合)的属性。事实上,属性端和关联端包含相同的信息,可以互换。
因此,恕我直言,您描述的关系不应建模为关联。
关于UML 类图关联 - 如何、何时以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406558/