软考-软件设计师:面向对象技术-UML:下午考试大题

题

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。

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

  1. ACShop在线销售的学术出版物包括论文、学术报告或讲座资料等。
  2. ACShop的客户分为两种:未注册客户和注册客户
  3. 未注册客户可以浏览或检索出版物,然后将出版物添加到购物车中。未注册客户进行注册操作之后,成为ACShop注册客户。
  4. 注册客户登录之后,可将待购买的出版物添加到购物车中,并进行结账操作。结账操作的具体流程描述如下:
    1. 从预先填写的地址列表中选择一个作为本次交易的收货地址。如果没有地址信息,则可以添加新地址。
    2. 选择付款方式。ACShop支持信用卡付款和银行转账两种方式。注册客户可以从预先填写的信用卡或银行账号中选择一个付款。若没有付款方式信息,则可以添加新付款方式。
    3. 确认提交购物车中待购买的出版物后,ACShop会自动生成与之相对应的订单。
  5. 管理员负责维护在线销售的出版物目录,包括添加新出版物或者更新在售出版物信息等操作。

得到如图3-1所示的用例图和图3-2所示的类图。

【问题1】(4分)
据说明中描述,给出图3-1中(1)~(4)所对应的用例名。

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

【问题3】(7分)
根据说明中的描述,给出图3-2中(1)~(7)所对应的类名。

技巧

  1. 先看问题,再看题干,标出重点内容
  2. 推荐 程序员先回答类图

整体分析

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

  1. ACShop在线销售的 学术出版物 包括 论文、学术报告 或 讲座资料 等。
  2. ACShop的 客户 分为两种:未注册客户 和 注册客户
  3. 未注册客户 可以 浏览 或 检索 出版物,然后将出版物 添加到购物车中。未注册客户进行 注册操作 之后,成为ACShop 注册客户。
  4. 注册客户 登录 之后,可将 待购买的出版物 添加到购物车中,并进行 结账 操作。结账操作的具体流程描述如下:

    1. 从预先填写的地址列表中 选择 一个作为本次交易的 收货地址。如果没有地址信息,则可以 添加新地址。
    2. 选择付款方式。ACShop支持 信用卡付款 和 银行转账 两种方式。注册客户可以从预先填写的信用卡或银行账号中 选择 一个付款。若没有付款方式信息,则可以 添加新付款方式。
    3. 确认 提交购物车中待购买的出版物后,ACShop会自动生成与之相对应的订单。
  5. 管理员负责维护在线销售的 出版物目录,包括 添加新出版物 或者 更新在售出版物信息 等操作。

分析第一问

注意:此处不要用程序员的角度去分析,否则不容易回答 1 和 2

  • 因为 添加新地址 扩展 3,添加新付款方式 扩展 4,扩展功能
    答题技巧:

    • 特干特点:如果 xxx 成立,小功能才会执行
    • 大功能执行的,小功能不一定执行

    根据题干,容易分析出 3 是 选择收获地址,4 是 选择付款方式

  • 因为 2 包含 1,1 包含 浏览或检索出版物,包含功能 答题技巧:

    • 题干特点:一般先说小功能,后说大功能
    • 大功能和小功能都会执行

    3 是 结账,1 是 添加购物车(不要用程序员角度分析)

分析第三问

  • 根据 4、5、6 继承 3,容易分析出这4个

  • 1 和 3-学术出版物 是 整体和部分关系,1 是 出版物目录

  • 通过 2 与 3-学术出版物、购物车 的关系,可知是 待购买的出版物

  • 7 和 2-待购买的出版物 是 整体和部分关系;7 依赖 收获地址、付款方式 ,所以 7 是 订单

第一问答案

第二问答案

  • 当选择收货地址时,没有地址信息,则使用扩展用例“添加新地址”来完成新地址的添加。

  • 当选择付款方式时,没有付款方式信息,则使用扩展用例“添加新付款方式”来完成新付款方式的添加。

第三问答案

题

2、阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】

某种出售罐装饮料的自动售货机(VendingMachine)的工作过程描述如:

  1. 顾客选择所需购买的饮料及数量。
  2. 顾客从投币口向自动售货机中投入硬币(该自动售货机只接收硬币)。硬币器收集投入的硬币并计算其对应的价值。如果投入的硬币不够或者所选购的饮料数量不足,则提示用户继续投入硬币或重新选择饮料及数量;如果所投入的硬币足够购买所需数量的这种饮料且饮料数量足够,则推出饮料,计算找零,顾客取走饮料和找回的硬币;
  3. 一次购买结束之后,将硬币器中的硬币移走(清空硬币器),等待下一次交易。自动售货机还设有一个退币按钮,用于退还顾客所投入的硬币。已经成功购买饮料的钱是不会被退回的。

现采用面向对象方法分析和设计该自动售货机的软件系统,得到如图3-1所示的用例图,其中,用例“购买饮料”的用例规约描述如下。

参与者:顾客

主要事件流:

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

备选事件流:
2a.若投入的硬币不足,则给出提示并退回到1;
3a.若所选购的饮料数量不足,则给出提示并退回到1。

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

【问题1】(6分)
根据说明中的描述,使用说明中的术语,给出图3-2中的S1~S4所对应的状态名。
【问题2】(4分)
根据说明中的描述,使用说明中的术语,给出图3-2中的E1~E4所对应的事件名。
【问题3】(5分)
根据说明中的描述,使用说明中的术语,给出图3-3中C1~C5所对应的类名

技巧

  1. 先看问题,再看题干,标出重点内容
  2. 推荐 程序员先回答类图
  3. 再回答第一问,因为4个状态已经给出,只需要填上正确位置即可

整体分析

某种出售 罐装饮料 的 自动售货机(VendingMachine)的工作过程描述如:

  1. 顾客 选择所需购买的饮料及数量。
  2. 顾客从投币口向自动售货机中投入 硬币(该自动售货机只接收硬币)。硬币器 收集投入的硬币并计算其对应的价值。如果投入的硬币不够或者所选购的饮料数量不足,则提示用户继续投入硬币或重新选择饮料及数量;如果所投入的硬币足够购买所需数量的这种饮料且饮料数量足够,则推出饮料,计算找零,顾客取走饮料和找回的硬币;
  3. 一次购买结束之后,将硬币器中的硬币移走(清空硬币器),等待下一次交易。自动售货机还设有一个退币按钮,用于退还顾客所投入的硬币。已经成功购买饮料的钱是不会被退回的。

现采用面向对象方法分析和设计该自动售货机的软件系统,得到如图3-1所示的用例图,其中,用例“购买饮料”的用例规约描述如下。

参与者:顾客

主要事件流:

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

备选事件流:
2a.若投入的硬币不足,则给出提示并退回到1;
3a.若所选购的饮料数量不足,则给出提示并退回到1。

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

问题1答案

问题2答案(最难)

提示:这道题最难,通过题干与状态图,发现并没有完全对应上,比如:S1 中 应该是 选择饮料、数量,但图中并没有

正确答案:

我的答案(错误):

问题3答案

注意: C3、C5 和 C2、C4 的关系是一样的,可以交换位置

  1. 根据题干,顾客 操作 自动售货机,所以 C1 是 自动售货机

  2. 之后,C2、C4、C5 都容易回答

  3. C3 在题干 事件流 中

提示:名字以题干为标准,所以 C1 应该填 自动售货机(VendingMachine)

题

3、阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某高校图书馆欲建设一个图书馆管理系统,目前已经完成了需求分析阶段的工作。功能需求均使用用例进行描述,其中用例)“借书(CheckOutBooks)的详细描述如下。

参与者:读者(Patron)

典型事件流:

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

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

备选事件流:

2a.若读者不能借阅图书,说明读者违反了图书馆的借书制度(例如,没有支付借书费用等)
①告知读者不能借阅,并说明拒绝借阅的原因;
②本用例结束。

4a.读者要借阅的书无法外借
①告知读者本书无法借阅;
②回到步骤3。

说明:图书的归还时间与读者的身份有关。如果读者是教师,图书可以借阅一年;如果是学生,则只能借阅3个月。读者ID中包含读者身份信息。

【问题1】(8分)

根据说明中的描述,以及图3-1和图3-2,给出图3-1中C1-C4处所对应的类名
(类名使用图3-1和图3-2中给出的英文词汇)

【问题2】(4分)

根据说明中的描述,以及图3-1和图3-2,给出图3-2中M1-M4处所对应的方法名
(方法名使用图3-1和图3-2中给出的英文词汇)

【问题3】(3分)

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

技巧

  1. 先看问题,再看题干,标出重点内容
  2. 推荐 程序员先回答类图

问题1答案

注意:题干中对类名有要求:类名使用图3-1和图3-2中给出的英文词汇

通过 图3-2 可知,有4个类名,所以将这4个类名,填到 图3-1 的正确位置

在 通讯图 图3-2 中,

  • checkOut(bookID) 指向 CheckSessionController 可知 CheckSessionController 有 checkOut(bookID) 方法,所以 C4 是 CheckSessionController

    • 3:b:=find(bookId) 指向 :Book 可知,Book 有 find(bookId) 方法,所以 C2 是 Book

C1 和 C3 没有明确方法,不容易找出

  • 通过 2:M2() 和 6:M4() 可知,Patron 有两个方法,所以 C1 是 Patron

  • C3 是 Catalog

问题2答案

坑: 图3-2 明确给出 1:M1()、2:M2() 等,有 (),而题目要求填 M1-M4 方法名,所以 只填方法名,不要有 (),否则不正确

根据 通讯图 图3-2 ,

  • M1 是 getForCheckOut
  • M3:Book 类有 3 个方法,有 2 个方法已经调用,所以 M3 是 circulates

M2 和 M4 有难度,因为不容易确定哪个是 recordBookLoan、isFaculty

技巧: M2 和 M4 都填 recordBookLoan 或 isFaculty,这样至少 保证1个正确

正确答案分析:

根据下面可知:

说明:图书的归还时间与读者的 身份有关。如果读者是教师,图书可以借阅一年;如果是学生,则只能借阅3个月。读者ID中包含读者身份信息。

4.根据图书目录中的图书ID确认该书可以借阅,计算归还时间,生成借阅记录;

先 判断身份,然后才 生成记录,所以:

  • M2:isFaculty
  • M4:recordBookLoan

问题3

策略模式


原文出处:/show_1GW10naWySk6.html