UML 类图关联 - 如何、何时以及为什么?

标签 uml class-diagram associations

我经常对 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    |
        +-----------+

即:

  • IAnimalFood 之间的关系是使用关系。 这显示为与构造型“use”的依赖关系
  • IAnimalCat 之间的关系是一种实现关系。

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

因此,恕我直言,您描述的关系不应建模为关联。

关于UML 类图关联 - 如何、何时以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406558/

相关文章:

UML - 是否可以将 ActivityPartitions 添加到 StructuredActivityNodes?

java - 以 EMF Ecore 格式表示 UML2 Stereotypes,以通过 JET 生成 Java 代码

web-applications - Web应用程序的架构图是什么?

design-patterns - 设计 : Class circular dependency?

mysql - CakePHP 3.x 基于多表的单一关联

c++ - 用于模板继承的UML图

uml - 贷款与贷款数据库的关系(关联或聚合)?统一语言

ocaml - 为 OCaml 生成类图

rspec - Rspec模型关联

node.js - Sequelize CLI : cannot read property 'replace' of undefined when migrating DB