UML之泛化用例

news/2025/3/18 8:10:42/文章来源:https://www.cnblogs.com/gtyan/p/18776609

在UML中,参与者和用例都可以被泛化或特化,它们在泛化或特化时遵循面向对象中泛化与特化的特性。
用例泛化在有多种方法实现用例目标时非常有用。例如在许多需求场景中都需要“付款”,而当下人们支付的方式多种多样,除了传统的“现金支付”方式外,还可以选择“刷卡支付”或者“扫码支付”。刷卡支付又包括“信用卡支付”和“借记卡支付”两种实现途径,而扫码支付则可以选择“支付宝支付”或“微信支付”。这些付款用例之间的关系可以采用图 1建模。

图 1 用例泛化建模
上图中用例之间通过泛化体现出它们之间存在的关系,而且在图中除叶子结点用例外,其余用例都是泛化用例,对泛化用例添加、修改或删除任何需求或者目标都将自动适用于特化用例,这是泛化关系中继承特性的具体体现。
在建模实操中,或许有建模者直接使用上图中各叶子结点用例建模,即将上图简化为仅有现金支付、信用卡支付、借记卡支付、支付宝支付、微信支付五个用例,这种建模方式虽然也能实现付款的目标,但它也使得模型中参与者与用例之间的关系变得复杂。以下两张图(图 2和图 3)分别是在使用泛化关系和不使用泛化关系并同时加入参与者的建模结果。可以看到,在使用泛化关系时,参与者“顾客”只需要与用例“付款”建立关联,而不使用泛化关系时则参与者“顾客”需要分别与各个具体付款用例建立关联,此时虽然用例数量少了,但参与者与用例之间的关系却变得更加复杂了。

图 2 泛化用例与参与者关联

图 3 具体用例与参者关联
不使用泛化关系建模还存在另外一些问题,比如实现各个具体的付款用例时,各用例其实有着大量相似的操作与流程,因而在进行用例场景描述(用例实现)时将会产生重复工作。
此外,如果付款用例需要进行修正,在使用泛化关系的模型中,只需要修改“付款”一个用例即可,而在未使用泛化关系的模型中则需要修改每一个具体的付款用例。
基于泛化关系建模,也利于用例的扩展。例如对于“扫码支付”,当前仅实现“支付宝支付”和“微信支付”,后继如果需要追加其他扫码支持,例如“云闪付支付”,只需要在“扫码支付”下特化一个“云闪付支付”用例即可,对模型整体影响不大。
上图中还使用了“抽象用例”(UML用斜体的用例名称表示),抽象用例是不能直接实例化或执行的用例,它代表一组用例的共同行为和目标,它通常提取和封装多个具体用例的公共步骤或逻辑,以便实现用例之间的复用和模块化。
建模时,参与者与用例可能同时存在泛化关系。例如在图书馆借阅场景下,很多图书馆将读者(借阅者)分成两类,即仅能借阅图书的普通借阅者和允许借阅视听资源的视听借阅者。视听借阅者也可以借阅图书,也就是说视听借阅者可以拥有普通借阅者所有的特性,因而可以在视听借阅者与普通借阅者之间建立泛化关系;而借阅视听资源的具体流程与目标和借阅图书是相似的,只是被借对象除图书外还增加了视听资源,它是借阅图书的一种特化,所以这两个用例之间也存在有泛化关系。其建模结果如图 4。

图 4 用例与参与者同时泛化建模
类似地,在上述图书馆借阅场景下,如果不使用泛化关系,则视听借阅者就必须与借阅图书用例建立关联,如图 5所示。

图 5 不使用泛化关联建模
事实上,在图书馆借阅场景下,与普通借阅者相关联的用例不止一个,如果将它们全部建模,那么在上述用例图中,所有与普通借阅者有关联的用例,视听借阅者也必须通过实线与它们建立关联。
在本文最后,请读者思考一个问题,在图 4中,如果将两个泛化关系去除任意一个而保留另一个,这个模型描述的场景会变成什么样的呢?

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

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

相关文章

01. Linux系统编程入门

入门系统编程,首先理解一下基本的系统调用和库函数的区别 一切皆文件的思想,都是通过文件描述符来进行操作 strace命令文件读写系统调用 #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main (void) {in…

Macbook pro 打开pgAmin报错

当我们安装完postgresql,打开自带的pgAdmin时会报如下错误,这时候我需要去单独下载一个版本pgAdmin重新安装 下载地址:https://www.pgadmin.org/download/pgadmin-4-macos/

读DAMA数据管理知识体系指南23数据集成概念(上)

读DAMA数据管理知识体系指南23数据集成概念(上)1. 数据集成和互操作 1.1. 数据集成和互操作(DII)描述了数据在不同数据存储、应用程序和组织这三者内部和之间进行移动和整合的相关过程 1.2. 数据集成是将数据整合成物理的或虚拟的一致格式 1.3. 数据互操作是多个系统之间进行…

02. log WriteBatch 的结构和编码

在这样的情况之下,我就想来捋一下,这个代码的逻辑 首先从不同的模块说起吧include/leveldb : 这里面存储了要暴露给外部的API,这里面的结构,从使用者来说会比较熟悉,就是通过这里面的结构,实现它的功能,对不同的组件会有一个直观的定义 db : 这里面是对应的实现的类,不…

01. 非阻塞的Skiplist

首先学习LevelDB当中比较独立的一部分,当然的,读源码的话,一个很好的入门的感觉就是先从一个独立的组件模块开始,一个比较容易的开始,SkipList 然后跳表的基本概念什么的我不太想要去过多的赘述,就像二叉树那样希望能得到log(N)的性能,而又利用概率算法更好实现,可以看…

ROCm技术小结与回顾(下)

示例3–V_MFMA_F64_4x4x4F64 考虑V_MFMA_F64_4x4x4F64指令,它计算大小为44的四个独立矩阵块的MFMA。执行的操作是 ,其中 , , 和 都是大小为44元素的矩阵,N=0,1,2,3。下面的两张图显示了 1)输入参数A和B的四个分量的大小和形状,如图4-18所示。 2)分量映射到波阵面所拥有…

ROCm技术小结与回顾(上)

ROCm技术小结与回顾 在这一部分中,首先检查了Kernel 5在各种AMD GPU和问题大小上的性能,并注意到当网格超过一定大小阈值时,性能似乎会急剧下降。通过实验确定,LLC的大小是大型xy平面问题性能的限制因素。提出了两种不同的解决方法来规避缓存大小的问题,这两种方法都只需要…

有限差分法——拉普拉斯第4部分

有限差分法——拉普拉斯第4部分 提出了拉普拉斯算子有限差分法的HIP实现,并应用了四种不同的优化。在这些代码修改过程中,观察到由于全局内存的总取数减少,性能得到了逐步提高。然后,应用了进一步的优化,以在512512512上达到预期的性能目标MI250X GPU的单个GCD上的512个点…

推荐几本书1《AI芯片开发核心技术详解》、2《智能汽车传感器:原理设计应用》、3《TVM编译器原理与实践》、4《LLVM编译器原理与实践》,谢谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

WebKit Inside: CSS 的匹配原理

WebKit Inside: CSS 的匹配原理相关文章WebKit Inside: CSS 样式表的解析 WebKit Inside: CSS 样式表的匹配时机 WebKit Inside: Acitvie 样式表 当WebView解析完所有外部与内联样式表,就要进入到CSS样式表的匹配阶段。 1 相关类图 WebKit中参与CSS样式表匹配的主要类如下图所…

助记词-公私钥-子私钥派生-钱包地址原理及实现

0x01.简介 现在各种DEX、钱包插件中的钱包导入及创建,大部分是通过助记词来备份的; 助记词是明文私钥的一种表现形式,最早由BIP39提出,为了帮助用户记住复杂的私钥; 一组助记词可以生成各个链上的公私钥,进而可以算出钱包地址;掌握了助记词,就代表掌握了该组助记词上的…

AI 代理的未来是事件驱动的

AI 代理即将彻底改变企业运营,它们具备自主解决问题的能力、适应性工作流以及可扩展性。但真正的挑战并不是构建更好的模型。 代理需要访问数据、工具,并且能够在不同系统之间共享信息,其输出还需要能被多个服务(包括其他代理)使用。这不是一个 AI 问题,而是一个基础设施…