UML之扩展用例

UML用例建模面向业务实现或者系统功能,每一个用例实现一个完整的业务或者功能。而一个完整的用例也可能有一些不是必需的附加功能,或者在该用例已经实现后需要添加一些新功能,此时可以通过UML提供的扩展用例机制描述类似这样的场景。

例如对于银行储蓄业务,最基本也是最核心的用例便是“取钱”与“存钱”,当业务办理完成后,通常储户还可以对当前服务进行评价,对服务进行评价不是必须的环节,它是这两个用例的可选活动,不进行评价并不影响用例“取钱”和“存钱”的目标实现。对服务进行评价这个活动可以单独建模为用例“评价服务”。用例“评价服务”不能单独存在,它必须依附于用例“取钱”与“存钱”,它们之间通过由用例“评价服务”指向用例“取钱”和“存钱”的虚线箭头连接,并且在虚线上标示“«extend»”,表明用例“评价服务”是一个扩展用例,它扩展于基本用例“取钱”和“存钱”,如图 1所示。

 图 1 扩展用例描述方法

在图 1中,可以看到基本用例“取钱”和“存钱”中还展示了“扩展点(extension points)”,这是构建扩展用例的一个可选项,即对一个基本用例进行扩展时可以在基本用例中标明扩展点,所谓扩展点就是基本用例调用扩展用例的位置,可以看作是基本用例中某一点的一个分支。

从基本用例的视角出发,扩展用例是可选的,但在什么样的条件下会选择执行扩展用例呢?如果扩展用例的名称本身不足以表明执行条件,那么就需要在建模时通过为扩展关系指定约束的方式指明扩展用例的执行条件。例如对于上例,扩展用例“评价服务”执行的条件是“储户在服务完成后选择对服务进行评价”,该条件可以通过为扩展关系(即带«extend»标示的虚线箭头)添加注释的方式进行说明,如图 2所示。在通常情况下,扩展用例触发的条件可能是基本用例状态的改变。

 图 2 为扩展关系添加约束条件

理想情况下扩展用例用于扩展与基本用例有关联的那些非关键的活动,但在实际建模活动中,扩展用例也经常用来描述一个活动流程中不同的分支。例如,在某个模型中有“付款”这个用例,完全基于面向对象思想建模应当使用泛化关系建立各用例之间的关系(详见《泛化用例》),如图 3所示。

 图 3 使用泛化建模

在实际建模活动中,有可能最初的模型由于建模时间较早或其他什么原因,“付款”的场景只有使用“现金支付”一种途径,因而在建模时仅构建用例“付款”(或者“现金支付”),且该用例实现使用现金付款的流程。而后继在系统升级改造时,要求支持刷卡和扫码支付,此时多数建模者会选择通过扩展原有用例的方式来实现功能扩展与升级,如图 4所示。

图 4 扩展取代泛化建模 

 在上图中,用例“刷卡支付”和“扫码支付”依然建模为抽象用例(通过使用斜体的用例名称表示),并由其他具体用例实现,这当然是正确的建模方式。但是假如很不幸,最初的模型其实经历了两次升级,第一次升级的时点国内还没有普及信用卡,大家只有借记卡,同时扫码支付也只有支付宝提供支付,因而此次升级的任务是将仅支持现金付款升级为支持“刷借记卡支付”和“扫支付宝支付”,并且建模者没有预料到信用卡和其他支持扫码支付应用的出现,因而在此次升级中直接使用扩展用例进行升级;而第二次升级时,则要进一步支持“刷信用卡支付”和“扫微信支付”,基于第一次升级的选择,这一次继续使用扩展用例或许不算有错。升级完成的用例图如图 5所示。

 图 5 多级扩展

图 5展示的用例图也表明用例之间的扩展关系可以存在多个级别,即一个扩展用例本身也可能存在它的扩展用例。此外,一个基本用例可以有多个扩展用例(如图 5中的用例“付款”),一个扩展用例也可以被多个基本用例扩展。

用例之间的扩展关系与包含关系有同有异,简单总结如下:

相同点——两者都使用带箭头的虚线表示;基本用例调用两者时,都没有类似函数调用的参数与返回值,而更类似“复制-粘贴”;两者与基本用例之间的关系都是多对多的。

相异点——表示扩展关系的带箭头虚线由扩展用例指向基本用例,而包含关系则由基本用例指向被包含用例;扩展用例是基本用例的可选部分,包含用例是基本用例的必选部分。

UML – 光头颜说IThttps://gtyan.com/archives/category/uml 

UML之包含用例-CSDN博客

UML之泛化用例-CSDN博客

UML之参与者(Actor)_uml actor-CSDN博客

UML之发现用例-CSDN博客

UML之泛化、特化和继承_uml中泛化-CSDN博客

UML之组合与聚合_uml聚合和组合-CSDN博客

UML之关联_uml图关联-CSDN博客

UML之集合类型-CSDN博客

UML之属性与参数的多重性_类图多重性标注-CSDN博客

UML之模型、包及包的版型(构造型)_包体系结构-CSDN博客

UML之包的导入与访问_uml的包使用-CSDN博客

UML之包与包图_uml包图实例-CSDN博客

UML之类型_bolck definition diagram 中的signal,value type,enume-CSDN博客

UML之修饰符_图框架标题类型之谬-CSDN博客

UML之类与类图-CSDN博客

UML之图框架标题类型之谬_框架标题是什么-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习(95)-谓词下推

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

行式存储(Row-based Storage)与列式存储(Column-based Storage)详细对比

行式存储(Row-based Storage)与列式存储(Column-based Storage)详细对比 1. 数据组织方式 类型行式存储列式存储存储结构按行存储数据,每条记录的所有字段(列)连续存放(如一条订单的…

Seg-Zero:通过认知强化实现的推理链引导分割

文章目录 速览摘要1. 引言2. 相关工作2.1. 大模型中的推理能力2.2. 结合推理的语义分割2.3. 用于分割任务的 MLLMs 3. 方法3.1. 流程建模(Pipeline Formulation)3.2. Seg-Zero 模型3.3. 奖励函数(Reward Functions)3.4. 训练&…

win server2022 限制共享文件夹d

点击配额管理中的配额 然后创建配额 导入要配额的文件即可 然后确定即可

Docker容器部署Java项目(详细版)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Docker容器部署Java项目1. 环境及准备2. 项目…

C语言深度解析:从零到系统级开发的完整指南

一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性,成为系统级开发的首选语言。例如,Linux内核通过C语言直接操作内存和硬件寄存器,实现高效进程调度。 关键点: malloc/free直接管理内存&#…

Pytorch实现之基于GAN+序列后向选择的情绪识别增强方法

简介 简介:在WGAN-GP+CGAN的基础上利用了序列后向选择方法来挑选优质样本补充到训练集当中,丰富训练数据集。 论文题目:基于生成对抗网络的情绪识别数据增强方法 期刊:传感技术学报 摘要:使用深度学习方法构建高准确率的情绪识别模型需要大量的情绪脑电数据。 生成对抗…

软件工程面试题(十九)

1、十六进制的216转换十进制是多少: 216是16进制,转10进制: =2*16^2+1*16^1+6*16^0 =512+16+6 =536 2、Java中的XML解析方式: dom和jdom解析 Java中处理XML文档的标准API有两种,即XML的简单API(SAX,Simple API for XML)和文档对象模型(DOM,…

大模型AI Agent的工作原理与安全挑战

大模型AI Agent的工作原理与安全挑战 0x00 引言 智能体(AI Agent)作为大语言模型技术(LLM)的具体应用形式,突破了传统语言模型仅限于文字输入与输出的局限性。其通过感知环境、规划决策及执行行动的闭环机制&#xf…

腻子刮的遍数越多越好?刮的越厚墙面越平?

很多业主对刮腻子存在误区,感觉腻子刮的越厚越好,遍数越多越好。同时认为腻子有找平的作用,感觉墙面不平,就是腻子刮的不行。 有一位业主给我留言,说家里的腻子刮了两遍,然后油工师傅就开始打磨刷漆了&…

「深入解析 Chromium Message Pump:消息循环的核心驱动」

MessagePump 是 Chromium 中 消息循环(Message Loop) 的核心组件之一,负责在不同平台上管理和分发消息、事件,并协调任务调度。 在浏览器这样的 GUI 应用中,事件循环(Event Loop)是非常重要的&…

3d pose 指标和数据集

目录 3D姿态估计、3维重建指标: 数据集 EHF数据集 SMPL-X 3D姿态估计、3维重建指标: MVE、PMVE 和 p-MPJPE 都是用于评估3D姿态估计、三维重建等任务中预测结果与真实数据之间误差的指标。 MVE (Mean Vertex Error):是指模型重建过程中每个顶点的预测位置与真实位置之间…

大智慧大数据面试题及参考答案

目录 MySQL 的事务隔离级别是什么? MySQL 的覆盖索引是怎样的? MySQL 常用的存储引擎有哪些,它们之间的区别是什么? 在 MySQL 中,如果读取很大的数据集,同时进行一边 select 一边写入操作,结果会怎样? 当 ES 出现分词错误的情况时,应该如何处理? Kafka 如何保证…

微服务的简单认识

目录 一、微服务架构简介 二、微服务架构风格和分布式系统架构的关系 三、微服务组成 一、微服务架构简介 微服务是一种构建分布式系统的架构风格,它将一个大型的应用程序拆分成多个小型的、独立部署的服务单元,每个服务单元都专注于特定的业务功能,并通过轻量级的通信机…

Spring的 @Conditional @ConditionalOnProperty 注解 笔记250330

Spring的 Conditional ConditionalOnProperty 注解 Spring 的 Conditional 与 ConditionalOnProperty 注解详解 在 Spring 框架中,Conditional 和 ConditionalOnProperty 是用于动态控制 Bean 注册的重要注解。虽然它们都服务于条件化配置,但定位和使用…

电路学习——MOS栅极驱动电阻取值(2025.03.30)

参考链接1: 驱动芯片的驱动电流的选型和计算 参考链接2: NMOS栅极驱动电阻Rg阻值和功率的计算,NMOS栅极驱动电阻Rg的作用,如何防止NMOS误开通 单片机直接驱动NMOS的方法 RLC谐振电路 智能车BLDC 在此感谢各位前辈大佬的总结,写这个只是为了记…

mysql JSON_ARRAYAGG联合JSON_OBJECT使用查询整合(数组对象)字段

父表数据(表名:class) idname1一年级2二年级3三年级 子表数据(表名:students) idnameclassId11张三112李四113小明3 关联子表sql查询(推荐使用方法一) 方法一 (使用IFNull判断子…

张量-pytroch基础(2)

张量-pytroch网站-笔记 张量是一种特殊的数据结构,跟数组(array)和矩阵(matrix)非常相似。 张量和 NumPy 中的 ndarray 很像,不过张量可以在 GPU 或其他硬件加速器上运行。 事实上,张量和 Nu…

marked库(高效将 Markdown 转换为 HTML 的利器)

文章目录 前言使用基本使用自定义渲染器例子 代码高亮 前言 最近尝试了一下通过星火大模型将ai引入到项目上,但是ai返回的数据可以显而易见的发现是markedown语法的,那么就需要一个工具,将类似这种的格式转换为markdown格式 Marked 是一个用…

调用deepseek大模型时智能嵌入函数

DeepSeek-R1 当前炙手可热,以其强大的自然语言处理和推理能力而广受赞誉。饶是如此,却并不原生支持函数调用(function_call),这是开发过程中不可或缺的一部分。虽有第三方调校的模型支持,然终非官方自带,还需假以时日。本文虽然简短,应该是全网写得最通透的了吧。 …