UML 之类图

类图Class Diagram)是软件工程的统一建模语言(UML)一种静态结构图,该图描述了系统的类集合,类的属性和类之间的关系。
注:示意图使用 StarUML

一、修饰符

+ 表示 public

- 表示 private

# 表示 protected

~ 表示 package

UML类图python uml类图有几种关系_UML


图 1 修饰符

二、关系

类和类、类和接口、接口和接口之间存在一定关系,UML 类图中一般会有连线指明它们之间的关系。关系共有六种类型,分别是实现关系泛化关系依赖关系关联关系聚合关系组合关系,如下图所示。

注:类与类之间由弱到强关系是: 没关系 < 依赖 < 关联 < 聚合 < 组合

UML类图python uml类图有几种关系_uml_02


图 2 图例说明

实现关系

实现关系Realization)是指接口及其实现类之间的关系。在UML类图中,实现关系用空心三角和虚线组成的箭头来表示,从实现类指向接口

泛化关系

泛化关系Generalization)是指对象与对象之间的继承关系。如果对象 A 和对象 B 之间的 “is a” 关系成立,那么二者之间就存在继承关系。例如,一个学生(Student) “is a” 人(Persion),Student 继承于 Persion。

依赖关系

依赖Dependency)关系可以简单的理解为对象 A 用到对象 B,但是和 B 的关系不是太明显的时候,就可以把这种关系看作是依赖关系。如果对象 A 依赖于对象 B,则 A “use a” B。比如驾驶员和汽车的关系,驾驶员使用汽车,二者之间就是依赖关系。
在 UML 类图中,依赖关系用一个带虚线的箭头表示,由使用方指向被使用方,表示使用方对象持有被使用方对象的引用。

关联关系

关联关系Association)是指两个类之间、或类与接口之间一种强依赖关系,是一种长期的稳定的关系," … has a …" 。它使一个对象知道另一个对象的属性和方法。如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。
单向关联双向关联。如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联。大多数关联都是单向关联,单向关联关系更容易建立和维护,有助于寻找可重用的类。
在UML图中,双向关联关系用带双箭头的实线或者无箭头的实线双线表示。单向关联用一个带箭头的实线表示,箭头指向被关联的对象。
一个对象可以持有其它对象的数组或者集合。在UML中,通过放置多重性(multipicity)表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例如下:

  • 数字:精确的数量
  • * 或者 0…* :表示0到多个
  • 0…1:表示 0 或者 1 个,在 Java 中经常用一个空引用来实现
  • 1…*:表示 1 到多个
    关联关系有单向关联双向关联自身关联多维关联等等。其中后三个可以不加箭头。

UML类图python uml类图有几种关系_软件架构_03


图 3 关联示意图

聚合关系

聚合Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系,即 “has a” 的关系。此时整体与部分之间是可分离的它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。例如,公司部门与员工的关系,一个员工可以属于多个部门,一个部门撤消了,员工可以转到其它部门。
在UML图中,聚合关系用空心菱形加实线箭头表示,空心菱形在整体一方,箭头指向部分一方。

组合关系

组合Composition)也是关联关系的一种特例,它同样体现整体与部分间的包含关系,即 “contains a” 的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。如果 A 组合 B,则A需要知道B的生存周期,即可能 A 负责生成或者释放 B,或者 A 通过某种途径知道 B的生成和释放。

例如,人包含头、躯干、四肢,它们的生命周期一致。当人出生时,头、躯干、四肢同时诞生。当人死亡时,作为人体组成部分的头、躯干、四肢同时死亡。

在UML图中,组合关系用实心菱形加实线箭头表示,实心菱形在整体一方,箭头指向部分一方。

UML类图python uml类图有几种关系_uml类图_04


图 4 各种关系示意图

参考资料:
[1] UML:https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD%E8%A8%80 [2] 类图:https://zh.wikipedia.org/wiki/%E9%A1%9E%E5%88%A5%E5%9C%96 [3] 开源UML工具推荐: [4] 30分钟学会UML类图:https://zhuanlan.zhihu.com/p/109655171 [5] 认识 UML 类关系——依赖、关联、聚合、组合、泛化: