需求分析的结构化和面向对象方法

需求分析的方法,主要有结构化(SA)方法、面向对象分析(OOA)方法。另外有面向问题域的分析(Problem Domain Oriented Analysis,PDOA)方法,还有一些形式化方法例如VDM ( Vienna Design Method)和Z等。

一、结构化分析方法(SA)

SA方法的基本思想是自顶向下,逐层分解,把一个大问题分解成若干个小问题,每个小问题再分解成若干个更小的问题。经过逐层分解,每个最低层的问题都是足够简单、容易解决的,于是复杂的问题也就迎刃而解了。

SA方法分析模型的核心是数据字典,围绕这个核心,有三个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。在实际工作中,一般使用E-R图表示数据模型,用数据流图(DFD)表示功能模型用状态转换图(State Transform Diagram,STD)表示行为模型。这三个模型有着密切的关系,它们的建立不具有严格的时序性,而是一个迭代的过程。

数据字典

数据字典中一般有六类条目,分别是数据元素、数据结构、数据流、数据存储、加工逻辑和外部实体。不同类型的条目有不同的属性需要描述。

(1)数据元素。数据元素也称为数据项,是数据的最小组成单位,例如,课程号、课程名等。对数据元素的描述,应该包括数据元素的名称、编号、别名、类型、长度、取值范围和取值的含义等。

(2)数据结构。数据结构用于描述某些数据元素之间的关系,它是一个递归的概念,一个数据结构可以包括若干个数据元素或(和)数据结构。数据结构的描述重点是数据元素之间的组合关系,即说明数据结构包括哪些成分。这些成分中有三种特殊清况,分别是任选项、必选项和重复项。

(3)数据流。数据流由一个或一组数据元素组成,对数据流的描述应包括数据流的名称、编号、简要说明、来源、去处、组成和流通量(含高峰时期的流通量)。

(4)数据存储。数据存储的条目主要描写该数据存储的结构,以及有关的数据流和查询要求。

(5)加工逻辑。需要描述加工的编号、名称、功能的简要说明、有关的输入数据流和输出数据流。对加工进行描述,目的在于使相关人员能有一个较明确的概念,了解加工的主要功能。

(6)外部实体。外部实体是数据的来源和去向,对外部实体的描述应包括外部实体的名称、编号、简要说明、外部实体产生的数据流和系统传给该外部实体的数据流,以及该外部实体的数量。

数据流图(DFD)

(1)数据流图(DFD)基本概念

(2)数据流图(DFD)的层次

SA方法的思路是依赖于DFD进行自顶而下的分析。这也是因为系统通常比较复杂,很难在一张图上就将所有的数据流和加工描述清楚。因此,DFD提供一种表现系统高层和低层概念的机制。也就是先绘制一张较高层次的DFD,然后在此基础上,对其中的加工进行分解,分解成为若干个独立的、低层次的、详细的DFD,而且可以这样逐一的分解下去,直至系统被清晰地描述出来。

状态转换图(STD)

大多数业务系统是数据驱动的,所以适合使用DFD。但是,实时控制系统却主要是事件驱动的,因此,行为模型是最有效的描述方式。STD通过描述系统的状态和引起系统状态转换的事件,来表示系统的行为。此外,STD还指出了作为特定事件的结果将执行哪些动作(例如,处理数据等)。

在STD中从一个状态到另一个状态的转换用箭头线表示,箭头表明转换方向,箭头线上标上事件名。必要时可在事件名后面加一个方括号,括号内写上状态转换的条件。也就是说,仅当方括号内所列出的条件为真时,该事件的发生才引起箭头所示的状态转换。

实体联系图(E-R图)

E-R图提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。构成E-R图的3个基本要素是实体型、属性和联系。

二、面向对象分析方法(OOA)

面向对象分析的基本任务是运用面向方法对问题域进行分析和理解,正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责,以及它们之间所形成的各种联系。最终产生一个符合用户需求,并能直接反映问题域和系统功能的面向对象分析模型及其详细说明。

(1)对象:属性(数据)+方法(操作)+对象ID

(2)类:(实体类/控制类/边界类)

  • 实体类映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息,例如在线教育平台系统可以提取出学员类和课程类它们都属于实体类。
  • 控制类是用于控制用例工作的类一般是由动宾结构的短语(“动词+名词”或‘名词+动词”)转化来的名词,例如用例“身份验证”可以对应于一个控制类“身份验证器”它提供了与身份验证相关的所有操作。
  • 边界类用于封装在用例内、外流动的信息或数据流。边界类位于系统与外界的交接处,包括所有窗体、报表、打印机和扫描仪等硬件的接口以及与其他系统的接口。

(3)继承与泛化:复用机制

(4)封装:隐藏对象的属性和实现细节,仅对外公开接口

(5)多态:不同对象收到同样的消息产生不同的结果

(6)接口:一种特殊的类,他只有方法定义没有实现

(7)重载:一个类可以有多个同名而参数类型不同的方法

统一建模语言(UML)

UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言,它融入了软件工程领域的新思想、新方法和新技术,它的作用域不限于支持OOA和OOD,还支持从需求分析开始的软件开发的全过程。

(1)UML的结构

从总体上来看,UML的结构包括构造块、规则和公共机制三个部分。

  • 构造块。UML有三种基本的构造块分别是事物(thing )、关系( relationship)和图( diagram )。事物是UML的重要组成部分关系把事物紧密联系在一起图是多个相互关联的事物的集合。
  • 公共机制。公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制四种。
  • 规则。规则是构造块如何放在一起的规定,包括范围、可见性、完整性和执行四个方面

(2)UML图

UML2.0包括14种图,不再赘述。

(3)UML事物

  • UML中的事物也称为建模元素包括结构事物(structural things )、行为事物(behavioral things动作事物)、分组事物(grouping things)和注释事物(annotational things注解事物)。这些事物是UML模型中最基本的OO构造块。

(4)UML关系

  • UML用关系把事物结合在一起,主要有下列四种关系:

  • 依赖(dependency)。依赖是两个事物之间的语义关系其中一个事物发生变化会影响另一个事物的语义。
  • 关联(association)。关联描述一组对象之间连接的结构关系。
  • 泛化(generalization)。泛化是一般化和特殊化的关系描述特殊元素的对象可替换一般元素的对象。
  • 实现(realization )。实现是类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。

UML-4+1视图

UML的4+1视图是指用例视图和逻辑视图、实现视图、进程视图和部署视图。

用例图 

用例图是描述一组用例、参与者及它们之间的关系。主要包括参与者、用例和通信关联三种元素。

用例图的特点如下:

  • 用户角度描述系统功能;
  • 参与者是外部触发因素;
  • (包括用户、组织、外部系统,时间);
  • 用例是功能单元。

用例图的关系包括:包含关系、扩展关系和泛化关系

包含关系:其中这个提取出来的公共用例称为抽象用例,而把原始用例称为基本用例或基础用例系:当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们。

扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰。

泛化关系:当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。

用例建模的流程如下:

  • 识别参与者(必须);
  • 合并需求获得用例(必须);
  • 细化用例描述(必须);
  • 调整用例模型(可选)

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

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

相关文章

基于cubeMX的正点原子miniSTM32对W25Q64的存储使用

一、实现目标 使用cubeMX建立项目工程,结合正点原子提供的hal库对W25Q64闪存调用的例程,实现W25Q64的读写。 二、实现过程 1、首先建立cubeMX工程,其他项设置不再叙述,只看连接W25Q64的SPI设置,这里使用SPI1&#xf…

阶乘分解《算法竞赛进阶指南》

阶乘分解《算法竞赛进阶指南》 \Huge{阶乘分解《算法竞赛进阶指南》} 阶乘分解《算法竞赛进阶指南》 题目地址:197. 阶乘分解 - AcWing题库 文章目录 题面输入格式输出格式数据范围输入样例:输出样例:样例解释 思路标程 题面 给定整数 N N…

2.1 关系模型的数据结构及形式化定义

2.1.1 关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 。 逻辑结构----二维表 从用户角度,关系模型中数据的逻辑结构是一张二维表 。 建立在集合代数的基础上。 1. 域(domain) 2. 笛卡儿积(C…

RAF(requestAnimationFrame) 和 RIC(requestIdleCallback) 是什么

requestAnimationFrame requestAnimationFrame: 告诉浏览器在下次重绘之前执行传入的回调函数(通常是操纵 dom,更新动画的函数);由于是每帧执行一次,那结果就是每秒的执行次数与浏览器屏幕刷新次数一样,通常是每秒 60…

layui给table列表添加鼠标悬停title显示

function tablehs() {tabhs table.render({elem: #ta1currentTablehs,id: ta1currentTablehs,url: orderComplaint/uploadlist,height: 300,autoSort: false,//禁用前端自动排序,否则会与数据库返回的数据顺序不一致contentType: application/json,cellMinWidth: 8…

记一次垃圾笔记应用VNote安装失败过程

特色功能简介 1.全文搜索: VNote支持根据关键词搜索整个笔记本或者特定文件夹内的文档内容,非常适合快速找到信息。 2.标签管理: 你可以给笔记添加标签,从而更好地组织和检索你的笔记内容。 3.自定义主题和样式: 进入设置,VNote允许你选…

proxy 代理的接口报错301问题

项目系统里仅仅这个接口报错,反向代理错误导致。 默认情况下,不接受运行在HTTPS上,且使用了无效证书的后端服务器。如果你想要接受,修改配置:secure: false(简单意思:如果本地没有进行过https相…

Java中的Date类型字段入到oracle中表后会如何如何展示日期格式

在Oracle数据库中,Date类型字段存储日期和时间信息。当将Java的Date类型字段插入到Oracle表中后,数据库会根据默认的日期格式在查询结果中展示日期。 Oracle数据库的默认日期格式是通过NLS_DATE_FORMAT参数来定义的。如果没有显式地指定日期格式&#x…

Dify学习笔记-手册(三)

1、应用构建及提示词 在 Dify 中,一个“应用”是指基于 GPT 等大型语言模型构建的实际场景应用。通过创建应用,您可以将智能 AI 技术应用于特定的需求。它既包含了开发 AI 应用的工程范式,也包含了具体的交付物。 简而言之,一个应…

管理者想要带领团队达成目标,不妨从以下7个关键处着手

团队执行力是指团队在完成任务和目标方面的效率和能力。团队执行力的高低直接影响着团队的生产力、效益和业绩。因此,提升团队的执行力是每个领导者和管理者的重要任务。以下是一些提升团队执行力的方法: 管理者想要带领团队达成目标,不妨从以…

Linux 一键部署influxd2-telegraf

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

建筑物防雷检测安全接地应用解决方案

雷电是一种自然现象,具有极高的电压和电流,对建筑物及其内部设备、人员和财产可能造成严重的危害,如火灾、爆炸、电击、电磁干扰等。因此,建筑物必须采取有效的防雷措施,以保障建筑物的安全和可靠运行。建筑物防雷检测…

Hudi0.14.0集成Spark3.2.3(Spark Shell方式)

1 启动 1.1 启动Spark Shell # For Spark versions: 3.2 - 3.4 spark-shell --jars /path/to/jars/hudi-spark3.2-bundle_2.12-0.14.0.jar \ --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \ --conf spark.sql.catalog.spark_catalog=org.apache.spar…

【C/Python】用GTK实现多文档窗体程序

一、用C语言 在GTK(GIMP Toolkit)中实现多文档接口(MDI)程序可以使用多种方法。GTK本身并没有提供专用的MDI窗口小部件,但可以使用标签页(Notebook)或多个窗口(Window)来…

怎么缩小动图的大小?一分钟快速压缩gif体积

GIF动图是一种使用GIF文件格式创建的动画图像。GIF是一种常见的图像文件格式,它支持多帧图像以形成连续播放的动画效果。与其他图像格式只能表示静态图像不同,GIF格式可以存储多个图像帧,并通过在特定时间间隔内循环播放这些帧来创建动画效果…

【C++记忆站】类和对象(三)

文章目录 再谈构造函数构造函数赋值并非初始化初始化列表explicit关键字 static成员概念特性一、静态成员为所有类对象所共享,不属于某个具体的对象二、静态成员变量必须在类外定义,定义时不添加static关键字三、静态成员函数没有隐藏的this指针&#xf…

基于SpringBoot Vue航空机票预订系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

uniapp canvas做的刮刮乐解决蒙层能自定义图片

最近给湖南中烟做元春活动&#xff0c;一个月要开发4个小活动&#xff0c;这个是其中一个难度一般&#xff0c;最难的是一个类似鲤鱼跃龙门的小游戏&#xff0c;哎&#xff0c;真实为难我这个“拍黄片”的。下面是主要代码。 <canvas :style"{width:widthpx,height:hei…

算法训练营Day57(回文子串--总结DP)

647. 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int countSubstrings(String s) {int len s.length();//i到j这个子串是否是回文的boolean [][] dp new boolean[len][len];int res 0;for(int i len-1;i>0;i--){for(int …

(学习日记)2024.01.22:各类型占用字节 与 指针

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…