软考:软件设计师 — 11.UML 建模

十一. UML 建模

UML 建模部分是下午场考试中第三个题目,分值 15 分。先介绍一下这类题目的考查形式。

1. 考察形式

(1)类图与对象图

  • 填类名,方法名,属性名
  • 填关系
  • 填多重度

UML 中四种基本关系: 

依赖关系:

泛化关系:

关联关系:

聚合

组合

 

实现关系:

 (2)用例图 

  • 参与者
  • 用例名
  • 关系
  • 细化用例描述

用例图中的三种关系:

包含(必选):

扩展(可选):

泛化(必选):

细化用例描述:

用例规约描述如下。

参与者:顾客。

主要事件流:

  1. 顾客选择需要购买的饮料和数量,投入硬币;
  2. 自动售货机检查顾客是否投入足够的硬币;;
  3. 自动售货机检查饮料存储仓中所选购的饮料是否足够;
  4. 自动售货机推出饮料;
  5. 自动售货机返回找零。

备选事件流:

    2a. 投入的硬币不足,则给出提示并退回到1;

    3a. 若所选购的饮料数量不足,则给出提示并退回到1。 

(3)通信图

  • 对象名
  • 消息

(4)顺序图

  • 对象名
  • 消息
  • 生命周期 

其中,实线代表调用消息,虚线代表返回消息, 实心箭头表示同步消息,空心箭头表示异步消息。

(5)状态图

  • 状态名
  • 触发事件、监护条件、动作

(6)活动图

  • 活动名
  • 开始、结束
  • 并发分支、并发汇合
  • 活动发起者

2. 例题

(1)例题 1

用例图与类图。

说明:

某出版社拟开发一个在线销售各种学术出版物的网上商店(ACShop),其主要的功能需求描述如下:

(1)ACShop 在线销售的学术出版物包括论文、学术报告或讲座资料等。

(2)ACShop 的客户分为两种:未注册客户和注册客户。

(3)未注册客户可以浏览或检索出版物,将出版物添加到购物车中。未注册客户进行注册操作后,成为 ACShop 注册客户。

(4)注册客户登录后,可将待购买的出版物添加到购物车中,并进行结账操作。结账操作的具体流程描述如下:

  ① 从预先填写的地址列表中选择一个作为本次交易的收获地址。如果没有地址信息,则可以添加新地址。

  ② 选择付款方式。ACShop 支持信用卡付款和银行转账两种方式。注册客户可以从预先填写的信用卡或银行账户中选择一个付款。若没有付款方式信息,则可以添加新付款方式。

  ③ 确认提交购物车中待购买的出版物后,ACShop 会自动生成与之对应的订单。

(5)管理员负责维护在线销售的出版物目录,包括添加新出版物或者更新在售出版物信息等操作。

采用面向对象方法分析并设计该网上商店 ACShop,分别得到下面所示的用例图和类图。

问题1:

根据说明中的描述,补充用例图中(1)~(4)对应的用例名。

问题2:

根据说明中的描述,补充类图中(1)~(7)对应的类名。

问题3:

根据说明中的描述,分别说明用例 “添加新地址” 和 “添加新付款方式” 会在何种情况下由用例图中的用例(3)和(4)扩展而来。

解析1:

首先明确,用例通常都是以名词+动词或动词+名词的形式存在。用例图中(3)和(4)用例都是扩展关系,并且在题干中指出,选择付款方式 …… 若没有付款方式信息,则可以添加新付款方式,所以可以得出(4)是选择付款方式,那么形式类似,(3)就是选择收获地址。(3)(4)和(2)属于包含关系,(2)同时也包含(1),那么继续分析题干,注册客户登录后,可将待购买的出版物添加到购物车中,并进行结账操作,因此注册客户进行结账操作后,可以将出版物添加到购物车,然后选择付款方式和收货地址。或者不先看(1),(2)处一定是结账,因为只有结账后才需要选择付款方式和收货地址,而将出版物添加到购物车后客户可以进行浏览或检索出版物。因此(2)是结账,(1)是将待购买出版物加入购物车。

(1)待购买出版物加入购物车  (2)结账  (3)选择收获地址  (4)选择付款方式

解析2:

类图中最明显的就是(3)~(6)类,明显的泛化关系,和付款方式类似,就是题干开头描述的ACShop 在线销售的学术出版物包括论文、学术报告或讲座资料等。因此(3)是学术出版物、(4)~(6)分别是论文、学术报告、讲座资料。接着看到(7),它与收货地址与付款方式具有依赖关系,因此(7)只能是订单。然后(2)与购物车和订单有聚合关系,并且购物车和订单是整体类,那么(2)只能是待购买的出版物,并且和学术出版物有依赖关系。最后看(1),也是稍难的一个类,它与 ACShop 有聚合关系,与购物车和客户平级,同时出版物与它也有聚合关系,那么只能是题干中最后提到的出版物目录。

(1)出版物目录(2)待购买的出版物(3)学术出版物(4)论文(5)学术报告(6)讲座资料(7)订单

解析3:

题目问什么情况下会扩展添加新地址和新付款方式,就是题干中描述的:

从预先填写的地址列表中选择一个作为本次交易的收获地址。如果没有地址信息,则可以添加新地址。

注册客户可以从预先填写的信用卡或银行账户中选择一个付款。若没有付款方式信息,则可以添加新付款方式。

(2)例题 2

状态图与类图。

说明:

某种出售罐装饮料的自动售货机(Vending Machine)的工作过程描述如下,

(1)顾客选择所需购买的饮料和数量。

(2)顾客从投币口向自动售货机中投入硬币(该机器只接收硬币)。硬币器收集投入的硬币并计算其对应的价值。如果所投入的硬币足够购买所需数量的饮料且饮料数量充足,则推出饮料,计算找零,顾客取走饮料和找回的硬币;如果投入的硬币不够或者所选购的饮料数量不足,则提示用户继续投入硬币或重新选择饮料及数量。

(3)一次购买结束后,将硬币器中的硬币移走(清空硬币器),等待下一次交易。自动售货机还设有一个退币按钮,用于退还顾客所投入的硬币。已经成功购买饮料的钱是不会被退回的。

采用面向对象方法分析和设计该自动售货机的软件系统,得到如下用例图。

其中,用例 “购买饮料” 的用例规约描述如下:

参与者:顾客。

主要事件流:

  1. 顾客选择需要购买的饮料和数量,投入硬币;
  2. 自动售货机检查顾客是否投入足够的硬币;;
  3. 自动售货机检查饮料存储仓中所选购的饮料是否足够;
  4. 自动售货机推出饮料;
  5. 自动售货机返回找零。

备选事件流:

    2a. 投入的硬币不足,则给出提示并退回到1;

    3a. 若所选购的饮料数量不足,则给出提示并退回到1。

根据用例 “购买饮料” 得到自动售货机的 4 个状态:空闲、准备服务、可购买、饮料出售,对应的状态图如下,所设计的类图如下:

问题1:

根据说明中的描述,使用说明中的术语,补充状态图中 S1~S4 对应的状态名。

问题2:

根据说明中的描述,使用说明中的术语,补充状态图中 E1~E4 对应的事件名。

问题3:

根据说明中的描述,使用说明中的术语,补充类图中 C1~C5 对应的类名。

解析1:

自动售货机共有空闲、准备服务、可购买、饮料出售四种状态。根据图示,S1 处应该是初始状态,即空闲状态,当客户选择饮料并投入硬币后,进入 S2。注意 S2 处的描述,硬币不足仍然返回 S2,对应备选事件流 2a,所以 S2 处应当是客户选择购买的饮料并投入硬币,S2 处应该是准备服务,S2 与 S4 之间存在循环情况,根据题干描述,S4 应该是可购买状态,购买完成后饮料出售,然后计算找零,所以 S3 是饮料出售状态。

S1:空闲  S2:准备服务  S3:饮料出售  S4:可购买

解析2:

S4 状态再次返回 S2 状态,对应了备选事件流 3a,2a 已经在 S2 处描述,所以 S4 再返回 S2,即 E1 就是所选购的饮料数量不足;那么 S2 成功进入 S4,即准备服务成功到可购买状态,就是硬币和饮料数量都是足够的,那么 E2 为选择需要购买的饮料和数量,投入硬币;接着自动售货机推出饮料,即 E3;然后计算找零并返回找零,E4 就是返回找零,但注意,题干中最后还描述一次购买结束后,将硬币器中的硬币移走(清空硬币器),所以 E4 还包括清空硬币器。

E1:所选购的饮料数量不足  E2:选择需要购买的饮料和数量,投入硬币

E3:自动售货机推出饮料  E4:返回找零/清空硬币器

解析3:

一个技巧是,通常在题干中注明的英文名词都是其中涉及到的类。顾客使用 C1,顾客只能使用自动售货机,所以 C1 就是自动售货机;C2 与 C4 以及 C3 与 C5 之间都存在一对多的关系,并且与自动售货机都是聚合关系,题干中符合这种描述的只有硬币器与硬币,饮料存储仓与饮料,因此按照对应关系填入即可。(找题干中的名词)

C1:自动售货机  C2:硬币器  C3:饮料存储仓  C4:硬币  C5:饮料

(3)例题 3

通信图与类图。

说明:

某高校图书馆欲建设一个图书馆管理系统,目前已经完成了需求分析阶段的工作。功能需求均使用用例进行描述,其中用例 “借书(Check out Books)” 的详细描述如下。

参与者:读者(Patron)

典型事件流:

  1. 输入读者ID;
  2. 确认该读者能够借阅图书,并记录读者ID;
  3. 输入所要借阅的图书ID;
  4. 根据图书目录中的图书ID确认该书可以借阅,计算归还时间,生成借阅记录;
  5. 通知读者图书归还时间。

重复步骤 3~5,直到读者结束借阅图书。

备选事件流:

   2a. 若读者不能借阅图书,说明读者违反了图书馆的借书制度。

   ① 告知读者不能借阅,并说明拒绝借阅的原因;

   ② 本用例结束。

   4a.  读者要借阅的书无法外借。

   ① 告知读者本书无法借阅;

   ② 回到步骤3。

采用面向对象方法开发该系统,得到下面所示类图和通信图。

问题1:

根据说明中的描述,以及上述通信图和类图,补充类图中 C1~C4 处对应的类名(类名使用两个图中给出的英文词汇)。

问题2:

根据说明中的描述,以及上述通信图和类图,补充通信图中 M1~M4 处对应的方法名(类名使用两个图中给出的英文词汇)。

问题3:

用例 “借书” 的备选事件流 4a 中,根据借书制度来判定读者能否借阅图书。若图书馆的借书制度会不断地扩充,并需要根据图书馆的实际运行情况来调整具体使用哪些制度。为满足这一要求,在原有类设计的基础上,可以采用何种设计模式?说明原因。

解析1:

首先明确两个图的含义,类图中给出了各个类之间的交互过程,上面是类名,下面是方法名;通信图中给出了各个类与方法作用的通信流程,并且箭头上方是方法,指向的是它所属的类,同时每个结点的表示,前面是对象名,后面是类名,如 b:Book,b 是对象名,Book 是类。题干中强调使用两个图中的英文词汇补充,因此两个图是可以互相借鉴补充的。

checkOut(bookID) 方法指向 CheckoutSessionController 类,因此 C4 是 CheckoutSessionController;checkOut(dd) 与 find(bookID) 方法均指向 Book 类,所以 C2 是 Book;此时通信图中还剩下两个类,分别是 Catalog 和 Patron,可以利用类中的方法去判断,Catalog 类中只有一个方法,因为箭头上方只有一个 M1,同理,Patron 类有两个方法,因此 C1 是 Patron,C3 就是 Catalog。

C1:Patron  C2:Book  C3:Catalog  C4:CheckoutSessionController

解析2:

补充方法与问题1类似,去寻找类对应的方法,C2 是 Book 类,只剩下一个 circulates() 方法,因此 M3 是 circulates;M1 是 Catalog 类的唯一方法,即 getForCheckOut(id);M2 与 M4 是 Patron 类的两个方法,但注意区分先后顺序,根据题干的描述,应该是先判断读者是否能够借阅图书,然后才生成借阅记录,因此 M2 是 isFaculty,M4 是 recordBookLoan。

M1:getForCheckOut(id)   M2:isFaculty()  M3:circulates()  M4:recordBookLoan(b:CheckoutSessionController)

解析3:

若图书馆的借书制度会不断地扩充,并需要根据图书馆的实际运行情况来调整具体使用哪些制度。根据题干描述,适合使用策略设计模式。策略设计模式定义了一系列算法,并将每个算法封装起来,而且使它们可以相互替换。策略模式让算法独立于使用它们的客户而变化。适用于需要在不同情况下使用不同的策略。

UML 建模部分的内容至此结束,后续如果有补充或修改会直接添加。

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

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

相关文章

数据库连接池的深入学习

为什么需要数据库连接池? 正常操作数据库需要对其进行连接,访问数据库,执行sql语句,断开连接。 创建数据库连接是一个昂贵的过程,在高并发的情况下,频繁的创建数据库的连接可能会导致数据库宕机。 有了连…

【python015】常见成熟AI-图像识别场景算法清单(已更新)

1.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 【python015】常见成熟AI-图像识别场景算法清单及代码【python015】常见成熟AI-图像识别场景算法清单及代码【python015】常见成熟AI-图像识别场景算法清单及代码 文章目录 1.背景介绍2…

【ML】self-supervised Learning for speech and Image

【ML】self-supervised Learning for speech and Image 1. self-supervised Learning for speech and Image1.1 自监督学习在语音处理领域的方法及其特点1.2 自监督学习在图像处理领域的方法及其特点 2. Predictive Approach2.1 特点2.2 适用场景 3. contrastive Learning4. 语…

上架10天,下载量6W+!用AI绘画 Stable Diffusion 做表情包真的可以赚钱!(AI绘画副业教程分享)

大家好,我是画画的小强 拜托,你不会还不知道吧,在大家还忙着跟网友斗图的时候,已经有人靠做某信表情包快速变现了!光靠一套表情包就躺赚50W! 紫沐甜心生成的表情包胭脂公主,上架10天后下载量就…

C:冒泡排序

1、冒泡排序介绍: 冒泡排序的核心思想就是:两两相邻的元素进行比较。 先用一个例子来帮助大家理解一下冒泡排序的算法是怎们进行的 有一排高矮不同的人站成一列,要按照从矮到高的顺序重新排队。 冒泡排序的方法就是,从第一个人…

Python代码之特征工程基础

1. 什么是特征工程 特征工程是指从原始数据中提取、转换和创建适合于模型训练的数据特征的过程。它是机器学习和深度学习中非常重要的一步,因为好的特征工程可以显著提高模型的性能。特征工程涉及从数据中提取有意义的信息,并将其转换为模型可以理解和使…

Python实战:类

一、圆的面积、周长 class Circle:# 初始化一个类参数:rdef __init__(self,r):self.r r# 计算面积的方法def get_area(self):return 3.14*pow(self.r,2)# 计算周长的方法def get_perimeter(self):return 2*3.14*self.r#创建对象 r eval(input(请输入圆的半径&…

linux系统编程:(4)

1.系统时间的获取函数 1. time函数 功能: 获得1970年到现在的秒数 参数: t:存放秒数的空间首地址 返回值: 成功返回1970年到现在的秒数 失败返回-1 2.localtime 函数 功能: 将一个秒数转化成日历时间 参数: timep:保存秒数空间的地址 返回值: 成功…

深度学习入门(四):激活函数与LSTM

激活函数 激活函数在神经网络中扮演着至关重要的角色。它们的主要功能是引入非线性因素,这使得神经网络能够学习和近似任何非线性函数,从而处理复杂的数据模式和决策边界。如果没有激活函数,即使网络拥有很多层,其表达能力仍然只…

write_sdc和write_script区别

文章目录 一、set_disable_clock_gating_check二、write_sdc和write_script区别1. write_sdc2. write_script 一、set_disable_clock_gating_check set_disable_clock_gating_check对指定的cell/pin/lib_cell/lib_pin设置是否进行clock gating的时序检查。 对于工具插入或者…

多模态大语言模型的免训练视觉提示学习 ControlMLLM

ControlMLLM: Training-Free Visual Prompt Learning for Multimodal Large Language Models github paper 在本研究中,提出了一种无需进行训练的方法,通过可学习的潜变量优化将视觉提示注入到多模态大型语言模型(MLLMs)中。 在…

本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 本…

ttwid、x-bogus、a-bogus、msToken、byted_acrawler等直播参数说明和获取方式

可以参考开源项目:https://github.com/Sjj1024/douyin-live 桌面端的直播间项目:https://github.com/Sjj1024/LiveBox ttwid参数 ttwid类似客户端id,即便是游客模式,也可以对页面数据进行埋点统计,通过收集ttwid下的…

java10-集合框架

1. 集合的简介 1.1什么是集合 集合Collection,也是一个数据容器,类似于数组,但是和数组是不一样的。集合是一个可变的容器,可以随时向集合中添加元素,也可以随时从集合中删除元素。另外,集合还提供了若干个…

Java设计模式(桥接模式)

定义 将抽象部分与它的实现部分解耦,使得两者都能够独立变化。 角色 抽象类(Abstraction):定义抽象类,并包含一个对实现化对象的引用。 扩充抽象类(RefinedAbstraction):是抽象化角…

搭建基于树莓派的Linux学习环境(TODO)

主要是想学一下Linux内核,所以搭一套环境,其实有几个选择,好几个都是我买了板子的。 首先是正点原子的RK3568,最早是想弄安卓,但是SDK的大小真的把我劝退了,动不动几百个G的空间,还有就是保底1…

Mac OS平台,利用 gifify 制作gif教程

一、前言 在很多时候都会用到视频的方式才能直观的表达想表达的东西, 但是视频的文件太大了,所以gif是一个很不错的选择,在网上找了很多免费的都不好用, 最理想的还是直接快捷键唤起,然后选择录制区域,保存…

第128天:内网安全-横向移动IPCATSC 命令Impacket 套件CS 插件全自动

环境部署 案例一: 域横向移动-IPC-命令版-at&schtasks 首先是通过外网web访问到win2008,获得了win2008的权限,这一步不做演示 因为里面的主机都不出网,所以只能利用win2008进行正向或者反向连接 信息收集 域内用户信息&…

【Qt】图形化和纯代码实现Hello world的比较

本篇文章使用俩种方式实现Qt上的Hello world: 通过图形化的方式,在界面上创建出一个控件,显式Hello world通过纯代码的方式,通过编写代码,在界面上创建控件,显示Hello world 图形化方式 双击Forms文件中的…

修改SpringBoot启动图标banner

方式一: 将图标文件命名为banner放在resources目录下 文本文件banner 图片banner 方式二:通过配置文件指定图标路径 指定文本图标:spring.banner.locationclasspath:相对于resources下的位置 ("classpath:"可以省略) 指定图片作为图标: sprin…