【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

1. 前言

2. UML概述

2.1 UML的分类与功能

2.2 UML的语法与各图关系 ​

3. 四种图的概述

3.1 状态图

3.2 活动图(Activity Diagram)

3.3 构件图(Component Diagram)

3.4 部署图(Deployment Diagram)

4. 状态图

4.1 状态图概要

4.2 状态图中的事物及解释

4.3 状态的可选活动表​

4.4 实例 

(1)网上银行登录系统​

5. 活动图 

5.1 活动图概要

5.2 活动图和状态图的关系

5.3 活动图事物​编辑

5.4 活动图关系

5.5 实例

​编辑

6. 构件图

6.1 构件图概要

6.2 构件图中的事物及解释

6.3 构件图中的关系及解释

6.4 实例

实例1

实例2

7. 部署图

7.1 部署图概要

 7.2 部署图中的事物及解释​编辑

7.3 部署图中的关系及解释

7.4 实例

实例1

实例2

7.5  部署图与构件图的关系

8. 总结 


1. 前言

2. UML概述

所谓UML(Unified Modeling Language,统一建模语言),一种用来对软件密集系统进行可视化建模的语言。

这样的概念大概解释了UML是什么,不过还不够直观。

我们可以换个问题,UML做到了什么,让人们愿意为之喝彩?

答案就是,它统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。它是一种通用的建模语言,可以为许多面向对象建模方法的用户广泛使用。

如此一来,UML的本质也就呼之欲出了。UML的本质就是为了交流

一句话:一个UML就能完成整个软件开发中的交流需要

2.1 UML的分类与功能

UML2.0一共有12种图形(UML1.5定义了9种,2.0增加了3种)。

分别是:用例图、类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图9种,包图、组合结构图、交互概览图3种。

“UML无用论”在很多年前就被提了出来,更是引发了业内不少争议。有用户将它捧上天,甚至“封神”,也有人斥之为垃圾,甚至称其“反人类”。

那么问题来了,UML 真的无用吗?或者用题主的话来说,UML 还有用吗?

我想先说自己的判断:UML 依然有用

之所以这么判断,主要基于以下三点事实:

第一,图比代码更清晰

在复杂需求中,UML图是非常必要的。

用例图描述系统的外部交互、序列图描述系统的内部交互、状态图描述系统的动态特性、部署图描述系统的物理节点、类图与对象图描述依赖关系......

所有的图都是协助团队策划稿能源更高效地厘清问题,掌握知识,高效解决问题的。

试问下,在敏捷开发中,如果没有流程图、序列图、状态图进行辅助,你如何在代码过程中保证业务流程、系统前后端、多个系统切换开发做到敏捷高效?

在敏捷开发时,面对稍复杂点的需求,如果要求团队提前用UML图厘清问题,后续填坑可以少很多。

第二,“假敏捷开发”太多

正如@萝魏紫 所言,中国假敏捷太多了,以敏捷为借口少写甚至不写文档,以至于大量项目在本不应出问题的沟通层面出现大量问题,没有统一的标准,沟通不出问题才怪。

UML统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。

不过,我们也必须注意到,UML不是万能的,但是在系统研发中的沟通作用,效果还是比较好的。

第三,UML 在业界依然在被应用

UML的实际应用例子,大家在这个问答中可以找到不少:

比如,@Milo Yip 表示,“腾讯没有统一、从上而下的软件工程方法论,毕竟业务差异很大。但在各种文档及简报中也经常以 UML 图来呈现一些信息,算是一种辅助沟通的方法。”另外,“我在面试时会让候选人做一些简单设计,用 UML 最好,不会的也可用他熟悉的编程语言表示。”

@fantiny 也举了自己前公司产品ExchangeUSE的例子,据介绍,当时UML在前期需求分析和架构设计阶段起到一定的作用,包括需求分析与共通化整理,系统模块化分析工具,架构设计的交流工具,实现合理性的分析工具。

2.2 UML的语法与各图关系 

各图关系: 

UML语法描述:

3. 四种图的概述

       这一部分先对 状态图、活动图、构件图和部署图 做一个简单的概述。

3.1 状态图

       状态图是一个类对象所可能经历的所有历程的模型图。状态图由对象的各个状态和连接这些状态的转换组成。

状态图描述对象:一个类对象

状态图组成:一个类对象的各种状态、状态转化动作

3.2 活动图(Activity Diagram)

  1. 活动图是状态图的一个变体,用来描述执行算法的工作流程中涉及的活动
  2. 活动图描述了一组顺序的或并发的活动

状态图和活动图:

        1、状态图针对每一个类

        2、活动图针对整合算法系统

3.3 构件图(Component Diagram)

       构件图为系统的构件建模型—构件即构造应用的软件单元—还包括各构件之间的依赖关系,以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响。

构件图(Component Diagram) 是 UML(统一建模语言)中用于描述系统物理构件及其相互关系的图。它展示了系统中各个“构件”(如可执行程序、库、模块等)之间的关系,以及它们如何通过接口进行交互。构件图通常用于描述系统的静态结构,尤其是关注系统的物理实现层次。

构件图的主要元素:

  1. 构件(Component):表示系统中的一个物理模块或部件,它是一个可执行的或可部署的单位。构件可以是程序文件、库文件、Web 服务、数据库、或者任何其他具有独立功能的部分。

    • 符号:构件通常用一个矩形表示,矩形的右上角有一个小的折角。
  2. 接口(Interface)构件之间的交互通常通过接口完成。接口定义了构件提供的服务或其所需的服务。

    • 符号:接口通常是一个小圆圈或带有名字的“半圆”。
  3. 依赖关系(Dependency):构件图中,构件之间可能有依赖关系,这表示一个构件依赖于另一个构件的功能或服务。

    • 符号:依赖关系通常用带箭头的虚线表示,箭头指向被依赖的构件。
  4. 端口(Port):端口是构件和外界进行交互的地方,通常用来定义通过接口暴露的功能。

    • 符号:端口通常表示为构件矩形的一部分,形状如小小的矩形或圆圈。

3.4 部署图(Deployment Diagram)

       部署视图描述位于节点实例上的运行构件实例的安排。节点是一组运行资源,如计算机、设备或存储器。这个视图允许评估分配结果和资源分配。

4. 状态图

4.1 状态图概要

  • 说明对象在它的生命期中响应事件所经历的状态序列,以及它们对那些事件的响应
  • 揭示Actor、类、子系统和组件的复杂特性。 为实时系统建模。
  • 对象的状态是指在这个对象的生命期中的一个条件或状况,在此期间对象将满足某些条件、执行某些活动,或等待某些事件。
  • 转移是由一种状态到另一种状态的迁移。这种转移由被建模实体内部或外部事件触发。
  • 对一个类来说,转移通常是调用了一个可以引起状态发生重要变化的操作的结果。

4.2 状态图中的事物及解释

4.3 状态的可选活动表

4.4 实例 

(1)网上银行登录系统

5. 活动图 

5.1 活动图概要

  • 描述系统的动态行为
  • 包含活动状态(ActionState),活动状态是指业务用例的一个执行步骤或一个操作,不是普通对象的状态。
  • 活动图适合描述在没有外部事件触发的情况下的系统内部的逻辑执行过程;否则,状态图更容易描述。
  • 类似于传统意义上的流程图。
  • 活动图主要用于:
    + 业务建模时,用于详述业务用例,描述一项业务的执行过程;
    + 设计时,描述操作的流程。

5.2 活动图和状态图的关系

  • 活动图和状态图都体现状态在活动中变化。
  • 状态图是一个类对象在活动中状态发生变化。
  • 活动图是整个系统在活动中状态发生变化。

5.3 活动图事物

5.4 活动图关系

5.5 实例

  • 本活动图描述一个处理订单的用例执行过
    (1)执行setup order
    (2)根据order的类型是执行不同的分支:
    - single order:执行assign seat、charge credit card
    - subscription:同时执行assignseats、debit account或 award bonus
    - single order与subscription两步可同时进行

    (3) 最后mail packet。

6. 构件图

6.1 构件图概要

  • 构件图用于静态建模,是表示构件类型的组织以及各种构件之间依赖关系的图。
  • 构件图通过对构件间依赖关系的描述来估计对系统构件的修改给系统可能带来的影响。

6.2 构件图中的事物及解释

  • 可替换的物理部分包括软件代码、脚本或命令行文件,也可以表示运行时的对象,文档,数据库等。
  • 节点(node)是运行时的物理对象,代表一个计算机资源。具体请参见教程“部署图(deployment diagram)”部分。

6.3 构件图中的关系及解释

6.4 实例

实例1

  • 图中的构件名称是Dictionary字典。
  • 该构件向外提供两个接口,即两个服务Spell-check拼写检查、Synonyms同义词。

实例2

  • 图中“Planner计划者”构件向外提供一个“update更新”接口服务。
  • 同时,该构件要求外部接口提供一个“Reservations预定”服务。

7. 部署图

7.1 部署图概要

  • 部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图
  • 如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。
  • 部署图的两种表现形式:实例层部署图和描述层部署图(会在后面的实例中给出)。

 7.2 部署图中的事物及解释

7.3 部署图中的关系及解释

7.4 实例

实例1

  • 实例层部署图描述各节点和它们之间的连接。
  • 本图中的信息与上张描述层部署图中的内容是相互对应的。
  • 图中的关系是各个节点之间存在的通信关系。

实例2

  • 描述层部署图表示了系统中的各节点和每个节点包含的构件。
  • 图中包括的各种关系如下:
    • 通信链关系(不带箭头的直线)
      • TicketServe票服务器与Kiosk信息厅之间存在一对多的通信关联;与SalesTerminal售票终端也存在一对多的通信关联;
    • 依赖关系(带箭头的虚线)
      • TicketSeller售票构件依赖CreditCardCharges信用卡付款构件和TicketDB票数据库构件提供的服务。

7.5  部署图与构件图的关系

部署图(Deployment Diagram)构件图(Component Diagram) 都是 UML 中用于描述系统的静态结构,但它们关注的层次不同,功能上也有所区别。

  1. 构件图 主要关注系统的逻辑结构和软件层面,描述系统中的各个构件(如模块、库、服务等)及其相互关系,强调模块间的依赖、接口和交互。

  2. 部署图 主要关注系统的物理部署和硬件层面,展示节点(如服务器、工作站、设备等)之间的关系,并标明哪些构件部署到哪些节点上。

关系:

  • 构件图 描述的是系统的软件组件及其内部结构,而 部署图 描述的是这些组件如何在物理硬件上部署和运行。
  • 构件图 中的构件通常会在 部署图 中被映射到一个或多个节点上,显示它们的实际部署情况。
  • 例如,构件图中的业务逻辑组件可能会被部署到一个服务器节点上,而数据库组件则可能被部署到另一台数据库服务器节点。

8. 总结 

本文到这里就结束啦~~

目前已经完成:

【软件工程】一篇入门UML建模图(类图)_uml图教程-CSDN博客

【软件工程】一篇入门UML建模图(用例图、对象图、顺序图与协作图)-CSDN博客

本篇讲述:状态图、活动图、构件图、部署图

如果觉得对你有帮助,友友们可以点个赞,收个藏呀~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934750.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BGP路由优选

BGP是一个应用广泛的边界网关路由协议,定义了多种路径属性,拥有丰富的路由策略工具 BGP路由的各种属性的操作会影响路由的优选,从而对网络流量产生影响,BGP路由的优选规则十分重要 BGP路由优选的规则 当到达同一个目的网段存在…

路径规划之启发式算法之十四:蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)

蜘蛛蜂优化算法(Spider Wasp Optimizer, SWO)是一种受自然界中蜘蛛蜂行为启发的元启发式智能优化算法。由Mohamed Abdel-Basset等人于2023年提出,算法模拟了雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有独特的更新策略,适用于具有不同探索和开发需求的广泛优化问题。 一、算法背…

在 Ansys Q3D 中求解直流和交流电感

提取电缆的电感对于确保电气和电子系统的性能和可靠性至关重要。本篇博客文章将介绍使用 Ansys Q3D 求解直流和交流电感的过程。 概述 在这个例子中,我们将考虑一个由两组电缆组成的简单几何:正极和负极,如下所示: 可以使用“自…

算法日记 47 day 最小生成树(prim,kruskal)

今天主要是针对最小生成树的两种算法。 用题目来举例 题目:寻宝 53. 寻宝(第七期模拟笔试) (kamacoder.com) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这…

三、nginx实现lnmp+discuz论坛

lnmp l:linux操作系统 n:nginx前端页面 m:mysql数据库,账号密码,数据库等等都保存在这个数据库里面 p:php——nginx擅长处理的是静态页面,页面登录账户,需要请求到数据库&#…

“, ”逗号分隔打印序列不显最后一个(Python)

可以if条件语句过滤,更可以’, .join()拼接序列省却循环打印。 (笔记模板由python脚本于2024年12月10日 19:03:54创建,本篇笔记适合学过Python基本数据类型的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Fr…

初阶2 顺序表

本章重点 线性表顺序表 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0…

破局沉寂的区块链市场:未来之路与战略思考

近年来,区块链行业经历了高速增长、泡沫破裂和市场低谷。如今,尽管技术发展仍在持续,市场热度却明显降温。无论是公链项目、去中心化金融(DeFi),还是NFT和GameFi,许多领域都陷入了创新瓶颈和用户…

leetcode-289.生命游戏-day3

时间复杂度O(Mn) public void gameOfLife(int[][] board){if(board.length 0 || board[0].length0) return;int m board.length, n board[0].length;int[] neighbor {0, 1, -1};for(int i 0; i < m; i)for(int j 0; j < n; j)if(board[i][j] % 10 1)for(int k 0…

SYN6288语音合成模块使用说明(MicroPython、STM32、Arduino)

模块介绍 SYN6288中文语音合成模块是北京宇音天下科技有限公司推出的语音合成模块。该模块通过串口接收主控传来的语音编码后&#xff0c;可自动进行自然流畅的中文语音播报。 注&#xff1a;SYN6288模块无法播报英文单词和句子&#xff0c;只能按字母播报英文 &#xff1b;而…

JS API事件流

事件流两个阶段说明 目标&#xff1a;能够说出事件流经过的2个阶段 事件流指的是事件完整执行过程的流动路径 说明&#xff1a;假设页面里有个div&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段 简单来说&#xff1a;捕获阶段是 …

15.Java 网络编程(网络相关概念、InetAddress、NetworkInterface、TCP 网络通信、UDP 网络通信、超时中断)

一、网络相关概念 1、网络通信 网络通信指两台设备之间通过网络实现数据传输&#xff0c;将数据通过网络从一台设备传输到另一台设备 java.net 包下提供了一系列的类和接口用于完成网络通信 2、网络 两台以上设备通过一定物理设备连接构成网络&#xff0c;根据网络的覆盖范…

Moretl轻量化日志采集工具

永久免费: 至Gitee下载 使用教程: Moretl使用说明 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架构 技术架…

Spring Security6.3 自定义AuthorizationManager问题

项目环境&#xff1a; Springboot3.3.5, 对应的SpringFrameWork6.1&#xff0c;Security为6.3 问题&#xff1a;我想自定义AuthorizationManager接口实现类&#xff0c;在里面判断如果角色为amdin则放行请求&#xff1b; 在AdminAuthorizationManager类的check()方法中pass变量…

【一本通】Beads

【一本通】Beads &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; Zxl 有一次决定制造一条项链&#xff0c;她以非常便宜的价格买了一长条鲜艳的珊瑚珠子&#xff0c;她现在也有一个机器&#xff0c;能把这条珠子切成很多块&#xff08;子串&…

开放词汇的航拍对象检测

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月11日18点20分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…

【PyQt5教程 四】Qt Designer 样式表(styleSheet)实现基本小部件的自定义动态效果和资源浏览器背景添加方法

目录 一、成果演示&#xff1a; 二、样式表的使用方法: &#xff08;1&#xff09;样式表语法和属性&#xff1a; &#xff08;2&#xff09;样式表代码示例&#xff1a; &#xff08;3&#xff09;伪类和状态&#xff1a; &#xff08;4&#xff09;复合选择器&#xff…

2024小迪安全基础入门第十二课

目录 一、请求头&返回包-方法&头修改&状态码等 二、 数据包分析-红队攻击手法&蓝队流量研判 三、数据包构造-Reqable自定义添加修改请求 一、Reqable概述 二、数据包构造基本步骤 三、Reqable常见用法示例 四、使用 Reqable 进行安全测试 一、请求头&am…

Springboot3 Mybatis-plus 3.5.9

1. Mybatis-plus 官网&#xff1a;链接 1. 依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.9</version> </dependency>2. 注解配置表名、字段…

android——录制屏幕

录制屏幕 1、界面 2、核心代码 import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.app.Service import android.content.Context import android.content.Intent import android.graphics.Bi…