软考:软件设计师 — 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 建模部分的内容至此结束,后续如果有补充或修改会直接添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phoenixxxxxxxxxxxxx

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值