Skip to content

UML类图中的几种元素 #2

@kailbin

Description

@kailbin

UML 是 Unified Modeling Language的缩写,又称统一建模语言。作为“语言”,其本质目的是为了便于交流,俗话说一图省胜千言。

UML的5类,10种模型图

  1. 用例图(1)
  2. 静态图:类图(2)、包图(3)、对象图(4)
  3. 行为图:状态图(5)、活动图(6)
  4. 交互图:顺序图(7)、合作图(8)
  5. 实现图:构件图(9)、配置图(10)

以上分类摘录自 解析UML中五类UML模型图

个人感觉没必要把上面所有类型的图区分的特别明白,只要是在日常工作中(如 设计和分析阶段)能进行正常的交流,能理解别人所表达的意思,或者正确的表达自己的意思即可。

类图

以下将主要介绍一些类图中相关的元素,因为里面的一些元素很相似,比较容易混淆。当看到别人的图的时候可能会出现理解上的偏差。打着好记性不如烂笔头的旗号,做了一下记录。以下截图中有些地方可能不符合标准,但是大体上应该不影响理解

描述一个类

image
如上图,一个矩形分了三格:

  • 第一格是类名
  • 第二格是属性
  • 第三格式方法

属性和方法前民有三种符号对访问级别进行了描述:

  • + 代表 public
  • # 代表 protect
  • - 代表 private

描述一个接口

image
可以看出第一格多了一个 <<interface>>。在Java里,接口的定义只能是公共属性或者方法,所以这里省略了前面的描述符。

类图中的关系

类图中类与类、接口 之间存在很多关系:

  • 泛化(Generalization)
  • 实现(Realization)
  • 依赖(Dependence)
  • 关联(Association)
  • 聚合(Aggregation)
  • 组合(Composition)

泛化(继承)

泛化即Java中的继承关系(类与类;接口与接口),在UML中用 空心三角 直线来表示:
空心三角 直线

实现

实现即 Java 中的 一个类实现一个接口,在UML中用 空心三角 虚线来表示:
空心三角 虚线

依赖

可以理解为在一个类中 import 了另一个类,该类不是作为一个属性存在,而是作为一个方法参数或者局部变量等,依赖是类与类之间最弱的关系。在UML中用 箭头 虚线来表示:
箭头 虚线

关联

可以理解为一个类作为另一个类的属性,在UML中用 箭头 实线来表示,箭头可以是单向箭头 或者 双向箭头,箭头指向被包含的类:
双向关联
可以在实线上加备注来描述数量上的关系
1..1:一对一
0..*:0对多
1..*:1对多
0..1:0对1
* :多对多

聚合

聚合与关联类似,语义上更强调可以分离,例如我有量车,我和车是可以分离的,在编码上可能表述为 Person 类里面有个 Car 的属性,在UML中用 箭头 实线 箭头的反方向是空心菱形来表示
箭头 实线 空心菱形

组合

组合也与关联类似,语义上更强调不可分离,例如我有手有脚,我和我的身体是不可分离的,否则无法运行,在UML中用 箭头 实线 箭头的反方向是实心菱形来表示
image

其它关系

除了以上几种常用的关系外,还有其他几种关系,这里不再说明,因为你可以通过在箭头上加描述信息来描述这种关系,随着技术的发展,你实际上也可以通过文字描述造出非 UML 标准外的关系,只要能达到便于沟通理解的目的即可。

关联、聚合、组合 有什么不同

个人感觉者三种关系在代码上基本上是一样,但是在语义上稍有不同:

  • 关联:描述 相互引用、数量
  • 聚合:强调 非强制、可有可无的关系;对关联关系的扩充描述
  • 组合:强调 强制、不可或缺的关系;对关联关系的扩充描述

如何记忆

快速浏览上面几个图,会发现一个规律

  • 继承/实现 是三角,其他关系是箭头
  • 越是比较亲密的用的是实线,不太亲密的是虚线
  • 为了在语义上区分关联关系,加入了 空心和实心菱形去加强描述

拓展阅读

知乎讨论 UML 还有用吗?
文中截图使用 yEd 进行绘制
UML 软件工程组织 深入浅出UML类图

参考

伯乐在线 Java利器之UML类图详解

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions