UML(Unified Modeling Language),意思是统一建模语言,是为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。每一个图形都是用来描述一个问题,根据对应的问题,选择对象的图形,再去看对应的图形的一些基本表示方法,这个就可以把自己的软件思路,生动形象的描述出来。一共有13种图。大致结构如下:
1. 用例图
语义 | 描述用户系统的使用场景 |
---|---|
元素 | 参与者(actor):可以是操作员、外部系统、外部设备等。 用例(use case):参与者和系统交互的场景描述。 |
关系 | 角色之间:泛化关系(generalization),用例之间:包含(include),扩展(extend),泛化。 |
用途 | 通过用户使用系统的场景描述功能需求。 |
使用visio打开用例图的位置:
1.包含关系:表示方法,在用例图上,会有一个箭头加流程线,加文字include ,表示,一个用例包含一个用例,进而复用被包含用例的时间流。比如,取款的行为序列就包含输入取款信息、检查余额、验证密码等行为序列,因此取款用例“包含”取款信息用例。
扩展关系:表示方法,在用例图上,会有一个一个箭头加流程线,加文字extend,表示,一个用例当发生一个事件后,触发一个新的用例。比如,一个用例的执行可能需要其他用例功能来扩展,但主要用途是使基本用例的功能不依赖于扩展用例。在上图中,取款行为序列要扩展到打印存款单,但取款行为不依赖打印存款单。也就是说,即使不打印存款单,存款行为也可以进行;但是只有存款行为进行时,才会打印存款单。扩展用例是通过基本用例来激活的。
泛化关系:表示方法,在用例图上,不会出现文字,表示,多个用例归纳为一类用例
在visio中没有包含关系,可以参考下面这个博文处理。https://blog.csdn.net/shuixin536/article/details/8289746 和 https://www.cnblogs.com/jiangds/p/6596595.html
2. 活动图
语义 | 按照活动的先后顺序,描述活动的流程 |
---|---|
元素 | 开始(init),活动(activity),判定(decision),结束(final),分叉(fork),汇合(merge),同步(join) |
关系 | 控制流(control flow),对象流(object flow) |
用途 | 可以描述业务流程,程序流程,用户操作流程 |
泳道:行为的执行者
参考博文:
https://blog.csdn.net/qianmodanshang/article/details/53183436
3. 类图
下面再介绍一种最重要的类型,类图。
语义 | 描述类、类的属性、和方法,以及类之间的关系 |
---|---|
元素 | 类,接口 |
关系 | 类之间的关系:关联,聚合,组成,依赖,泛化。类和接口的关系:实现 |
用途 | 通过用户使用系统的场景描述功能需求。 |
常用的表示方法看该博文
https://www.cnblogs.com/shindo/p/5579191.html
- 关联:关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法关联可以使用单箭头表示单向关联,使用双箭头或者不适用箭头表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。如一个vector中存放了多个类的实例
- 0…1 表示可以有0个或者1个实例
- 0…* 表示对实例的数目没有限制
- 1 表示只能有一个实例
- 1…* 表示至少有一个实例
关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,为被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。
- 聚合:聚合(aggregation)是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,即has-a关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU,公司与员工的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次,而聚合则明显的在两个不同的层次。
- 组合(compostion)也是关联关系的一种特例,体现的是一种contain-a关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。
体现在代码层面与关联时一致的,只能从语义来区分。组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不同脱离“整体”单独存在,其生命周期应该是一致的。 - 依赖,依赖(dependency)关系也是表示类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。在代码层面,为类B作为参数被类A在某个方法中使用。比如一个类用到另一个单例模式类中的成员函数。
- 泛化 泛化(generalization)关系时指一个类(子类、子接口)继承另外一个类(称为父类、父接口)的功能,并可以增加它自己新功能的能力,继承是类与类或者接口与接口最常见的关系。
- 实现(realization)是指一个class实现interface接口(一个或者多个),表示类具备了某种能力,实现是类与接口中最常见的关系
主要是关联关系的细化需要注意强弱,由若到强分别是 依赖 < 关联 < 聚合 < 组合
参考博文:https://www.cnblogs.com/jiyuqi/p/4571543.html
4. 对象图
描述的是参与交互的各个对象在交互过程中某一时刻的状态。对象图可以被看作是类图在某一时刻的实例。
语义 | 描述对象再某个时刻的状态和关系 |
---|---|
元素 | 对象 |
关系 | 对象之间的连接 |
用途 | 可以在分析类的时候描述对象之间的关系,可以用于描述运行时候的当前的对象快照。 |
5. 包图
语义 | 描述包之间的依赖关系 |
---|---|
元素 | 包(package),模型(model),轮廓(profile) |
关系 | 依赖关系(dependency),模型(Model),轮廓(profile) |
用途 | 包可以用于建模:组织结构,名字控件。文件夹,子系统,层,模块等逻辑控件 |
6. 复合结构图
语义 | 描述复合体的内部结构,各个部分之间的连接关系和相关的端口和接口关系 |
---|---|
元素 | 复合体(composite),部件(part),端口(port),接口(interface) |
关系 | 连接器(connector),组装(assembly) |
用途 | 可以描述各种复合体的组成和通信关系,例如:系统和子系统,组建,复合类和内部的属性。 |
7.顺序图
语义 | 描述几个对象随时间顺序而进行的交互 |
---|---|
元素 | 对象(object),生命线(lifeline) |
关系 | 对象之间的同步调用(call)异步消息(messae) |
用途 | 可以描述用户和系统的交互,也可以描述程序对象之间的交互。 |
8. 通信图
语义 | 描述几个对象的交互通信关系,更关注对象之间的连接关系而非交互顺序 |
---|---|
元素 | 对象(object) |
关系 | 对象之间的连接(link),对象之间发送的消息(message) |
用途 | 可以描述用户和系统的交互,也可以描述程序对象之间的交互。 |
9. 状态图
语义 | 描述某个对象在生命期间中的状态变化 |
---|---|
元素 | 状态(state),选择(choice),开始状态(initial),结束状态(final),历史状态(history),会合点(junction),同步(synch),fork/join |
关系 | 状态之间的转义,转移具有的触发事件、条件、动作 |
用途 | 可以描述业务对象,控制对象或者活动者的状态变化。 |
10.组件图
语义 | 描述组件以及组件之间的依赖关系 |
---|---|
元素 | 组件(component),接口(interface),端口(port) |
关系 | 组件之间的依赖关系(dependency),组件和接口的实现关系(realize),组件之间的组装关系(assembly) |
用途 | 可以在划分软件有哪些组件构成,确定组件之间的依赖关系。 |
11. 交互概览图
语义 | 描述几个交互场景之间的流程概览 |
---|---|
元素 | 交互引用(interaction use),交互(interaction),决策(Descision) |
关系 | 交互引用之间的控制流 |
用途 | 描述整个控制流的过程,各个交互场景中对象的交互 |
12. 时间图
语义 | 描述对象随时间而发生的状态变化,以及几个对象之间的消息交互。 |
---|---|
元素 | 状态生命线(lifeline),数值生命线(value line),对象(object),状态条件(state condition) |
关系 | 对象生命线之间的消息 |
用途 | 描述一个对象随时间而发生的状态或者数值变化,同时可以描述多个对象之间按照的消息交互。 |
13. 部署图
语义 | 描述软件在各个计算机节点上的部署 |
---|---|
元素 | 节点(Node),设备(device),工作(artifact),执行环境(execution environment),部署规范(deployment specification) |
关系 | 节点之间的通信连接依赖关系(connection),工作到节点的部署关系(deploy),工作表现的形态(manifest) |
用途 | 描述系统的节点分布,以及节点上的工作部署 |