一.题型
UML
常考内容:类图、用例图。
常见题型:
- 第一问:补全用例图的参与者、用例
- 第二问:补充类图缺少的类名
- 第三问:扩展
二.基础知识讲解
1.UML的四种关系
①依赖
举例:
这个读作A依赖B,说白了就是A用到了B,而B没用到A。
如此图,此时表示“动物”依赖“空气”和“水”
②关联
这根横线就表示“关联”。当两个名词之间,有一种说不清、冥冥之中的关系时,就是关联。
关联(Association)—— 普通实线
- 长相:一条普通的实线(有时会带箭头表示方向)。
- 含义:代表两个类之间有一种结构化的连接。简单理解就是“我有你的联系方式”或者“我们认识”。
- 比如:【学生】和【班级】之间有一条线,表示学生属于某个班级。
举例:下图怎么读?
思想:一方取1,另一方读横线上的值。
答案:这个关联,读作“1个雇主,对应0~多个员工;一个员工,对应0~1个雇主”。
聚集(组合、聚合)
讲一下“聚集”:
聚集分成两种:
- 聚合:部分和整体的生命周期不一致(整体消失了,部分仍然存在,部分可以脱离整体存在)
注意:此时这个菱形是空心的。
举例:
当毕业了,班级就不存在了,但是学生仍然存在,并且可以各奔东西。
当公司破产,公司就不存在了,但是员工仍然存在,并且可以继续找下一份工作。
- 组合:部分和整体的生命周期一致(整体消失了,部分也消失,部分不可以脱离整体存在)
注意:此时这个菱形是实心的。
举例:
此时人体消亡了,那么大脑也就不存在了,因为二者共存亡。
③泛化
其实很简单,这个和继承是相反的关系。
举例:
可见此时箭头方是父类,另一方是子类。
此时有两种读法:
- “学生和教师”继承“人”
- “人”泛化成“学生和教师”
④实现
这一块了解了解即可。
2.UML类图
注意:属性和方法前,可用四种修饰符,分别用四种符号表示:
- + 表示public(公共的)
- - 表示private(私有的)
- # 表示protected(受保护的)
- ~ 表示package(包的)
3.用例图(重要)
- 用例:说白了就是系统的功能
- 参与者:用户
①包含关系(被指向的用例先发生)
此时读作“A包含B”。A就是基本用例,B是被包含用例。
说白了就是,B是A的一部分,A执行的时候肯定会执行B。
说白了,一定要B先执行完,才能执行A。比如A是查看个人信息,B是登录系统。我们肯定要先登录系统,才能查看个人信息。不然你都没登录,哪来的账号?哪来的个人信息?就是这个意思。
举例1:
如图,能获得两点信息:
- 图书管理员,在删除图书时,一定要先查询图书。(这很合理,你都不知道图书在哪,你怎么能找到删除按钮?所以删除前,肯定要先查询)
- 图书管理员,在修改图书时,一定要先查询图书。(这也很合理,你都不知道图书在哪,你怎么能找到修改按钮呢?所以修改前,肯定要先查询)
举例2:
如图,能获得两点信息:
- 用户,在查看订单时,肯定要先登录。(你都不登录,没有账号,哪来的订单?更别说查看订单了。)
- 用户,在修改收货地址时,肯定要先登录。(你都不登录,没有账号,哪来的收货地址?更别说修改收货地址了)
②扩展关系(被指向的用例先发生)
此时执行基本用例时,可能会因为发生特殊情况(非主观)或主观选择(主观),从而执行扩展用例。
此时很明显,由于扩展用例是可能发生,说白了就是也可能不发生。
举例1:非主观
当学生去图书馆还书,如果突然发现超出了还书时间,那就需要罚款了。如果没超出还书时间,那就不用罚款了。因此“罚款”这个扩展用例可能不发生。
当学生去食堂刷饭卡,可能会产生余额不足的情况。
学生在购物时,可能会产生库存不足的情况。
举例2:主观选择
当学生去教务系统查看课表以后,可以主观选择进行导出EXCEL或者打印操作。当然,查看完可以直接退出,哪个扩展用例都不执行。因此,可见,扩展用例可以不发生。
注意:这里的扩展用例就是导出excel和打印。
③泛化关系
在用例图中,泛化关系表现为:
- 参与者 与 参与者之间
- 用例 与 用例之间
举例1:参与者 与 参与者之间
此时用户是父类,而商家、会员是子类。
所以很明显,泛化关系是从子类指向父类。说白了,泛化和继承是相反的过程。
举例2:用例 与 用例之间
登录的方式有很多种,具体包括QQ登录、微信登录、手机号登录、邮箱登录。
付款的方式有很多种,具体包括支付宝付款、银行卡付款、余额付款、微信付款。
上述也是泛化的关系。
三.软考真题
1.2021年下半年
题目
问题1
做题技巧:盯着动词看就行,体会动词之间的发生的时间顺序、逻辑顺序。
注意:这个顺序要看好了。由于“编写迷宫文件”和“导入迷宫文件”靠近“建立迷宫”,所以我们就需要把二者放到U1和U2的位置,而不能放到U3(很多考生发现题目说明中,“设置计时器”最早出现,可能就放到U1了,这样是不对的,因为“设置计时器”很明显是“操作机器人”的相关用例,所以要挨着它,因此要放到U3中)。
而且这个用例顺序,会直接影响到第二问作答,所以要仔细一点。
问题2
注意:这道题是文字说明,可以不用画图。但是为了方便看,我们可以简单画一下:
因此第二问答案为:
- U1、U2和建立迷宫是泛化关系,即:建立迷宫用例泛化U1、U2用例。
- U3和操作机器人是包含关系,即:操作机器人用例包含U3用例。
问题3
技巧:题目中带英文翻译的,就是我们要找的类名。(固定套路)
思路:“机器人”是“小精灵”、“幽灵”的父类,这是一套父子关系;“传感器”是“前向传感器”、“近距离传感器”的父类,这又是一套父子关系。根据上述,我们可以做出如下判断:
此时图中,能明显根据泛化的箭头,判断C1、C5都是父类,但是谁是机器人、谁是传感器呢?再结合C1、C5二者之间的组合关系的箭头,能发现很明显是传感器组合到机器人。因此C5是传感器、C1是机器人。
而机器人身上,不仅有传感器,而且还有计时器,所以C2是计时器。到此为止,就还剩一个迷宫。故C8是迷宫。
故本题答案为:
- C1:机器人(Robos)
- C2:计时器(Timer)
- C3:小精灵(PacMan)
- C4:幽灵(Ghost)
- C5:传感器(Sensor)
- C6:前向传感器(FrontSensor)
- C7:近距离传感器(ProxISensor)
- C8:回廊式迷宫(Maze)
(C3、C4可以互换,C6、C7可以互换)
2.2021年上半年
题目
问题1
根据题目描述,能先找出A1~A3这三个参与者。
我们根据这个题目的段落设置,就能发现这个“确认处方”99%是U1这个用例。
根据“确认处方”所在的自然段,我们发现了两对父、子关系的用例:即①取药方式②支付
我们此时应该选择“支付”。因为如果选“取药方式”,它的泛化用例有一个“送货上门”,而这个“送货上门”已经在图中画出了,这是一种排除思路。另一种排除思路是,“送货上门”应该是快递人员的用例,也不能放到患者的下面。
故U2是“支付”,U3是“微信支付”,U4是“支付宝支付”
综上,答案为:
- A1:患者
- A2:快递人员
- A3:药师
- U1:确认处方
- U2:支付
- U3:微信支付
- U4:支付宝支付
(U3、U4可以互换)
问题2
突破口是C1、C2、C3,其中C1属于患者的一部分,且有两个子类。一看就是“支付方式”,因为问题1中已经得知U2是支付方式,所以C1就是支付方式。(主要是因为,另一个父、子关系是:“取药方式”是父亲,“自行到店取药”和“送货上门”是儿子,但是“送货上门”和患者没啥关系啊。所以此处C1只能是支付方式)。
C4一定是“处方”,因为这是抓药APP,你咋能没处方?稍微一想也知道。
C5是“药品”,因为处方依赖药品。就像鱼依赖空气一样。
综上,答案为:
- C1:支付方式
- C2:微信支付
- C3:支付宝支付
- C4:处方
- C5:药品
(C2、C3可以互换)
问题3
3.2020年下半年
题目
问题1
这题太简单,就不解释了。
- A1:房产经纪
- A2:系统管理员
- U1:审批授权
- U2:修改房产信息
- U3:删除房产信息
- (a):《include》
- (b):《extend》
问题2
先找出带英文的类:
注意:这道题的C5、C6的箭头应该指向用户。(说白了就是题出错了,但是仍然能通过排除法写这道题)。
- C1:Property(房产)
- C2:House(住宅)
- C3:Cando(公寓)
- C4:User(用户)
- C5:Manager(系统管理员)
- C6:Agent(房产经纪)
(C2、C3可以互换)
问题3
答案:房产经纪负责每套房产的起始时间、终止时间。
4.2019下半年
题目
问题1
- A1:接待员
- A2:医护人员
- A3:办公人员
- U1:记录病人基本信息(Maintain patient info)
- U2:记录就诊信息(Record office visit info)
- U3:打印发票(Print invoices)
问题2(泛化,和继承一个意思,互为相反的动作)
突破口:泛化关系(即与继承互逆,子类继承父类、父类泛化为子类)
其他信息,可锁定剩余两个类:
综上:
- C1:给病人的发票
- C2:给医保机构的发票
- C3:发票
- C4:治疗
- C5:就诊
问题3(根据题目描述,给出实体类属性)
这题照抄题干描述就行了,都给出了:
- C4:治疗项目名称、治疗项目描述、治疗的牙齿、费用
- C5:就诊时间、就诊费用、支付代码、病人支付费用、医保支付费用
- Patient:病人姓名、身份证号、出生日期、性别、首次就诊时间、最后一次就诊时间
- DentalStaff:姓名、职位、身份证号、家庭住址、联系电话
5.2019上半年
题目
问题1(extends:被指向的用例发生在前)
- A1:采购人员(Buyer)
- A2:仓库管理员(Warehouse man)
- A3:派送人员(Dispatcher)
- U1:注册(Register detail)
- U2:打印订单(Print order)
- U3:在线购买书籍(Buy books)
注意:上图画错了,被指向的用例先发生(也就是被指向的用例是基础用例),因此U3应该是购买书籍、U2才是可能进一步拓展的“打印订单”
问题2(用例描述:基本事件流、备选事件流)
- 我的答案:
用户在系统在线购买书籍(基本事件流)时,如果某种书籍没库存则无法查看该书籍信息,如果某种书籍有库存但购买数量超过库存量则提示库存不足,如果某种书籍有库存且购买数量小于库存量则进入验证、验证正确后自动生成订单。最后如果用户有需要则打印订单。
- 标准答案:
问题3(是否泛化,取决于出题人的心情)
- C1:Customer
- C2:Order
- C3:Books
6.2018下半年
题目
问题1(题目理解)
- C1:SNSGroup
- C2:SNSUser
- C3:SNSAdmin