12.3.案例分析专题-面向对象设计

2024-08-23 03:04

本文主要是介绍12.3.案例分析专题-面向对象设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

  • 面向对象分析与设计
    • 关系
    • 类图
    • 用例图
      • 包含
    • 练习题
      • 2021年上真题
      • 2021年下真题

考点:用例图和类图

面向对象分析与设计

在这里插入图片描述

关系

依赖:一个事物的语义依赖于另一个事物的语义的变化而变化
关联:是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合,都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。
泛化:一般/特殊的关系,子类和父类之间的关系
实现:一个类元指定了另一个类元保证行的契约
多重度:代表一个用例与另一个用例的对应关系。0…1,0…*
在这里插入图片描述

类图

在这里插入图片描述

用例图

用例图:静态图,展现了一组用例、参与者以及它们之间的关系。
用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作。
用例之间的关系:包含(include)、扩展(extend)、泛化(generalize)。
在这里插入图片描述
泛化:继承关系
拓展:可做可不做的动作

包含

  1. 当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例成基础用例。其中"<<include>>”是包含关系的构造型,箭头指向抽象用例。

    例如,在机房收费系统中“注册学生信息”和“充值”两个用例都需要操作员或者管理员登陆,为此,可以定义一个抽象用例“用户登陆”。用例“注册学生信息”和“充值”与用例“用户登陆”之间的关系就是包含关系。
    在这里插入图片描述
    包含就是一定要完成注册学生信息和充值才能登录

  2. 一个用例的功能太多时,可以使用包含关系建立若干个更小的用例。
    这种考的少,一个用例多个箭头多个用例的情况,泛化考的多
    在这里插入图片描述

练习题

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:迷宫

这篇关于12.3.案例分析专题-面向对象设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098165

相关文章

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py