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

news2024/9/25 21:26:45

十一. 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.coloradmin.cn/o/1992839.html

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

相关文章

【IO模型】select、poll、epoll的区别

文章目录 五种IO模型阻塞IO非阻塞IO信号驱动IOIO复用异步IO IO复用的原理selectselect原理及缺点 pollpoll的原理及其缺点 epollepoll_createepoll_ctlepoll_waitepoll的原理水平触发和边缘触发epoll的优点 五种IO模型 I/O模型是操作系统中用于管理输入输出操作的机制。不同的…

多线程 02:线程实现,创建线程的三种方式,通过多线程下载图片案例分析异同(Thread,Runnable,Callable)

一、概述 记录时间 [2024-08-08] 前置知识:Java 基础篇;Java 面向对象 多线程 01:Java 多线程学习导航,线程简介,线程相关概念的整理 Java 多线程学习主要模块包括:线程简介;线程实现&#xff…

MySQL 体系架构

文章目录 一. MySQL 分支与变种1. Drizzle2. MariaDB3. Percona Server 二. MySQL的替代1. Postgre SQL2. SQLite 三. MySQL 体系架构1.连接层2 Server层(SQL处理层)3. 存储引擎层1)MySQL官方存储引擎概要2)第三方引擎3&#xff0…

【java】一维数组

目录 一维数组内存分析Java虚拟机的内存划分一维数组内存解析 一维数组知识点一维数组课后练习 一维数组内存分析 Java虚拟机的内存划分 为了提高运行效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 java中…

cs224w colab0笔记

1.colab0 1.1 数据集 from torch_geometric.datasets import KarateClubdataset KarateClub() print(fDataset:{dataset}:) print() print(fNumber of graphs:{len(dataset)}) print(fNumber of features:{dataset.num_features}) print(fNumber of classes:{dataset.num_cl…

机器学习面试-核心概念-问题理解

1.机器学习的思想 计算机程序随着经验的积累,能够实现性能的提高。对于某一类任务T及其性能度量P,若一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么就称这个计算机程序在从经验E学习。 机器学习是人工智能的一个分支&#xff0c…

VMware Workstation 与 Device/Credential Guard 的不兼容问题

(1)出现问题 (2)出现问题原因: 我电脑原先弄过Hyper-V,这玩意是微软公司开发的一款虚拟化产品,它是微软第一个采用类似 VMware 和 Citrix Xen 等产品中的基于 hypervisor(虚拟机监控…

基于区块链的供应链应用开发

区块链的供应链溯源应用开发 一 、环境准备 (1)更新镜像源 apt update(2)安装(openssl、jdk、git) apt -y install openssl default-jdk git(3)配置JAVA_HOME环境变量 echo “export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/” >> /etc/profilesource /etc…

一键编译并启动一个 ARM Linux qemu 虚拟机

需要事先自己编译 qemu-system-arm 可执行文件; 1,编译创建ARM 虚拟机 1.1 一起从头开始版 cd 进一个空文件夹,然后 $ vim buildup.sh $ bash buildup.sh 访问github网络没什么问题: 硬编码了一个路径/home/hipper/ex_vexpre…

Java对象内存布局和Synchronized锁升级(二)

目录 对象内存布局对象头实例数据对齐填充锁在内存布局中的标志位 锁升级无锁偏向锁偏向锁升级 轻量级锁重量级锁 锁消除和锁粗化锁消除锁粗化 锁升级总结 对象内存布局 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(I…

同态加密和SEAL库的介绍(八)性能

本篇会对比三种加密方案,同时每种方案配置三种参数。即九种情况下的各个操作的性能差异,为大家选择合适的方案和合适的参数提供参考。表格中所有时长的单位均为微妙,即 。 当然数据量比较大,为了方便大家查找&#xff0c…

应用商店故障(UOS系统)

应用商店故障(UOS系统) 1. 安装应用商店内的应用无法下载,更新系统时提示依赖关系被破坏,怎么办? 问题描述 安装应用商店内的应用无法下载,更新系统时均提示依赖关系被破坏 解决方案 1、可先建议用户尝试修…

day 22线程间通信

一、互斥锁 1、资源: 资源是有限的,在程序运行过程中,一段代码、一段空间、一个变量、CPU、内存都可以看做资源 2、互斥锁: 是一种资源,当一个线程任务加锁,其余线程任务无法再次加锁,直到解锁后才能加锁,互斥…

数据机房防静电措施有哪些?安装防静电地板时记住这几点

生活中静电无处不在,一般情况静电不会对我们有什么影响,但在一些特殊场合,比如数据机房、配电室、消控室、电子厂房等,静电的危害必须要引起重视,因为这些场合通常有比较多的电子设备,电子设备中有比较多的…

priority_queue模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾什么是适配器模式?准备工作包含头文件定义命名空间类的成员变量什么是仿函数?比较仿函数在priority_queue中的作用通过传入不同的仿函数可以做到大堆和小堆之间的切换通过传入不同的仿函数可以做到改变priority_qu…

[Leetcode][Medium]-面试题 17.14.最小k个数-TOP K问题-快排/大根堆

一、题目描述 原题地址 二、整体思路 (1)、快排 数组中最小的k个数就是说把数组升序排列,求[0,k-1]区间上的数。 快排可以得到一个元素在升序排序的数组中的正确位置。在这个位置的左边区间[l,l2-1]上的元素都比它小,在这个位置的右边区间[r2,r]上的元素…

zabbix 监控软件

zabbix 监控软件 自带图形化界面,通过网页就可以监控所有的服务器的状态。 事件告警,邮箱通知(噩梦)。 zabbix是什么? web界面提供的分布式监控以及网络监控功能的开源的企业级的软件解决方案。 服务端 监控端 客…

App安装来源追踪的四大方案解析

App的开发者和运营商,都会研究分析渠道的效果,而对渠道来源的追根溯源是一切分析的基础。假如没有明确的安装来源数据,至少会造成以下几种后果: 没有安装来源数据,我们无法判断各个投放渠道流量的价值,也就…

全网首发!鸿蒙OS登上PC,冒风险流出内测,系统界面截图,过会儿就删

开玩笑的啦,其实这是Deepin操作系统的截图,很漂亮吧,这是deepin v23 rc2 的主题之一 鸿蒙还没有发,不知道24年末还能不能上,emmm

Python实战:基础语法

一、求解列表中的最大元素 import random#定义函数 def get_max(lst):x lst[0] #x存储的是元素的最大值#遍历操作for i in range(1,len(lst)):if lst[i] > x:x lst[i] #对最大值进行重新赋值return x#调用函数 lst [random.randint(1,100) for item in range(10)] print…