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

ops/2024/12/16 1:44:37/

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

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

目录

1. 前言 

2. UML概述

2.1 UML的分类与功能

2.2 UML的语法与各图关系 

​编辑

3. 四种图的概述

3.1 用例图( Use Case Diagram )

​编辑

3.2 对象图( Object Diagram )

3.3 顺序图(Sequence Diagram)

3.4 协作图(Collaboration Diagram)

4. 用例图

4.1 用例图概要

4.2 用例图中的事物及解释

4.3 用例图中的关系及解释​编辑

4.4 例子

实例1 参与者之间的泛化关系

 实例2 用例之间扩展和包含关系

5. 顺序图

5.1 顺序图概要

5.2 顺序图中的事物及解释

5.3 顺序图与用例图与类图的关系​编辑

5.4 顺序图例子

6. 协作图

6.1 协作图概要

6.2 协作图中的事物及解释

6.3 协议图中的关系及解释

​编辑

6.4 协作图与顺序图的区别和联系

6.5 例子

1.打印操作的协作图​编辑

2.乘坐电梯的协作图​编辑

7. 对象图

7.1 对象图概述

7.2 实例

8. 总结


1. 前言 

通过前一篇文章,我们已经入门了UML图中的类图:

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

类图是UML图中最难、体系最庞大的图,主要包括:对象图、特征图、关系图三个层次。

对象图:

  • 边界图:和外界有交互的部分。
  • 控制图:存在行为控制的部分
  • 实体图:对数据实体有控制的部分

特征图:详细描绘每一个类的行为以及属性

关系图:我们最熟悉的UML类图形式,描述类与类之间的各种关系(泛化、实现;关联、依赖;聚合、组合)

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语法描述">UML语法描述:

3. 四种图的概述

       这一部分先对 用例图、对象图、顺序图与协作图 做一个简单的概述。

3.1 用例图( Use Case Diagram )

       用例图是从用户角度描述系统功能, 是用户所能观察到的系统功能的模型图,用例是系统中的一个功能单元。

用例图:用户角度描述系统功能的一个例子 

3.2 对象图( Object Diagram )

       对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。

对象图:类图的其中一种(广义上的类图)

3.3 顺序图(Sequence Diagram)

  1. 顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互。
  2. 顺序图的一个用途是用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或引起状态转换的触发事件。

3.4 协作图(Collaboration Diagram)

  1. 协作图描述对象间的协作关系协作图跟顺序图 相似,显示对象间的动态合作关系。除显示信息交换外,协作图还显示对象以及它们之间的关系.
  2. 协作图的一个用途是表示一个类操作的实现

协作图和顺序图:

        1、都表示类之间的交互行为。

        2、协作图仅仅表示交互行为的存在,顺序图除了表示交互行为外还表示行为的顺序。

4. 用例图

4.1 用例图概要

  1. 用例图是被称为参与者的外部用户所能观察到的系统功能的模型图。 (《UML参考手册》)
  2. 用例图列出系统中的用例和系统外的参与者,并显示哪个参与者参与了哪个用例的执行(或称为发起了哪个用例)。
  3. 用例图多用于静态建模阶段(主要是业务建模和需求建模)。

4.2 用例图中的事物及解释

4.3 用例图中的关系及解释

用例之间:拓展、包含

参与者之间:泛化

参与者和用户:关联

4.4 例子

实例1 参与者之间的泛化关系

       在参与者之间不存在泛化关系的情况下,各个参与者参与 用例的情况分别是:经理参与用例管理人事和批准预算;安全主管参与用例批准安全证书;保安参与用例监视周边。由于安全主管与经理,安全主管与保安之间泛化关系的存在,意味着安全主管可以担任经理和保安的角色,就能够参与经理和保安参与的用例。这样,安全主管就可以参与全部4个用例。但经理或者保安却不能担任安全主管的角色,也就不能参与用例批准安全证书。

 实例2 用例之间扩展和包含关系

       用例的上下文是:短途旅行但汽车的油不足以应付全部路程。那么为汽车加油的动作在旅行的每个场景(事件流)中都会出现,不加油就不会完成旅行。吃饭是每一个人的基础,人可以不旅行但是必须吃饭。

5. 顺序图

5.1 顺序图概要

  • 顺序图用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的事件。
  • 顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。 顺序图属于动态建模。
  • 顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接收的。表示了对象之间传送消息的时间顺序。
  • 浏览顺序图的方法是:从上到下查看对象间交换的消息。

5.2 顺序图中的事物及解释

5.3 顺序图与用例图与类图的关系

5.4 顺序图例子

 

  • 此图是描述购票这个用例的顺序图。顾客在信息亭与售票中心通话触发了这个用例的执行。顺序图中付款这个用例包括售票中心与信息亭和信用卡服务处使用消息进行通信过程。
  • 此图中存在的事物有:
    对象(信息亭 Kjosk ,售票中心 Box Office, 信用卡服务 Credit Card Service ),生命线,消息符号。
  • 售票中心发Show Available(seat-list)消息给信息亭,表示调用信息亭类中的Show Available(seat-list)操作,给出可用的座位表。

6. 协作图

6.1 协作图概要

  • 协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构,使用协作图来说明系统的动态情况。
  • 协作图主要描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息。
  • 协作图可以表示类操作的实现。

6.2 协作图中的事物及解释

6.3 协议图中的关系及解释

6.4 协作图与顺序图的区别和联系

        1. 协作图和顺序图都表示出了对象间的交互作用,但是它们侧重点不同。

        2. 顺序图清楚地表示了交互作用中的时间顺序(强调时间),但没有明确表示对象间的关系。

        3. 协作图清楚地表示了对象间的关系(强调空间),但时间顺序必须从顺序号获得。

        4. 协作图和顺序图可以相互转化。

协作图省略对象间交互动作的时间关系,让我们着眼于交互行为的空间关系 

6.5 例子

1.打印操作的协作图

2.乘坐电梯的协作图

       参与者需要乘坐电梯,他从系统外部按下按钮,让电梯到达他想去的楼层。此时,电梯系统的操作被启动,电梯控制对象以循环的方式检查所有的电梯,从中选择一个工作队列长度最短的。然后,它创建一个作业命令,并将该命令放入对应电梯的工作队列,接着激活队列。电梯对象并发运行,从它的队列中选择一个作业并执行。电梯是一个活动对象,它与它的控制线程并发执行。

7. 对象图

7.1 对象图概述

类的类型有三个:

1.边界类(系统边界):用户界面、系统接口、硬件接口

2.实体类(系统信息):系统存储的信息及相关行为

3.控制类(协调用例行为):封装用例所持有的控制行为

边界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。

控制类用于对一个或几个用例所特有的控制行为进行建模。

实体类是用于对必须存储的信息和相关行为建模的类。

边界类,控制类,实体类很像MVC中的V层,C层,M层!!!

view层(用来和外界用户交互)、C层(方法层,交互的方法)、M层(数据库的操作对象以及表实体,数据持久层)  

7.2 实例

 

8. 总结

本文到这里就结束啦~~

目前已经完成:【软件工程】一篇入门UML建模图(类图)_uml图教程-CSDN博客

以及本篇关于:用例图、顺序图、协作图、对象图

后续猫猫还将讲:状态图、活动图、构件图、部署图

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


http://www.ppmy.cn/ops/142257.html

相关文章

【前端】HTML

目录 一、HTML结构 1.1 HTML标签1.2 HTML文件基本结构1.3 快速生成框架 二、HTML常见标签 2.1 注释标签 !-- –2.2 标题标签 h1到h62.3 段落标签 p2.4 换行标签 br2.5 格式化标签2.6 图片标签 img2.7 超链接标签 a 三、表格标签 3.1 常用标签3.2 合并单元格 四、列表标签五、表…

玉米叶病预测数据集,使用yolo,coco,voc格式人工标注,准确率可达95.7%以上, 10884张图片,可识别叶枯病,普通锈病,灰叶斑病,健康的玉米叶

玉米叶病预测数据集,使用yolo,coco,voc格式人工标注,准确率可达95.7%以上, 10884张图片,可识别叶枯病,普通锈病,灰叶斑病,健康的玉米叶 普通锈病 灰叶斑病 健康的 叶枯病…

DAY5 C++运算符重载

1.类实现> 、<、!、||、&#xff01;和后自增、前自减、后自减运算符的重载 代码&#xff1a; #include <iostream>using namespace std; class Complex {int rel;int vir; public:Complex(){};Complex(int rel,int vir):rel(rel),vir(vir){cout << "…

杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

上一节&#xff0c;我们分清了主次矛盾&#xff0c;并搞定了主要矛盾&#xff08;去掉黄色的字&#xff09;&#xff0c;这一节解决次要矛盾&#xff08;矩形色带&#xff09;。 我们的想法如图&#xff1a; 1&#xff0c;我们找到稳定黄色的最左边&#xff0c;最右边两点&…

ElementEye,网页分析器

介绍 我们经常使用Python写爬虫&#xff0c;爬到网页数据之后&#xff0c;就需要用beautifulSoup进行解析。因为写爬虫并不是我的主营工作&#xff0c;大多数只是用来分析一下想要的数据而已&#xff0c;所以经常会忘记beautifulSoup的用法。 同时&#xff0c;我们总是分析页面…

动手学深度学习-线性神经网络-softmax回归

目录 分类问题 网络架构 全连接层的参数开销 softmax运算 小批量样本的矢量化 损失函数 对数似然 softmax及其导数 交叉熵损失 信息论基础 熵 信息量 重新审视交叉熵 模型预测和评估 小结 在上上上一节中我们介绍了线性回归。 随后&#xff0c;然后在上上一节中…

java实现word转换pdf,word文件转换pdf文件,java如何将word转换pdf

1.java依赖 <dependency><groupId>com.aspose.cells</groupId><artifactId>aspose-cells</artifactId><version>8.5.2</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>…

树的遍历【东北大学oj数据结构7-3】C++

题面 二叉树是递归定义的。 二叉树 T 是定义在有限节点集上的结构 不包含节点&#xff0c;或者由三个不相交的节点集组成&#xff1a; 一个根节点。称为左子树的二叉树。称为右子树的二叉树。 您的任务是编写一个程序&#xff0c;该程序基于以下算法执行树遍历&#xff08;系…