UML:类图、类的关系
1、UML
Unified Modeling Language
(统一建模语言)是一门编程语言,一种方法论。
- 概念:用于说明、可视化、构建和编写一个在开发阶段、面向对象、软件密集系统的制品的方法论。
- 作用:
- 以面向对象图的方式,建立软件系统的模型(也可用于其它领域)。
- 用于软件系统分析和设计,帮助开发者记录思路。
- 相关工具:
- UML 建模工具:如 Rational Rose
- IDE 插件:如 UMLSupport
- web 绘图
1.1、模型
含义 | 图类型 | |
---|---|---|
功能模型 | 从用户角度展示系统的功能 | 用例图 |
对象模型 | 采用对象、属性、操作、关联等概念展示系统的结构和基础 | 类图、对象图、包图、组件图、部署图 |
动态模型 | 展现系统的内部行为 | 交互图(时序图、协作图)、状态图、活动图 |
1.2、图的种类
- 功能模型——用例图:从用户角度描述系统功能。
- 对象模型:
- 类图:描述系统中类的静态结构。
- 对象图:描述系统中的多个对象在某一时刻的状态。
- 包图:对构成系统的模型元素进行分组整理。
- 组件图:描述系统的静态实现视图。
- 部署图:定义系统中软硬件的物理体系结构。
- 动态模型:
- 交互概览图:用活动图来表示多个交互之间的控制关系的图。
- 组合结构图:表示类或者构建内部结构。
- 时序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互。
- 协作图:描述对象之间的协助关系。
- 状态图:描述状态到状态控制流,常用于动态特性建模。
- 活动图:描述业务实现用例的工作流程。
2、类的关系
2.1、依赖
依赖(
Dependency
)最基本的类的关系,所有其它关系都是依赖的不同体现。
- 场景:一个类中使用到另一个类。
- 类的成员属性,即聚合 / 组合
- 方法的局部变量、方法返回值类型、方法参数类型。
- UML 图:
- 虚线
- 单向普通箭头
示例
public class Person{
// 成员属性:IdCard
private IdCard idCard;
// 方法返回类型:Hobby
public Hobby[] listHobbys(){...}
// 方法接收的参数类型:Tool
public void work(Tool tool){...}
// 方法中使用到:Book
public void study(){
Book book = new Book();
...
}
}
2.2、泛化
泛化(
Generalization
)是特殊的依赖关系。
- 场景:即类的继承。
- UML 图:
- 实线
- 单向空心三角箭头
示例
public class Song{}
// 继承
public class PopularSong extends Song(){}
2.3、实现
实现(
Implementation
)是特殊的依赖关系
- 场景:即实现接口。
- UML 图:
- 虚线
- 单向空心三角箭头
示例
public interface UserService(){...}
// 实现
public class UserServiceImpl implements UserService(){...}
2.4、关联
关联(
Association
)是特殊的依赖关系
- 场景:某个类作为另一个类的成员变量,拥有以下性质。
- 导航性:
- 单向关联
- 双向关联
- 多重性:不同数字符号的含义如下。
n
:有 n 个n, m
:n 或 m 个n ... m
:n 到 m 个n...
:至少 n 个
- 导航性:
- UML 图:
- 实线
- 单向普通箭头/ 双向无箭头
- 数字
- 备注信息
示例
// 单向一对一关系
public class Person{
private IdCard idCard;
}
public class IdCard{
private Person person;
}
// 双向多对一关系
public class Student{
private Dorm dorm;
}
public class Dorm{
private Student[] studentList;
}
2.4.1、聚合
聚合(
Aggregation
)是特殊的关联关系
- 场景:整体和部分在逻辑上可分离,动态注入变量依赖。
- UML 图:
- 实线
- 单向空心菱形箭头
示例
public class Person{
// 人与鞋子,可以分离
private Shoe shoe;
// 动态注入变量依赖:setter注入
public void setShoe(Shoe shoe){
this.shoe = shoe;
}
}
public class Shoe{...}
2.4.2、组合
组合(
Composition
)特殊的关联关系
- 场景:整体和部分在逻辑上不可分离,静态初始化变量依赖。
- UML 图:
- 实线
- 单向实心菱形箭头
示例
public class Person{
// 人与大脑,不可分离
// 静态初始化变量依赖
private Brain brain = new Brain();
}
3、小结
3.1、理解
-
依赖:最基本的类的关系,所有其它关系都是依赖的不同体现。
-
泛化、实现:对应类的继承和实现概念。
-
关联:类作为另一个类的成员变量。
-
聚合:整体和部分可分离,动态注入变量依赖。
-
组合:整体和部分不可分离,静态初始化变量依赖。
-
3.2、对比
关键词 | 连线 | 箭头 | |
---|---|---|---|
依赖 | 使用到 | 虚线 | 单向普通 |
泛化 | 继承 | 实线 | 单向空心三角 |
实现 | 实现 | 虚线 | 单向空心三角 |
关联 | 成员变量 | 实线 (数字、备注信息) |
单向普通 or 双向无箭头 |
聚合 | 可分离,动态注入 | 实线 | 单向空心菱形 |
组合 | 不可分离,静态初始化 | 实线 | 单向空心菱形 |