UML类图关联 - 如何,何时以及为何?

agn*_*zka 4 uml class-diagram associations

我经常对UML感到困惑,这种情况也不例外.假设我有一个接口IAnimal,类Food和Cat:

interface IAnimal {
    void Feed(Food food);
}

class Cat : IAnimal {
    void Feed(Food food) {
        //code
    }
}
Run Code Online (Sandbox Code Playgroud)

我有3个关于为这3个元素绘制UML类图的问题:

  • 我想我应该使用IAnimal和Food或Cat and Food之间的关联.在关联线的一侧是否应该有箭头,如果是,那么在哪一侧以及为什么存在?

  • 如果我在图上将Feed作为IAnimal方法编写,我应该在类Cat中编写方法Feed还是仅编写其他Cat方法?

  • 最重要的是:IAnimal和食物,猫和食物之间的联系,还是两者兼而有之?

too*_*kit 14

UML定义了许多关系类型.

关系有许多不同的符号:

  • 关联关系具有可靠路径的基本符号
  • 依赖关系具有虚线箭头的基本符号
  • 泛化关系具有带三角形箭头的实心路径的基本符号
  • 实现关系的基本符号是带有三角形箭头的虚线箭头(依赖和泛化的混合)

形象地

+---------------------------+
|       <<interface>>       |
|           IAnimal         |
+---------------------------+                        +--------+
| + Feed(food: Food) : void |- - - - <<use>> - - - ->|  Food  |
+---------------------------+                        +--------+
              ^
             /_\
              |

              |

              |
        +-----------+
        |    Cat    |
        +-----------+
Run Code Online (Sandbox Code Playgroud)

那是:

  • IAnimal和之间的关系Food是一种使用关系.这显示为与构造型«use»的依赖关系
  • IAnimal和之间的关系Cat是一种实现关系.

关联关系用于指示两个或更多个分类器之间的连接.这意味着至少有一个类具有另一种类型(或集合)的属性.实际上,属性和关联结束包含相同的信息并且可以互换.

所以,恕我直言,你描述的关系不应该被建模为关联.

  • 漂亮的ascii艺术! (7认同)