某企业为了方便员工用餐,为餐厅开发了一个订餐系统(COS: Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。
企业的任何员工都可以查看菜单和今日特价。
系统的顾客是注册到系统的员工,可以订餐(如果未登录,需先登录)、注册工资支付、预约规律的订餐,在特殊情况下可以覆盖预订。
餐厅员工是特殊顾客,可以进行备餐、生成付费请求和请求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。
菜单管理员是餐厅特定员工,可以管理菜单。
送餐员可以打印送餐说明,记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。
顾客订餐过程如下:

  1. 顾客请求查看菜单;
  2. 系统显示菜单和今日特价;
  3. 顾客选菜;
  4. 系统显示订单和价格;
  5. 顾客确认订单;
  6. 系统显示可送餐时间;
  7. 顾客指定送餐时间、地点和支付方式;
  8. 系统确认接受订单,然后发送E-mail给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工。
    系统采用面向对象方法开发,使用UML进行建模。系统的顶层用例图和一次订餐的活动图初稿分别如下图(a) 和(b) 所示。


    【问题1】
    根据说明中的描述,给出图 (a) 中A1和A2所对应的参与者。
    【问题2】
    根据说明中的描述,给出图 (a)中缺少的四个用例及其所对应的参与者。
    【问题3】
    根据说明中的描述, 给出图 (b) 中(1)〜(4)处对应的活动名称或图形符号。
    【问题4】
    指出图(a)中员工和顾客之间是什么关系,并解释该关系的内涵。

答案:
【问题1】
A1:工资系统
A2:菜单管理员
【问题2】

用例名

参与者

查看当日特价

员工

注册工资支付

顾客和工资系统

生成付费请求

餐厅员工和工资系统

管理菜单

菜单管理员

【问题3】

(1)

智能订餐系统架构 自动订餐系统用例图_父类

(2)登录

(3)

智能订餐系统架构 自动订餐系统用例图_父类_02

(4)

智能订餐系统架构 自动订餐系统用例图_软件工程师_03


【问题4】

泛化关系(一般/特殊关系、继承关系)。泛化关系描述了一个参与者可以完成另一个参与者同样的任务,并可以补充额外的角色功能。

解析:
【问题1】
识别参与者时,考查和系统交互的人员和外部系统。本题中,与系统交互的人员包括员工、注册到系统的员工(顾客)、餐厅员工、菜单管理员、送餐员以及工资系统。
由“菜单管理员是餐厅特定员工”以及图中A2和图中餐厅员工之间的“是一种”关系可知,A2为菜单管理员;图中还缺少描述中与工资系统的交互,由“……并发送给工资系统”可知,A1为工资系统。
【问题2】
考查用例及其和参与者之间的关系时,通过判断哪一个特定参与者发起或者触发了与系统的哪些交互,来识别用例并建立和参与者之间的关联。
本题中,由“任何员工都可以查看菜单和今日特价”可知,图中缺少用例查看今日特价,对应参与者是员工;由“系统的顾客是……,注册工资支付、……"可知,图中缺少用例注册工资支付,对应参与者是顾客和工资系统;由“餐厅员工是……,可以进行备餐、生成付费请求……发送给工资系统”可知,图中缺少用例“生成付费请求”,对应的参与者是餐厅员工和工资系统;由“菜单管理员是餐厅特定员工,可以管理菜单”可知,图中缺少用例管理菜单,对应的参与者是菜单管理员。
需要注意的是,在注册工资支付所对应的参与者中,虽然没有明确说明要和工资系统交互,但是由“对于注册工资支付的顾客生成付费请求并发送给工资系统”可知,工资支付是由工资系统控制,所以注册也需要和工资系统交互。
【问题3】
在顾客订餐过程的描述中,在“顾客选菜”之前,图中缺少符号和活动。由说明中顾客“可以订餐(如果未登录,需先登录)”可以判断,在系统“显示菜单和今日特价"之后"顾客选菜”之前,需要判断(判定符号)当前用户身份是否为顾客,如果不是,需先登录;由“……发送E-mail给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工”可知,发送E-mail和通知餐厅员工为并行活动,需要在前后有同步条(或纵向)。
【问题4】
参与者之间的关系表示子类型是一种父类型,即泛化关系。其中父类型通常是一个抽象泛化的参与者,可以完成子类型可完成的共同行为,每个具体的子类型继承它,可以完成父类型参与者同样的任务,并可以补充额外的角色功能。