面向对象需求分析

news2024/9/20 22:43:40

1. 面向对象分析概述

1.1 面向对象基本概念

以对象为中心,以类为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

1.2 UML统一建模语言

为什么要使用UML

UML基本概念

统一建模语言(UML)是一个支持模型化和软件系统开发的图形化语言,简单、统一,而且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准。

如下图UML模型可作为客户、需求分析员、开发人员、测试人员等沟通的标准。

1.3 面向对象分析与UML

面向对象分析中分为功能模型、对象模型、动态模型,分别与UML图例对应关系如下所示:

 2. 功能模型

2.1 功能模型概述

功能模型描述所有参与者使用系统功能的情况。

以用例为建立功能模型的基本单位,通过可视化的用例图展示参与者与系统交互的情况。

2.2 用例图概述

用例图从用户的观点描述系统的功能,是用户所能观察到的系统功能的模型图,由参与者、用例以及它们之间关系所组成。 

参与者(Actor)

参与者是与系统交互的外部实体(使用系统的用户、组织机构、外部系统或硬件设备),在UML中用下面带有名字的小人来标示。

用例(Use Case)

用例是从用户角度描述系统的行为,主要说明软件系统的功能,在UML中用椭圆标示。

关联关系

描述参与者与用例之间的关系,在UML中用箭头标示。 

2.3 用例建模的步骤 

(1)确定业务参与者

业务参与者是与系统交互的外部实体(使用系统的用户、组织机构、外部系统或硬件设备)。

  • 谁使用该系统;
  • 谁改变系统的数据;
  • 谁从系统获取信息;
  • 谁需要系统的支持以完成日常工作任务;
  • 谁负责维护、管理并保持系统正常运行。
(2)确定业务需求用例

用例是从用户角度描述系统的行为,向参与者提出问题获取用例。

  • 参与者需获取何种功能,需要做什么;
  • 参与者需读取、产生、删除、修改或存储系统中何种信息;
  • 系统发生事件和参与者间的通信;
  • 每个用例应该是系统的一个功能,如果功能很大,需分解为几个独立功能。
(3)创建用例模型

创建用例模型即画出用例图。 用例图围绕参与者创建,对于系统的每一个参与者可创建一个分用例图,最后组合成一个或多个用例图。 

2.4 用例之间的关系

(1)包含关系

表示一个用例的行为包含了另一个用例的行为,这种关系用虚线箭头和《includ》字样表示,箭头指向被包含的用例。

(2)扩展关系

对于用例的异常行为或不同分支的选择行为抽象为一个扩展用例,这样扩展用例与基础用例之间构成了扩展关系,用虚线箭头和《extend》字样表示,箭头指向被扩展的用例(即基础用例)。

(3)泛化关系

表示一个用例可以被特别列举为一个或多个子用例,这被称为用例泛化。这种关系用带空心箭头的实线表示,箭头指向被泛化(被继承)的用例,即父用例。

由于子用例继承父用例的动作会导致高耦合的产生,因此要谨慎使用泛化关系。

2.5 高校图书借阅系统用例建模案例

高校图书借阅系统的业务流程
  • 管理员可以通过此系统对图书和读者信息进行查询、增加、修改和删除,查询读者借阅情况; 管理员还可以查询借阅超期的信息;

  • 读者可以通过此系统借书、归还图书,查询个人现在和历史借阅情况,若有图书超期则需支付罚款并归还后才可继续借书;

  • 读者可以查询书籍信息、个人基本信息、个人借阅及超期罚款信息等;

  • 管理员和读者都可以修改个人密码。

(1)确定业务参与者

管理员、读者

(2)确定业务需求用例

管理员用例:图书信息维护、读者信息维护、信息查询、修改个人密码。

读者用例:借书、还书、续借、信息查询、修改个人密码。

(3)确定用例模型

2.6 机票预定系统用例建模案例

机票预定系统的业务流程
  • 航空公司操作员录入航班信息并对其维护,可以查询、统计旅客信息、订单信息以及航班信息。旅客首次进入系统需要注册,在此系统中订票、取票和退票,系统对订票、取票和退票信息进行审核,旅客接收订票成功通知、机票和退票成功通知。旅客还可以查询航班信息,查询和修改个人基本信息,查询个人订单。另外系统时钟在旅客行程当日发送行程通知,提醒旅客有预订航班几点起飞,以免忘记行程。
  • 航空公司操作员在旅客已取票情况下,可以在期限范围内为旅客完成退票,操作流程与旅客退票流程基本相同。
(1)确定业务参与者

操作员、旅客、时钟

(2)确定业务需求用例

操作员用例:航班信息维护、信息查询、退票。

旅客用例:旅客信息维护、订票、取票、退票、信息查询。

时钟用例:行程提醒。

(3)确定用例模型

3. 对象模型 

3.1 对象模型概述

什么是对象模型呢? 对象模型(类图)是模型的静态结构,表示软件要处理的数据,它描述了系统逻辑设计中存在的包、类以及它们之间的关系。

3.2 对象建模的步骤 

(1)划分主题

对于小型系统,可以跳过此步骤直接开始确定系统的类和对象。

对于稍大型的系统,为了简化对象模型创建过程,可将一个大问题划分为若干主题,再针对各个主题建立类图,最后合并为一个整体。

划分主题的原则:

  • 每个主题的规模应当适中,含有6个左右的类为宜。
  • 每个主题的功能应具有独立性和完整性,与其它主题有最少的联系。
(2)确定类和对象 

系统分析员根据获取的需求和用例模型分析出类和对象。

在UML建模的类图中,每个类表示为一个矩形,矩形的上部为类名,中间为类的所有属性,下部为类的所有操作,除类名外,其他部分可以省略。

  • 类名:是一个字符串,学生。
  • 属性:[可见性]属性名:类型[=默认值]
  • 操作:[可见性]名称(参数列表)[:返回类型]
  • 可见性:+表示public,-:表示private,#表示protected。

(3)确定类与类之间的关系

类和类之间的静态关系包括关联关系、聚合关系和泛化关系。

  • 关联关系:两个或多个类之间的连接关系(最常见)。格式:关联关系用一条无向直线表示,直线两端分别与一个类相连,并在两端标注关联的对象数量。
  • 聚合关系:类和类之间具有明显的组成关系,即两个类之间的对象具有整体和部分的关系,也就是一个类的实例包含另一个类的实例,它是关联关系的一种特殊形式。格式:聚合关系在关联关系直线整体类的一端画一个空心菱形,表示一对多联系。
  • 泛化关系(继承关系):表示一般与特殊的关系,它指的是子类继承父类的所有属性和行为,子类也可以具有自己独有的属性和行为。格式:泛化关系在关联关系直线一般类的一端画一个空心三角形。
(4)确定类和关联的属性

属性表示类中对象的性质,它既与问题域有关,又与系统要完成的功能有关。

分析和选择属性的方法:

  • 每个类的对象至少要包含一个“id”性质的属性,如学生的学号、商品的编号、订单的编号等等;属性的设置应适合类中所有对象,包括在泛化关系当中对象所继承的属性;系统中所有要存储的数据都必须定义为属性;导出属性即可通过其它属性计算出来的属性应当略去。
  • 错误或不确定的属性应该删除:比如,误把对象或关联当作属性、过于细化的属性、不一致的属性等等。
  • 每个属性的数据类型可在此确定,也可以在面向对象的设计阶段确定。
(5)确定类和关联的操作

类和关联中的对象收到消息后所能执行的操作,有以下两种:

  • 简单的操作。即每一个对象都应具备的操作,包括:建立和初始化一个新对象,建立或切断对象之间的关联,存取对象的属性值,释放或删除一个对象。这些操作在分析时是隐含的,在类图中不必标出,但实现(编码)类和对象时要有定义。
  • 复杂的操作。两种:一是计算操作,就是利用对象的属性值计算,以实现某种功能;二是监控操作,它处理的是外部系统的输入∕输出、对外部设备的控制和数据的存取。

3.3 高校图书借阅系统对象模型案例

高校图书借阅系统的业务流程
  • 管理员可以通过此系统对图书和读者信息进行查询、增加、修改和删除,查询读者借阅情况; 管理员还可以查询借阅超期的信息;

  • 读者可以通过此系统借书、归还图书,查询个人现在和历史借阅情况,若有图书超期则需支付罚款并归还后才可继续借书;

  • 读者可以查询书籍信息、个人基本信息、个人借阅及超期罚款信息等;

  • 管理员和读者都可以修改个人密码。

(1)划分主题

分析问题的规模,此系统不需要划分主题。

(2)确定类和对象 

根据问题域和用例模型,得到图书借阅系统的类和对象包括图书、单本图书、读者、读者类别、图书存放区域、图书管理员。

(3)确定类与类之间的关系

类与类之间的关系为:

  • 每一个图书有多本,即包含多个单本图书的对象;
  • 每一个图书都只能规定一个存放区域;
  • 每个图书管理员只管理一个区域的图书,每个区域有多名管理员;
  • 每个读者都可以对每个单本图书进行借阅;
  • 每个读者都只属于一个读者类别。
(4)确定类和关联的属性
类与对象属性
图书书号,书名,作者,单价,类别,出版社,出版日期
单本图书条码号,图书状态
读者读者号,密码,姓名,性别,电话,身份证号
读者类别类别号,类别名,最大借书天数,最大续借天数,最大借书数量
存放区域区域名,最大存放数量
图书管理员编号,姓名,密码,电话
借阅读者号,图书条码号,借书日期,还书日期,是否归还,续借日期,罚款金额,是否交罚款
(5)确定类和关联的操作
类与对象操作
读者修改密码,查询读者信息,查询个人借阅信息
图书查询图书信息,统计各类别图书借阅情况
单本图书修改图书状态
借阅增加读者借阅信息,修改还书日期、是否归还、续借日期、罚款金额、是否交罚款,查询借阅信息,查询超期未还信息
读者类别查询各类别读者借书量上限、最大借书天数等
图书管理员修改密码
高校图书借阅系统—对象模型(类图)

3.4 机票预订系统对象模型案例

机票预定系统的业务流程
  • 航空公司操作员录入航班信息并对其维护,可以查询、统计旅客信息、订单信息以及航班信息。旅客首次进入系统需要注册,在此系统中订票、取票和退票,系统对订票、取票和退票信息进行审核,旅客接收订票成功通知、机票和退票成功通知。旅客还可以查询航班信息,查询和修改个人基本信息,查询个人订单。另外系统时钟在旅客行程当日发送行程通知,提醒旅客有预订航班几点起飞,以免忘记行程。
  • 航空公司操作员在旅客已取票情况下,可以在期限范围内为旅客完成退票,操作流程与旅客退票流程基本相同。
(1)划分主题

分析问题的规模,此系统不需要划分主题。

(2)确定类和对象 

根据问题域和用例模型,得到机票预订系统的类和对象包括旅客、航班、航班票务、订单和机票。

(3)确定类与类之间的关系

类与类之间的关系为:

  • 每一个航班具有多种不同舱位的机票,即包含多个航班票务的对象;
  • 每个旅客都可以对每种航班票务下订单进行预订;
  • 每个订单会产生一张机票。
(4)确定类和关联的属性
类与对象属性
旅客身份证号,密码,姓名,电话
航班航班号,起飞站,起飞时间,到达站,到达时间,登机时间,登机口
航班票务航班号,舱位,日期,票价,余票
订单订单号,折扣,订票时间,订单状态
机票订单号,座位,机票状态
(5)确定类和关联的操作
类与对象操作
旅客注册,个人信息维护,注销
航班查询航班信息
航班票务按航班日期查询票务信息,统计航班预订情况
订单生成订单,改变订单状态,统计订单情况,计算退款金额
机票生成机票,改变机票状态,统计机票信息
机票预订系统—对象模型(类图)

4. 动态模型 

 4.1 动态模型概述

交互模型(动态模型)一般是由顺序图、状态图和活动图表示的动态模型,是从需求分析向设计过渡的重要环节。

4.2 顺序图

顺序图概述

用例图中,用例是从用户角度描述系统的行为,它将系统的一个功能描述成一系列事件,用户与用例的交互过程通过事件流进行描述,是一个文本性质的场景描述。

顺序图可以以图形的形式描绘这种场景,其中既具有交互的时间顺序又包含了参与交互的类的对象以及完成功能细节时对象之间要交互的信息,另外这些类的对象还包含用户的某些操作界面,其实例为表单对象(Form),以及系统服务器对象。

顺序图对参与者与每个用例交互过程的描述更加流畅并更具直观性,既易于用户的理解和交流,又有利于开发者从需求向设计的过渡。

顺序图符号

顺序图中,纵轴从上到下为交互的时间顺序,横轴从左到右为参与交互的参与者对象、对象模型中某些类的对象以及一些操作界面的表单对象和系统服务器对象。

顺序图的基本符号:竖直的虚线,细长的矩形,有向实线,有向虚线。

消息的分类
  • 消息(普通)。图中消息1,它连接到两个不同对象生命线的连接点。此类消息表示一个动作,接收消息的对象(箭头所指的对象)执行这个请求上的动作。消息可包含传给要执行方法的参数。
  • 消息(调用)。图中消息2,消息调用的流程类型是过程调用,即消息调用是过程调用的一部分。
  • 消息(返回)。图中消息3,返回消息是将信息返给对象的消息,一般发生在执行动作之后。返回信息不执行动作,仅返回信息,与普通消息的方法或操作无关。
  • 消息(异步)。图中消息4,异步调用是流程类型被设置为异步的消息。发送对象将消息发送给接收对象,并不等待接收对象的响应。       

4.3 顺序图案例

高校图书借阅系统的业务流程
  • 管理员可以通过此系统对图书和读者信息进行查询、增加、修改和删除,查询读者借阅情况; 管理员还可以查询借阅超期的信息;

  • 读者可以通过此系统借书、归还图书,查询个人现在和历史借阅情况,若有图书超期则需支付罚款并归还后才可继续借书;

  • 读者可以查询书籍信息、个人基本信息、个人借阅及超期罚款信息等;

  • 管理员和读者都可以修改个人密码。

借书用例的顺序图

还书用例的顺序图

4.4 状态图

 面向对象的分析方法中,状态图描述的是每一类对象的动态行为,面向对象的分析方法中状态图的画法与结构化分析方法中的画法基本相同。

状态图由对象的各个状态和连接这些状态的转换组成。

事件与对象状态的关系:当对象接收到一个事件后,其状态会发生改变,如果一个事件并不引起对象的状态变化,则状态图中应忽略此事件。

注意:并不是任何一个类都需要有一张状态图描绘它的行为,只针对具有明显的状态特征并且具有比较复杂的状态、事件、响应行为的类,才需要画状态图。

4.5 状态图案例

图书借阅类的对象状态
  • ①未归还、未续借、未超期
  • ②未归还、已续借、未超期
  • ③未归还、未续借、已超期、未交罚款
  • ④未归还、已续借、已超期、未交罚款
  • ⑤已归还、未超期
  • ⑥已归还、已超期、已交罚款。

单本图书对象的状态

未借出、已借出、不可借和已下架四种状态。

4.6 活动图 

活动图概述

活动图用来捕捉用例的活动,使用框图的方式显示动作及其结果。

活动图是一个流图,描述了从活动到活动的流。

它描述采取何种动作,动作的结果是什么(动作状态改变),何时发生(动作序列),以及在何处发生(泳道)。

活动图元素

一个活动图可能包括以下元素: 起点、终点、动作、转移、决策、 同步棒和泳道。

4.7 活动图案例

借书用例的活动图

还书用例的活动图

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

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

相关文章

【苍穹外卖】前端 Day 1

1 Vue 1.1 通过 vue cli 脚手架创建前端工程 1.2 项目结构 1.3 启动项目 VS Code 启动前端项目: npm run serve 注意这里占用端口号 8080 与 java springboot 占用端口号一致,有冲突 serve 是这个名字 终止:ctrl c 修改端口号 2 vue 基本…

JVM面试真题总结(六)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 解释GC的标记-整理算法及其优点 GC(垃圾收集&#xff…

鸿蒙开发应用图标信息配置

鸿蒙开发配置文件 应用管理里面的应用 手机桌面上的应用信息 学习更多前端知识我已经整理到下面了↓↓↓↓↓↓快去看看吧

Android以及IoT设备传感器软件开发总结

1 传感器选型 1.1 传感器选型 6 axis:Bosch BMI160(比较差),InvenSense MPU6050(DMP),ST LSM6Dxx Acc: Freescale MMA7450L (MicroMachined Accelerometer/MC Multi-Axis, iMX31), Kionix KXSD9…

渣土车检测数据集 2600张 渣土车 带标注 voc yolo

数据集名称: 渣土车检测数据集 数据集规模: 图像数量:2600张标注类型:渣土车检测格式兼容性:支持VOC和YOLO标注格式 数据集内容: 该数据集主要用于训练和评估计算机视觉模型,特别是在渣土车&…

如何本地部署AI智能体平台,带你手搓一个AI Agent

今天分享如何在个人电脑上搭建一个AI智能体平台,可以自定义聊天机器人,设计智能体,编排工作流,知识库,RAG管道等等,还支持本地大模型接入,并对外提供API接口。 如搭建过程有疑问,可…

存储虚拟化

引入-在安装虚拟化VRM界面出现配置数据存储 1.数据存储 还有一处出现数据存储,创建虚拟机时,发放业务虚拟机,不建议选择,autoDS_CNAxx 2.引入FC集群文件系统 传统存储上一个LUN映射给多个CNA使用--集群文件系统VIMS-锁机制--共享存储 3.集群…

工厂方法模式和抽象工厂模式

工厂方法模式 一个工厂只能创建一种产品 工厂方法模式的结构 工厂方法模式包含以下4个角色 Product(抽象产品) ConcreteProduct(具体产品) Factory(抽象工厂) ConcreteFactory(具体工厂…

一篇文章带你看懂住宅代理如何实现内容过滤

在网络安全中,内容过滤是用户隐私保护的重要组成部分,将不良内容拦截在安全网之外是内容过滤的重中之重。在当下,住宅代理作为异军突起的网络安全工具,在内容过滤上有着不错的表现。本文将深入探讨住宅代理如何实现内容过滤&#…

项目小结二()

一.个人信息的界面 这里可以进行用户信息的修改,并渲染数据上去 二.这两天,出现的问题: 1.mybatis中 字段取别名 (还没验证,是否正确) 问题描述:由于实体类中的变量名,与数据库中…

数据权限的设计与实现系列8——前端筛选器组件Everright-filter集成框架开发1

背景 前面我们对筛选器组件进行了功能探索和技术验证,接下来就开始着手集成工作,融入一二三开发平台,打通前后端,最终让数据权限控制功能落地。 整体集成工作比较复杂,我们遵循由易到难的原则,先搭建出完整…

IPv6理论基础

IPV6 地址介绍 地址标识方法 格式 : XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX,128bit,8个16位,16进制 X表示十六进制的一个字符,可以是0 - 9,A -F 字母大小写不敏感,最终设备上显示均为大写 一个地址由8个字段构成…

Leetcode3266. K 次乘运算后的最终数组 II

Every day a Leetcode 题目来源:3266. K 次乘运算后的最终数组 II 解法1:3266. K 次乘运算后的最终数组 II 用最小堆手动模拟操作,直到原数组的最大值 mx 成为这 n 个数的最小值。 设此时还剩下 k 次操作,那么: 对…

HarmonyOs DevEco Studio小技巧11--AI插件

AI智能辅助编程工具 CodeGenie 简介 DevEco AI辅助编程工具(CodeGenie)为开发者提供高效的应用/服务AI辅助编程工具,支持HarmonyOS NEXT领域的智能知识问答、ArkTS代码补全/生成和万能卡片生成能力,提高开发者编码效率。 文档中…

mysql整体架构描述

文章目录 数据库架构示意图1. 连接层2. 服务层3. 存储引擎层4. 文件系统层5. 系统层主要特性 数据库文件格式InnoDB 存储引擎文件类型及用途 MyISAM 存储引擎文件类型及用途 其他文件类型文件内容示例表结构文件示例 (.frm)InnoDB 数据文件示例(.ibd)MyI…

(十四)、为 SpringCloud 项目生成 Docker 镜像

文章目录 1、原理2、最佳实践2.1、获得 SpringCloud 微服务启动模块的 jar 文件2.2、准备文件夹和 Dockerfile 文件2.3、 Dockerfile 文件的内容2.4、通过命令行构件新镜像 3、异常情况和处理:failed to create LLB definition3.1、现象3.2、解决配置国内镜像仓库清…

【Python报错已解决】 ModuleNotFoundError: No module named ‘tensorboard‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:使用pip安装TensorBoard…

vue3.0 使用echarts与echarts-gl 实现3D饼图

效果 安装echarts npm install echarts npm install echarts-gl 3d饼图组件&#xff1a; <template><div style"width: 100%; height: 100%" ref"echart"></div> </template><script setup> import { reactive, ref, onMou…

docker部署FastDFS文件系统详细记录,每个步骤都有详细记录。含linux和windows双系统安装教程

docker部署FastDFS文件系统详细记录 参考文章docker搭建FastDFS文件系统&#xff08;最详细版&#xff09; 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里&#xff0c;然后在周边加上内边距&#xff0c;边框和外边距&#xff0c;是盒子模型 默认一个块级区域会填充父类所有的行向空间&#xff0c;并且沿着块伸长容纳其内容&#xff0c;可以为块状体设置某…