前言:
UML中的很多东西平时都听过、用过,诸如类图、时序图等,本文将详细详细讲一下UML中常用的几类图,并且会引入一个完整的例子来讲解,UML在工程上到底该怎么合理使用。
1.概述
我们经常会在各类软件设计文档中看见许多图,诸如类图、部署图、顺序图、状态图等等,其实这些图都出自于一个地方,就是UML。既然经常看见UML体系中的各种图,就说明UML在我们的软件工程中大量被应用着,所以我想在聊UML之前,我们要先提纲挈领的搞明白两个问题:
- 什么是UML?
- UML用在何处?
- UML有哪些东西?
1.1.什么是UML?
UML(Unified Modeling Language),统一建模语言,是一种在软件工程中对软件系统进行建模的标准图形化建模语言。直白来说就是UML用一系列的图形和符号来帮助描述软件系统,让人更加容易懂整个系统长什么样子。
1.2.UML用在何处?
由于UML能很好的描述软件系统,所以一般用在需求分析、软件设计两个阶段,在需求分析和概设详设里,UML都是利器。
我想很多同学对于需求分析和设计两个阶段都是很迷茫和混乱的,听过各种各样的图,什么数据流图、流程图、结构图、ER图以及UML中的类图、时序图、部署图等等等等。到底在何时用哪些图?以怎样的顺序去使用它们都是很迷惑的。
其实很简单,目前来说在软件工程中我们用到的有两大方法来对软件进行分析和设计:
- 结构化方法
- 面向对象的方法
这里先给出一个概念,当我们要用面向对象的方法来对软件系统进行分析设计的时候就要用到UML,至于其它的什么数据流图、结构图等东西大多数是用在结构化方法中的。
想详细了解结构化方法的同学,可以移步博主的另一篇文章:
想详细了解面向对象方法的同学,可以移步博主的另一篇文章:
(上面这篇估计应该是全网都少有的关于面向对象的写的清晰易懂的一篇文章)
这里直接给出总结,面向对象的方法其实指的就是从业务场景中分析出一个个的对象实体,然后用对象实体间的交互来组成整个系统,而UML就是用来描述对象实体以及其交互的。
1.3.UML有哪些东西
正如我们知道的,软件系统是很庞大且复杂的一个东西,想要描述清楚,肯定不可能是一个维度就能描述的很准确,所以UML从两种维度提出了一系列的图来用于描述软件系统,常用的包括:
- 静态结构
- 类图
- 组件图
- 部署图
- 动态行为
- 状态图
- 活动图
- 时序图
以上的图在各类型的软件系统的规范化描述中用到的频率都很高,但是不一定都会用到,选取其中需要的图来描述清楚系统即可。
2.静态结构
2.1.类图
类图作者前面有一篇文章,直接移步即可:
【UML】详解UML类图__BugMan的博客-CSDN博客
2.2.部署图
部署图(Deployment Diagram,用于表示系统中的物理部署和硬件配置。它主要用于描述软件系统的各个组件、节点以及它们之间的关系,帮助开发人员和系统管理员理解系统的部署架构。
一个部署图主要由以下元素组成:
- 节点和连接
节点(Node)代表一个物理设备。在 UML 中,使用一个立方体表示一个节点。节点之间的连线表示系统之间进行交互的通信路径,在 UML 中被称为连接。
- 组件
代表可执行的物理代码模块,如一个可执行程序。
3.描述动态
3.1.顺序图
顺序图(Sequence Diagram),又叫时序图,用于描述对象在特定场景下的行为和交互顺序,从而更好地理解系统的工作流程、消息传递和协作。
一个顺序图中主要有三部分组成:
- 对象: 顺序图中的对象代表系统中的实体,可以是类、角色、组件等。对象用方框表示,通常带有对象的名称。
- 生命线: 生命线是表示对象存在的虚拟线,与对象的生命周期相关。它垂直于顺序图的顶部,从对象出发,通常与对象名称相连。
- 消息: 消息,消息可以理解为就是对象之间的交互,可以是同步的或异步的。同步消息使用实线箭头表示,异步消息使用虚线箭头表示。
时序图其实看一眼示例就很好懂,用的时候照葫芦画瓢即可,以下是博主之前做的一张tomcat的启动流程顺序图,描述了各个实体对象之间的时许交互:
3.2.状态图
状态图(State Diagram),用于描述对象在其生命周期内状态的变化以及状态之间的转换。状态图能够帮助开发人员更好地理解对象的行为和状态变化,从而支持系统的建模、设计和开发。再说直白点就是,状态图用来描述实体不同状态对不同事件做出的反应以及描述状态的跃迁。
一个状态图由以下元素组成:
- 状态(State): 状态是对象的一种情况或状态,可以是实际状态(例如“运行”、“停止”等)或抽象状态(例如“待处理”、“完成”等)。状态用椭圆表示,通常带有状态的名称。
- 转换(Transition): 转换表示状态之间的切换,即对象从一个状态转变为另一个状态的过程。转换由带箭头的实线表示,箭头指向目标状态。
- 事件(Event): 事件是导致状态转换发生的触发因素,例如用户操作、系统信号等。事件通常标注在转换上。
- 起始状态(Initial State): 起始状态表示对象的初始状态,通常使用一个黑色实心圆圈表示。
- 终止状态(Final State): 终止状态表示对象的结束状态,通常使用一个圆内有一个实心点表示。
状态图也属于那种看一看示例就会了,用的时候照葫芦画瓢即可,以下是博主之前做的一个用户状态的状态图,描述了用户的几种状态之间的切换:
4.一个需求分析的例子
博主有一篇文章,其中详细讲解了使用UML进行系统分析的全过程:
面向对象编程范式__BugMan的博客-CSDN博客