UML 是 Unified Modeling Language的缩写,又称统一建模语言。作为“语言”,其本质目的是为了便于交流,俗话说一图省胜千言。
UML的5类,10种模型图
- 用例图(1)
- 静态图:类图(2)、包图(3)、对象图(4)
- 行为图:状态图(5)、活动图(6)
- 交互图:顺序图(7)、合作图(8)
- 实现图:构件图(9)、配置图(10)
以上分类摘录自 解析UML中五类UML模型图
个人感觉没必要把上面所有类型的图区分的特别明白,只要是在日常工作中(如 设计和分析阶段)能进行正常的交流,能理解别人所表达的意思,或者正确的表达自己的意思即可。
类图
以下将主要介绍一些类图中相关的元素,因为里面的一些元素很相似,比较容易混淆。当看到别人的图的时候可能会出现理解上的偏差。打着好记性不如烂笔头的旗号,做了一下记录。以下截图中有些地方可能不符合标准,但是大体上应该不影响理解。
描述一个类

如上图,一个矩形分了三格:
属性和方法前民有三种符号对访问级别进行了描述:
+ 代表 public
# 代表 protect
- 代表 private
描述一个接口

可以看出第一格多了一个 <<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中用 箭头 实线 箭头的反方向是实心菱形来表示

其它关系
除了以上几种常用的关系外,还有其他几种关系,这里不再说明,因为你可以通过在箭头上加描述信息来描述这种关系,随着技术的发展,你实际上也可以通过文字描述造出非 UML 标准外的关系,只要能达到便于沟通理解的目的即可。
关联、聚合、组合 有什么不同
个人感觉者三种关系在代码上基本上是一样,但是在语义上稍有不同:
- 关联:描述 相互引用、数量
- 聚合:强调 非强制、可有可无的关系;对关联关系的扩充描述
- 组合:强调 强制、不可或缺的关系;对关联关系的扩充描述
如何记忆
快速浏览上面几个图,会发现一个规律
- 继承/实现 是三角,其他关系是箭头
- 越是比较亲密的用的是实线,不太亲密的是虚线
- 为了在语义上区分关联关系,加入了 空心和实心菱形去加强描述
拓展阅读
知乎讨论 UML 还有用吗?
文中截图使用 yEd 进行绘制
UML 软件工程组织 深入浅出UML类图
参考
伯乐在线 Java利器之UML类图详解
UML 是 Unified Modeling Language的缩写,又称统一建模语言。作为“语言”,其本质目的是为了便于交流,俗话说一图省胜千言。
UML的5类,10种模型图
个人感觉没必要把上面所有类型的图区分的特别明白,只要是在日常工作中(如 设计和分析阶段)能进行正常的交流,能理解别人所表达的意思,或者正确的表达自己的意思即可。
类图
以下将主要介绍一些类图中相关的元素,因为里面的一些元素很相似,比较容易混淆。当看到别人的图的时候可能会出现理解上的偏差。打着好记性不如烂笔头的旗号,做了一下记录。以下截图中有些地方可能不符合标准,但是大体上应该不影响理解。
描述一个类
如上图,一个矩形分了三格:
属性和方法前民有三种符号对访问级别进行了描述:
+代表 public#代表 protect-代表 private描述一个接口
可以看出第一格多了一个
<<interface>>。在Java里,接口的定义只能是公共属性或者方法,所以这里省略了前面的描述符。类图中的关系
类图中类与类、接口 之间存在很多关系:
泛化(继承)
泛化即Java中的继承关系(类与类;接口与接口),在UML中用

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

空心三角虚线来表示:依赖
可以理解为在一个类中

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

箭头实线来表示,箭头可以是单向箭头或者双向箭头,箭头指向被包含的类:可以在实线上加备注来描述数量上的关系
1..1:一对一0..*:0对多1..*:1对多0..1:0对1*:多对多聚合
聚合与关联类似,语义上更强调可以分离,例如我有量车,我和车是可以分离的,在编码上可能表述为 Person 类里面有个 Car 的属性,在UML中用

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

箭头实线箭头的反方向是实心菱形来表示其它关系
除了以上几种常用的关系外,还有其他几种关系,这里不再说明,因为你可以通过在箭头上加描述信息来描述这种关系,随着技术的发展,你实际上也可以通过文字描述造出非 UML 标准外的关系,只要能达到便于沟通理解的目的即可。
关联、聚合、组合 有什么不同
个人感觉者三种关系在代码上基本上是一样,但是在语义上稍有不同:
如何记忆
快速浏览上面几个图,会发现一个规律
拓展阅读
知乎讨论 UML 还有用吗?
文中截图使用 yEd 进行绘制
UML 软件工程组织 深入浅出UML类图
参考