【虚构案例声明】 本课程中的"美好家园"物业集团、"清华园社区"、"智慧邻里2.0"项目及全部人物均为教学所用的虚拟项目与虚构人物,详见第 01 讲首次声明。
一、上节作业讲评
1.1 王主任要的信息用哪几张图
上一讲的核心作业:需求评审会上王主任说用例图能看出谁能干什么,但看不出"业主报修以后到底经历了什么,等多久、卡在哪"。要你回答该用哪几种图、各表达什么、是静态还是动态、只能画一张选哪张。
先对照教材表 5-3。王主任问的是"经历了什么",这是行为,不是结构,要用动态图。三张图能答他:活动图,教材说它"将进程或其他计算结构展示为计算内部一步步的控制流和数据流""对系统的功能建模和业务流程建模特别重要",报修从提交到关闭一步步走,活动图画的就是这个;状态图,教材说它"描述一个状态机,由状态、转移、事件和活动组成",工单从待派单到已关闭的状态变化用它;顺序图,教材说它"强调消息的时间次序",业主、客服、维修工之间谁先给谁发消息用它。三张都是动态图,教材原话是"专注于系统的动态视图"。
"等多久"这个信息,三张图里只有定时图能直接表达,它"强调消息跨越不同对象或参与者的实际时间"。但给业委会看定时图太技术,实际做法是在活动图的每个活动旁标注服务级别,"受理 2 小时内、维修 24 小时内",第 11 讲定的服务级别就贴在图上。
只能画一张,选活动图。理由有三条:王主任是业委会主任,他关心的是流程不是对象;活动图"对业务流程建模特别重要",是教材给它的定位;活动图可以用泳道把业主、客服、维修工分开,"卡在哪"一眼看出卡在哪条泳道。
这道作业的规律是:先判断对方要看的是结构还是行为,结构用静态图,行为用动态图;再在同类图里按"教材一句话"里的关键词选。本讲讲四张静态图,下一讲讲动态图,王主任那张活动图下一讲画出来。
二、四张静态图先画骨架:本讲目标
2.1 为什么先学静态图
教材十四种图,我按静态和动态分两讲。静态图画的是"系统由什么组成、它们怎么连",动态图画的是"它们怎么互动"。先画静态,因为动态图里的对象和消息都来自静态图里的类,没有类图,顺序图上的对象不知道从哪来。
高项考图有两种方式。综合知识给一张图问是什么图、图上是什么关系,或者给一段描述问该用什么图,2015 到 2019 年几乎每年一到两道;案例和论文不要求画图,但要求你能用文字把模型说清楚,"识别出七类参与者和八个用例"这种话在论文里就是模型。所以本讲的目标不是把你训练成画图员,是让你看到图能认、说到模型能写。
本讲要拿下三件事:
第一,用例图的四种元素和参与者与用例、用例与用例的关系,能看图判断关系类型。
第二,类图的三格和教材表 5-5 的六种关系,能看图判断是关联、依赖、泛化、聚合、组合还是实现,能分清聚合和组合。
第三,对象图和包图的定位,以及机考环境下怎么用图:综合知识识图,案例论文用文字描述。
2.2 本讲任务地图
| 任务 | 教材位置 | 考试形态 | 项目落点 |
|---|---|---|---|
| 用例图元素与关系 | 表 5-3、表 5-4 | 识图判关系、哪个图描述需求 | 报修模块用例图 |
| 类图三格与六种关系 | 表 5-3、表 5-5 | 识图判关系、聚合组合辨析、类图画错处 | 报修模块领域模型 |
| 对象图 | 表 5-3 | 与类图的区别 | 一条工单的快照 |
| 包图 | 表 5-2、表 5-3 | 包是唯一的分组事物 | 二期平台模型分包 |
| 机考用图 | 机考现实 | 识图与文字描述 | 论文里的模型段 |
三、核心内容精讲:用例图
3.1 参与者、用例、边界与关系
教材口径:用例图描述一组用例、参与者及它们之间的关系。用例图给出系统的静态用例视图,这些图在对系统的行为进行组织和建模时是非常重要的。
注意教材的措辞,用例图是"静态用例视图",虽然它描述的是系统行为,但图本身是静态的,它画的是"有哪些用例、谁参与",不画执行顺序。这是判断题陷阱之一。
用例图有四种元素,通用画法如下(画法是统一建模语言的通用约定,教材只给定义不给画法):
参与者,画成小人,名字写在下面。教材表 5-4 说参与者"不仅可以由人承担,还可以是其他系统和硬件设备,甚至是系统时钟",并且"一定在系统之外,不是系统的一部分"。所以"主数据服务"和"系统时钟"也画成小人,很多初学者觉得别扭,但这是规矩。
用例,画成椭圆,名字写在里面,用动宾短语,"提交报修""派单"。
系统边界,画成一个大矩形,用例在里面,参与者在外面。边界画错是最常见的错误:把客服画进边界里,等于说客服是系统的一部分。
关系,四种。参与者和用例之间是关联,画实线;用例和用例之间是包含、扩展、泛化三种,第 17 讲讲过定义,画法是:包含画虚线箭头从基本用例指向被包含的抽象用例,箭头上标注"包含";扩展画虚线箭头从扩展用例指向基本用例,标注"扩展";泛化画实线空心三角箭头从子用例指向父用例。参与者之间也可以有泛化,"值班客服"泛化自"客服"。
包含和扩展的箭头方向相反,这是识图题的考点。记法:包含是"基本用例需要抽象用例",箭头从需要的一方指向被需要的一方;扩展是"扩展用例附着在基本用例上",箭头从附着的一方指向被附着的一方。2017 年上半年第 27 题那张图,取款指向识别客户和验证账号,是包含。2019 年上半年第 25 题问执行者与用例之间的关系,答案是关联,不是包含也不是扩展。
3.2 用例图实战:报修模块

这张图按第 17 讲的用例模型画:七个参与者,业主、客服、维修工、李经理、张主管在左边,主数据服务和系统时钟在右边;八个用例在边界里;"验证业主身份"是被"提交报修"和"催单"包含的抽象用例;"转外包派单"扩展自"派单";"电话报修"和"手机报修"泛化为"提交报修"。
看这张图时问自己三个问题,这三个问题也是考试识图的套路:第一,边界里有没有不该在里面的东西,客服在外面对不对?对,客服是用户不是系统。第二,虚线箭头的方向说明它是包含还是扩展?"提交报修"指向"验证业主身份",包含;"转外包派单"指向"派单",扩展。第三,谁和谁之间是实线?只有参与者和用例之间才是实线关联。