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

news2024/12/24 22:02:24

在这里插入图片描述

文章目录

  • 面向对象分析与设计
    • 关系
    • 类图
    • 用例图
      • 包含
    • 练习题
      • 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:迷宫

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式C语言中函数宏基本操作方法

大家好,今天给大家分享一下,如何使用C语言中的函数宏,配置方法。 1 函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。 函数宏本质上为宏,可以直接进行定义,例如: #define IN…

【后续更新】python搜集上海二手房数据

源码如下&#xff1a; import asyncio import aiohttp from lxml import etree import logging import datetime import openpyxlwb openpyxl.Workbook() sheet wb.active sheet.append([房源, 房子信息, 所在区域, 单价, 关注人数和发布时间, 标签]) logging.basicConfig(l…

华为账号“一键登录”能力让美团用户尽享安全便捷的登录体验

背景 随着全场景智能生态的日益完善&#xff0c;用户面临着众多应用与服务的登录需求&#xff0c; 而繁琐的注册登录流程通常是用户转化的隐形障碍&#xff0c;用户可能因为步骤繁琐、记忆密码困难而中途放弃&#xff0c;导致应用错失潜在用户。其次&#xff0c;高门槛的登录方…

Springcloud从零开始--Eureka(一)

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有…

Java数组06:冒泡排序

本节内容视频链接&#xff1a;Java数组08&#xff1a;冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p58&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 冒泡排序是一种简单的排序算法&#xff0c;‌它重复地遍历要排序的数列&#xff0c;‌…

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…

Linux编辑器gcc/g++使用及Vim的配置

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.简单的vim配置1.1 配置文件的位置1.2 常用配…

20 Tkinter Spinbox 组件

Tkinter Spinbox 组件使用指南 Tkinter 的 Spinbox 组件是一个带有上下箭头的输入框&#xff0c;允许用户通过点击箭头来增加或减少数值&#xff0c;或者从下拉列表中选择一个值。它通常用于需要限制用户输入范围的场景。以下是对 Spinbox 组件的详细说明和一个使用案例。 Sp…

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言&#xff1a;本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题&#xff0c; 然后通过分析问题&#xff0c; 将缓冲区的概念与原理一步一步地讲解。同时&#xff0c; 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf&#xff0c; fprintf接口&#xff0c…

前端面试题 webpack的工作流程

一、流程图 二、重要概念 1.entry入口&#xff1a; Webpack 从配置的入口点开始&#xff0c;分析应用程序的依赖关系 2.output出口&#xff1a; 定义了打包后的文件如何输出&#xff0c;包括文件名和输出路径。 3.loader加载器&#xff1a; Webpack 本身只能处理 JavaScr…

2024 Python3.10 系统入门+进阶(六):random模块常用方法以及元组常用操作详解

目录 一、random模块1.1 random模块快用导航1.2 choice()方法---从非空序列中返回一个随机元素1.3 choices()方法---返回序列的随机元素1.4 randint()方法---获取指定范围的随机整数1.5 random()方法---获取0.0~1.0范围内随机浮点数1.6 randrange()方法---获取指定范围的随机整…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示&#xff0c;有2个矢量图斑&#xff0c;一个是耕地地块&#xff0c;另一个是范围图斑&#xff0c;如果我们需要把此工程的所有数据以及引用地图一起分享给别人&#xff0c;就可以使用【打包工程】这个工具。 如上所示&#xff0c;在【地理处理】下输入【打包工程】&am…

Excel的使用总结1

目录 1、汇总公式&#xff1a;TEXTJOIN 2、excel中选择某个区域的方法 3、excel中如何在复制的时候&#xff0c;不将公式一起复制过去 4、想要自动填充某个区域的值的方法 1、汇总公式&#xff1a;TEXTJOIN TEXTJOIN 函数 - Microsoft 支持 例&#xff1a;TEXTJOIN("…

Java数组07:稀疏数组

本节内容视频链接&#xff1a; https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 稀疏数组&#xff08;‌sparse …

[SWPUCTF 2023 秋季新生赛]UnS3rialize

[SWPUCTF 2023 秋季新生赛]UnS3rialize 点开之后得到一串php代码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class NSS {public $cmd;function __invoke(){echo "Congratulations!!!You have learned to construct a POP chain<br/>&q…

CDGA|数据治理为企业赋能价值的几种形式

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;而数据治理作为确保数据质量、安全性、合规性和可访问性的关键过程&#xff0c;正逐步成为企业转型升级、提升竞争力的核心驱动力。数据治理不仅关乎技术层面的优化&#xff0c;更是企业战略实…

【C++ Primer Plus习题】2.5

问题: 解答: #include <iostream> using namespace std;#define CEL_TO_FAH(c) 1.8*c32.0float celToFah(float value) {float fahrenheit CEL_TO_FAH(value);return fahrenheit; }int main() {float celsius 0;cout << "请输入一个摄氏温度的值:";ci…

ARM——驱动——内核编译

一、内核的介绍 Linux内核是Linux操作系统的核心内容&#xff0c;它负责管理系统的硬件资源&#xff0c;并为上层的应用程序提供接口。&#xff08;在上文都有所介绍&#xff09; 功能&#xff1a; 进程管理&#xff1a;内核负责创建、调度、同步和终止进程。它还管理进程间的…

linux应用编程--网络编程(socket编程基础)

介绍&#xff1a;套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;在前面的内容中已经给大家提到过&#xff0c; 使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信&#xff08;网络通信&#…

Python(PyTorch)多语言图像感知质量指标算法

&#x1f3af;要点 &#x1f3af;算法实现&#xff1a;&#x1f58a;PyTorch单尺度和多尺度质量指标算法 | &#x1f58a;C单尺度质量指标算法 | &#x1f58a;Rust多尺度质量指标算法 | &#x1f58a;LabVIEW单尺度质量指标算法 | &#x1f58a;MATLAB单尺度质量指标算法 | &…