【UML】软件工程中常用图:类图、部署图、时序图、状态图

2023-08-23 22:59:49

作者简介:

前言:

UML中的很多东西平时都听过、用过,诸如类图、时序图等,本文将详细详细讲一下UML中常用的几类图,并且会引入一个完整的例子来讲解,UML在工程上到底该怎么合理使用。

目录

1.概述

1.1.什么是UML?

1.2.UML用在何处?

2.静态结构

2.1.类图

2.2.部署图

3.描述动态

3.1.顺序图

3.2.状态图

4.一个需求分析的例子


1.概述

我们经常会在各类软件设计文档中看见许多图,诸如类图、部署图、顺序图、状态图等等,其实这些图都出自于一个地方,就是UML。既然经常看见UML体系中的各种图,就说明UML在我们的软件工程中大量被应用着,所以我想在聊UML之前,我们要先提纲挈领的搞明白两个问题:

  1. 什么是UML?
  2. UML用在何处?
  3. UML有哪些东西?

1.1.什么是UML?

UML(Unified Modeling Language),统一建模语言,是一种在软件工程中对软件系统进行建模的标准图形化建模语言。直白来说就是UML用一系列的图形和符号来帮助描述软件系统,让人更加容易懂整个系统长什么样子。

1.2.UML用在何处?

由于UML能很好的描述软件系统,所以一般用在需求分析、软件设计两个阶段,在需求分析和概设详设里,UML都是利器。

我想很多同学对于需求分析和设计两个阶段都是很迷茫和混乱的,听过各种各样的图,什么数据流图、流程图、结构图、ER图以及UML中的类图、时序图、部署图等等等等。到底在何时用哪些图?以怎样的顺序去使用它们都是很迷惑的。

其实很简单,目前来说在软件工程中我们用到的有两大方法来对软件进行分析和设计:

  1. 结构化方法
  2. 面向对象的方法

这里先给出一个概念,当我们要用面向对象的方法来对软件系统进行分析设计的时候就要用到UML,至于其它的什么数据流图、结构图等东西大多数是用在结构化方法中的。

想详细了解结构化方法的同学,可以移步博主的另一篇文章:

结构化分析方法__BugMan的博客-CSDN博客

想详细了解面向对象方法的同学,可以移步博主的另一篇文章:

面向对象编程范式__BugMan的博客-CSDN博客
 

(上面这篇估计应该是全网都少有的关于面向对象的写的清晰易懂的一篇文章)
 

这里直接给出总结,面向对象的方法其实指的就是从业务场景中分析出一个个的对象实体,然后用对象实体间的交互来组成整个系统,而UML就是用来描述对象实体以及其交互的。

1.3.UML有哪些东西

正如我们知道的,软件系统是很庞大且复杂的一个东西,想要描述清楚,肯定不可能是一个维度就能描述的很准确,所以UML从两种维度提出了一系列的图来用于描述软件系统,常用的包括:

  1. 静态结构
    1. 类图
    2. 组件图
    3. 部署图
  2. 动态行为
    1. 状态图
    2. 活动图
    3. 时序图

以上的图在各类型的软件系统的规范化描述中用到的频率都很高,但是不一定都会用到,选取其中需要的图来描述清楚系统即可。

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博客

更多推荐

RISC-V Reader 笔记(六)RV32V

RV32V早期并行数据计算:采用SIMD单指令多数据,把一个64位宽寄存器拆成若干个32168位长度部分并行计算。这种方法前期看起来十分简单诱人。但是后来如果要扩展SIMD寄存器宽度,也要复杂化指令集,复杂开销越来越大。向量操作:把数据取出来放入长长的向量寄存器中,流水线并行运算后从向量寄存器中分别取回到内存。并且,时

构建高性能应用:Java与MongoDB的完美融合

AI绘画关于SD,MJ,GPT,SDXL百科全书面试题分享点我直达2023Python面试题2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、A

机器人如何有效采摘苹果?

摘要:本文利用动捕数据构建拟人运动模型,对比观察两种苹果采摘模式,并对系统性能进行全面评估,为提高机器人采摘效率提供创新方法。近期,一项关于苹果采摘机器人的有趣研究——"Designandevaluationofaroboticappleharvesterusingoptimizedpickingpatterns",在

C#网站代码防止漏洞和攻击 增强网站安全性方法

输入验证:永远不要信任用户提供的输入数据。始终对用户提交的数据进行验证和过滤,以防止恶意输入。使用正则表达式、白名单过滤或内置的.NET验证来验证输入。防止SQL注入:使用参数化查询或存储过程来执行数据库查询,而不是将用户输入直接嵌入SQL语句中。这可以有效防止SQL注入攻击。防止跨站脚本(XSS)攻击:始终对用户提交

SpringMVC之JSR303和拦截器

目录一.JSR3031.1.介绍1.2.为什么要使用JSR-3031.3.常用注解1.4.快速入门1.4.1.导入依赖1.4.2.配置校验规则1.4.3.编写方法校验1.4.4.测试二.拦截器2.1.什么是拦截器?2.2.拦截器与过滤器的区别2.3.拦截器的应用场景2.4.基础使用2.5.用户登录权限控制最后实战Spr

指针进阶笔试题

今天分享的是指针的笔试题,相信看完这篇文章对指针又会有深入的了解,让我们来学习吧。首先分享的是指针和数组的关系,我们都知道数组名是首元素的地址,那就让我们来看一下一维数组和指针的关系吧//一维数组inta[]={1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof

Java手写桶排序和算法案例拓展

Java手写桶排序和算法案例拓展1.算法思维导图解释实现思路原理#mermaid-svg-OFCWrsU78anzeD09{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OFCWrsU7

【Python】python -m pip install 和 pip install 的区别

文章目录一、pipinstall二、python-mpipinstall三、两者的总结一、pipinstall当你使用pipinstall命令时,你正在使用Python包管理器pip来安装Python包或模块。以下是关于pipinstall的详细理解:安装包:pipinstall<package>命令用于安装指定的Py

【Python】保姆级万字讲解:Python中的 pip 和 conda 的理解

文章目录一、pip的理解1.1安装1.2如何使用1.3升级1.4安装某个版本的包1.5卸载或者是更新包1.6查看某个包的信息1.7查看需要被升级的包1.8查看兼容问题1.9指定国内源来安装1.10下载包但是不安装1.11批量安装软件包二、conda的理解2.1下载源channel详解2.1.1国内部分好用conda下载

Vue学习笔记

初识Vue需要创建Vue实例root容器代码需要符合html规范,但是混入了一些特殊的Vue语法root容器代码被称为Vue模板容器和Vue实力之间一一对应注意区分js表达式、js代码:一个表达式会生成一个值,可以放在任何一个需要值的地方{{}}需要写js表达式,可以读取data中的所有属性data中属性的值发生改变,

回归与聚类算法系列⑤:逻辑回归

目录1、介绍2、原理输入激活函数3、损失及其优化损失函数优化4、API5、案例:乳腺癌肿瘤预测数据集代码🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发。🦅主页:@逐梦苍穹📕回归与聚类算法系列⭐①:概念简述⭐②:

热文推荐