文章目录
- 面向对象分析与设计
- 关系
- 类图
- 用例图
- 包含
- 练习题
- 2021年上真题
- 2021年下真题
考点:用例图和类图
面向对象分析与设计
关系
依赖:一个事物的语义依赖于另一个事物的语义的变化而变化
关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。
泛化:一般/特殊的关系,子类和父类之间的关系
实现:一个类元指定了另一个类元保证行的契约
多重度:代表一个用例与另一个用例的对应关系。0…1,0…*
类图
用例图
用例图:静态图,展现了一组用例、参与者以及它们之间的关系。
用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作。
用例之间的关系:包含(include)、扩展(extend)、泛化(generalize)。
泛化:继承关系
拓展:可做可不做的动作
包含
-
当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例成基础用例。其中"<<include>>”是包含关系的构造型,箭头指向抽象用例。
例如,在机房收费系统中“注册学生信息”和“充值”两个用例都需要操作员或者管理员登陆,为此,可以定义一个抽象用例“用户登陆”。用例“注册学生信息”和“充值”与用例“用户登陆”之间的关系就是包含关系。
包含就是一定要完成注册学生信息和充值才能登录 -
一个用例的功能太多时,可以使用包含关系建立若干个更小的用例。
这种考的少,一个用例多个箭头多个用例的情况,泛化考的多
练习题
2021年上真题
某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务。该系统的主要功能描述如下:
(1)注册:患者扫描医院提供的二维码进行注册,注册过程中,患者需提供其病历号,系统根据病历号自动获取患者基本信息。
(2)登录:已注册的患者可以登录系统进行线上抓药,未册的患者系统拒绝其登陆。
(3)确认处方:患者登录后,可以查看医生开具的所有处方。患者选择需要抓药的处方和数量(需要抓几副药),同时说明是否需要煎制。选择取药方式:自行到店取药或者送药上门,若选择送药上门,患者需要提供收货人姓名、联系方式和收货地址。系统自动计算本次抓药的费用,患者可以使用微信或支付宝等支付方式支付费用。支付成功之后,处方被发送给药师进行药品配制。
(4)处理处方:药师根据处方配置好药品。若患者要求煎制,药师对配置好的药品进行煎制。煎制完成,药师将该处方设置为已完成。若患者选择的是自行取药,取药后确认已取药。
(5)药品派送:处方完成后,对于选择送药上门的患者,系统将给快递人员发送药品配送信息,等待快递人员取药;并给患者发送收获验证码。
(6)送药上门:快递人员将配制好的药品送到患者指定的收获地址。患者收货时,向快递人员出示收获验证码,快递人员使用该验证码确认药品已送到。
现采用面向对象分析与设计方法开发上述系统,得到如图3-1所示的用例图以及图3-2所示的类图。
【问题1】(7分)
根据说明中的描述,给出图3-1中A1一A3所对应的参与者名称和U1一U4处所对应的用例名称
【问题2】(5分)
根据说明中的描述,给出图3-2中C1一C5所对应的类名。
【问题3】(3分)
简要解释用例之间的include、extend和generalize关系的内涵。
- 问题1:
A1:患者 A2:快递人员 A3:药师
U1:确认处方 U2:支付方式 U3:微信 U4:支付宝
注意:U2~U4为什么不是取药方式(到店取药和送药上门),原因:快递人员有送药上门和药品配送,该用例图已经有取药方式,出题大概率不会再出取药方式,支付方式会更准确点- 问题2
C1:支付方式 C2:微信 C3:支付宝 C4:处方 C5:药品
C2和C3是C1的子类,存在继承关系。看文章可以看到有继承关系的有取药方式(到店取药和送药上门)以及支付方式(微信和支付宝)。患者和C1是组合关系,强关联,支付方式和取药方式对比,支付方式会更强关联- 问题3
包含include:一个用例包含另一个用例,当基本用例执行时,被包含用例一定会执行。包含关系由基本用例指向被包含用例,关系是一条带箭头的虚线,虚线上包含<<include>>
扩展extend:当一个用例执行时,可能会出现特殊情况和可选情况,这个时候就会执行扩展用例。扩展关系由扩展用例指向基本用例,关系是一条带箭头的虚线,虚线上包含<<extend>>
泛化generalize:父用例泛化子用例,子用例继承父用例的所有属性和行为,并且父用例可以出现的地方,子用例都可以将其替换。
2021年下真题
某游戏公司欲开发一款吃金币游戏。游戏的背景为一种回廊式迷官(Maze),在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Robot)):小精灵(PacMan)和幽灵(Ghost)。游戏的目的就是控制小精灵在迷宫中游走,吞吃迷宫路径上的金币,且不能被幽灵抓到。幽灵在迷宫中游走,并会吃掉遇到的小精灵。机器人游走时,以单位距离的倍数计算游走路径的长度。当迷宫中至少存在一个小精灵和一
个幽灵时,游戏开始。机器人上有两种传感器,使机器人具有一定的感
知能力。这两种传感器分别是:
(1)前向传感器(FrontSensor)。探测在机器人当前位置的左边、右边和前方是否有墙(机器人遇到墙时,必须改变游走方向)。机器人根据前向传感器的探测结果,决定朝哪个方向运动。
(2)近距离传感器(ProxiSensor))。探测在机器人的视线范围内(正前方)是否存在隐藏的金币或幽灵。近距离传感器并不报告探测到的对像是否正在移动以及朝哪个方向移动。但是如果近距离传感器的连续两次探测结果表明被探测测对象处于不同的位置,则可以推测出该对象在移动。
另外,每个机器人都设置有一个计时器(Timer),用于支持执行预先定义好的定时事件。
机器人的动作包括:原地向左或向右旋转90°、向前或向后移动。
建立迷宫:用户可以使用编辑器(Editor))编写迷宫文件,建立用户自定义的迷宫。将迷宫文件导入游戏系统建立用户自定义的迷宫。
现采用面向对象分析与设计方法开发该游戏,得到如图3-1所示的用例图以及图3-2所示的初始类图
【问题1】(3分)
根据说明中的描述给出图3-1中U1~U3所对应的用例名
【问题2】(4分)
图3-1中用例U1~U3份别与哪个(哪些)用例之间有关系,是何种关系?
【问题3】(8分)
根据说明中的描述,给出图3-2中C1~C8所对应的类名
- 问题1
U1:编写迷宫文件 U2:导入迷宫文件 U3:设置计时器- 问题2
U1、U2和建立迷宫是泛化关系,建立迷宫用例泛化U1、U2用例U3和操作机器人是包含关系,操作机器人用例包含U3用例- 问题3
C1:机器人 C2:计时器 C3:小精灵 C4:幽灵 C5:传感器 C6:前向传感器 C7:近距离传感器 C8:迷宫