[架构之路-248]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:如何用图形表达需求,结构化需求分析与面向对象需求分析的比较与融合

目录

前言:

一、结构化和面向对象方法上的区别

二、结构化与面向对象分析方法优缺点比较

三、结构化方法与面向对象方法的融合使用

四、结构化方法与面向对象方法的相辅相成完成软件开发


前言:

结构化软件开发方法和面向对象的软件开发方法,既有区别,又是相辅相成的,他们之间并非是相互排斥和相互隔离的,而是相辅相成。先有结构化方法,后又面向对象的方法。

实际上,面向对象方法是在结构化方法基础之上发展起来的,其继承了结构化方法的主要思想和开发流程,如需求分析、架构设计、详细设计、软件编码、测试验证登。同时结构化方法的模块化思想、自顶向下分解的思想、高内聚低耦合的思想都被面向对象的开发方法所继承,结构化的实体关系图和数据流图也以某种形式出现在面向对象的某种UML视图中!!!UML的类图,UML的时序图,UML流程图,都有所有体现。

一、结构化和面向对象方法上的区别

结构化分析方法(Structural Analysis Method)和面向对象分析方法(Object-Oriented Analysis Method)是常用的软件系统分析方法,但它们在理论、技术和方法论上有一些显著的区别。

  1. 思想基础:

    • 结构化分析方法:结构化分析方法着重于系统内部的数据和处理流程,强调自顶向下分解和组织。它基于实体关系图、数据流图(Data Flow Diagram)和数据字典(Data Dictionary)、状态图等概念。结构分析方法是站在计算机处理数据的角度诠释现实世界的业务逻辑。符合C语言编程的习惯:数据结构 + 算法。
    • 面向对象分析方法:面向对象分析方法将系统视为一组相互作用的对象,关注对象的属性和行为,并通过类、对象、关系和继承等概念进行建模。它基于用例图(Use Case Diagram)、类图(Class Diagram)和对象交互图(Object Interaction Diagram)等概念。强调自底向上构建系统。符合C++语言编程的习惯:对象、继承、封装、多态
  2. 抽象和建模:

    • 结构化分析方法:结构化分析方法注重对系统中的数据逻辑功能进行抽象和建模。它使用数据流图和数据字典以及结构图(Structure Chart)等工具,描述数据流的流动和数据处理的逻辑,符合C语言编程的习惯:数据结构 + 算法
    • 面向对象分析方法:面向对象分析方法通过识别系统中的对象、类和关系来建立模型。通过用例图、类图和对象交互图等工具,描述系统的功能需求、对象的属性和行为,以及对象之间的关系。
  3. 模块化与重用性:

    • 结构化分析方法:结构化分析方法强调模块化和功能划分,以便于软件的模块划分和重用。它通过功能划分、模块接口定义和结构图等工具来实现模块化设计。
    • 面向对象分析方法:面向对象分析方法通过对象和类的抽象和组合,提供了更高程度的模块化和重用性。它通过面向对象的原则和技术,如封装、继承和多态,实现了更灵活和可重用的设计。
  4. 开发流程:

    • 结构化分析方法:结构化分析方法通常采用瀑布式开发流程,强调在需求分析和设计阶段完成详细的系统描述和规范,然后再进行编码和测试。
    • 面向对象分析方法:面向对象分析方法更适合迭代和增量式开发流程,强调通过快速原型和迭代开发的方式来逐步完善系统的需求和设计

选择使用结构化分析方法还是面向对象分析方法取决于具体项目和需求的特点,以及团队的背景和技能。

结构化分析方法适用于较小的、相对简单的软件系统

而面向对象分析方法适用于较大、较复杂且需要高度模块化和重用性的软件系统,并通过对象之间的关系和复用,从而聚合成复杂的大型系统。

一般来说,面向对象分析方法更符合当前软件工程发展的趋势,尤其在面对变化和复杂性增加的情况下更有优势。

二、结构化与面向对象分析方法优缺点比较

结构化分析方法和面向对象分析方法是两种不同的软件开发方法,在软件开发过程中都可以用来分析问题和设计系统。

这两种方法各有优缺点,下面是它们的比较:

  • 概念不同:

结构化分析方法关注数据和处理的流程,强调系统中数据和处理的组织和设计,通过分析数据及其流程来设计系统;而面向对象分析方法则强调真实世界中的对象和这些对象之间的关系,通过分析对象及其交互来设计系统。

  • 编程方法不同:

结构化方法使用的是自顶向下的分解与设计,强调功能模块化流程控制面向过程式的编程方式;而面向对象方法使用的是自下而上的设计,强调对象的封装、继承和多态性等面向对象语言的特性,并通过对象间的通信完成流程控制,使得开发更加容易、可维护性更高、代码复用性更好

  • 分析和设计的方式不同:

结构化分析方法通常通过流程图和数据流图,以对系统中的各个业务功能进行分类和展示;而面向对象分析方法则通过UML视图和建模来描述问题和设计的系统。使用的方法不一样,两种方法所获得的结果也不同。

  • 应用场景不同:

结构化分析方法通常用于较为简单的系统,特别是处理事务数据的系统;而面向对象分析方法通常用于较为复杂的系统或科学计算领域,特别是用于在不同对象之间共享和操作数据的系统。

因此,在选择分析方法时,需要考虑系统复杂度、开发人员技能和需求变更等因素。在某些情况下,这两种方法也可结合使用,例如,在大型项目中,可以同时使用结构化分析方法和面向对象分析方法。

三、结构化方法与面向对象方法的融合使用

结构化方法和面向对象方法在软件开发中各有自己的优势,它们的融合使用可以使得软件系统更具灵活性、可维护性和可扩展性。

以下是一些可以将结构化方法和面向对象方法融合使用的实践方法:

  1. 面向对象分析和结构化设计:使用面向对象方法进行系统需求分析和概念建模,识别系统中的对象、类和它们之间的关系。然后,使用结构化方法进行系统设计,包括数据流图、结构图和流程图等,以更详细地定义系统的数据流和处理流程,以及不同对象在数据流处理中的作用。

  2. 结构化模块和面向对象模块的组合:将系统模块化为独立的结构化模块和面向对象模块,结构化模块处理基础的功能和事务数据,而面向对象模块则处理更复杂的对象和业务逻辑。这样的组合可以提高系统的可维护性和代码复用性。

  3. 面向对象技术的结构化实现:在面向对象方法中,可以使用结构化编程的思想和技术来实现对象的方法和功能。例如,可以使用结构化的控制结构(如条件语句和循环语句)来编写对象的方法,并使用结构化的数据结构(如数组和记录)来表示对象的属性。

  4. 使用面向对象语言的结构化风格:在面向对象语言中,可以使用结构化编程的风格和技术来编写代码。例如,可以使用面向对象语言提供的控制结构和数据结构,以一种结构化的方式编写代码,避免滥用继承和多态等面向对象特性。

  5. 过渡策略:在现有的结构化系统中逐步引入面向对象的新特性和设计方法。可以先对现有系统进行面向对象分析和设计,并逐步将部分结构化模块改写为面向对象模块,以此来逐步迁移到面向对象的开发模式。

总而言之,结构化方法和面向对象方法可以相互融合使用,根据具体情况选择合适的方法和技术,以实现高效、可维护的软件系统。灵活运用这些方法,可以根据项目需求和团队的技术水平做出最佳决策。

结构化方法与面向对象方法的相辅相成完成软件开发。

四、结构化方法与面向对象方法的相辅相成完成软件开发

结构化方法和面向对象方法可以相辅相成地完成软件开发。它们各自具有独特的优势,而结合使用可以弥补彼此的不足,提高软件开发的效率和质量。

下面是一些结构化方法和面向对象方法如何相辅相成的例子:

  1. 结构化方法的模块化设计与面向对象方法的封装:

    • 结构化方法强调模块化设计,将系统划分为相互关联的功能模块,通过清晰的接口和数据流来组织代码。这种模块化设计有助于维护、调试和测试。
    • 面向对象方法中的类和对象提供了更好的封装性,可以将数据和方法组织在一起,隐藏内部实现细节并提供良好的抽象。这有助于保持代码的内聚性和可复用性。
  2. 结构化方法的数据流图与面向对象方法的类图:

    • 结构化方法的数据流图可以用于描述系统中数据的流动路径和处理逻辑。这种视图有助于开发人员理解和分析系统的数据流程。
    • 面向对象方法的类图则可以用于描述系统中的对象及其之间的关系和行为。这种视图提供了更抽象和更具有模块化特性的描述,有助于开发人员在设计和实现时更好地定义对象的行为和交互。
  3. 结构化方法的功能分解与面向对象方法的继承和多态

    • 结构化方法通过功能分解将系统划分为更小、更简单的模块,便于开发人员执行任务并确保代码可维护性。
    • 面向对象方法中的继承和多态概念允许开发人员从现有类派生新类,并在运行时根据实际情况选择不同的实现,提高代码的灵活性和可扩展性。

通过结合使用这些方法,可以在系统分析、设计和实现的不同阶段应用合适的技术和工具,充分发挥它们的优势,从而在软件开发中得到更好的结果。在实际应用中,根据具体项目的需求和团队的技术水平,灵活选择和调整方法的使用方式,以达到最佳的开发效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringSecurity+JWT权限认证

SpringSecurity默认的是采用Session来判断请求的用户是否登录的,但是不方便分布式的扩展 虽然SpringSecurity也支持采用SpringSession来管理分布式下的用户状态,不过现在分布式的还是无状态的Jwt比较主流 一、创建SpringBoot的项目 spring-boot-starte…

【giszz笔记】产品设计标准流程【8】

(续上回) 真的没想到写了8个章节,想参考之前文章的,我把链接给到这里。 【giszz笔记】产品设计标准流程【7】-CSDN博客 【giszz笔记】产品设计标准流程【6】-CSDN博客 【giszz笔记】产品设计标准流程【5】-CSDN博客 【giszz笔…

Transformer——encoder

本文参考了b站的Eve的科学频道中的深入浅出解释Transformer原理和DASOU讲AI中的Transformer从零详解。 入浅出解释Transformer原理 Transformer从零详解 前言: 在自然语言识别中,之前讲过lstm,但是lstm有明显的缺陷,就是当文本过…

[SCTF 2021]rceme

文章目录 前置知识可变参数绕过create_function注入无字母数字RCE动态链接库so绕过disable_functions利用php原生类进行文件读取 解题过程 前置知识 可变参数绕过 PHP 在用户自定义函数中支持可变数量的参数列表。在 PHP 5.6 及以上的版本中,由 … 语法实现&#x…

redis的过期策略以及定时器的实现

Redis是客户端服务器结构的程序,客户端与服务器通过网络通信,所以对于keys *这种的操作在大型企业中不太建议,生产环境下的key会非常多,Redis是但现成的服务器,执行keys*的时间非常长,就会导致redis服务器阻…

同为科技(TOWE)桌面PDU插排:一款可以DIY定制的“超级插座”

当今社会,各种电子产品和家用电器已成为人们日常生活中不可或缺的一部分,在带给人们便利的同时,也使得电力使用变得更加频繁和重要。然而,当前市面上很多普通插座由于功能单一、材质粗劣、插口数量受限、充电速度过慢、插头间互相…

子虔与罗克韦尔自动化合作 进博会签约自动化净零智造联创中心

11月6日进博会现场,漕河泾罗克韦尔自动化净零智造联创中心合作协议签约暨合作伙伴(第一批)授牌仪式举办,子虔科技作为联创中心合作伙伴签约,携手共建智能制造,引领行业可持续发展。 图示:子虔科…

QTableView表头Header增加复选框Checkbox

原文出处&#xff1a;Qt 之 QHeaderView 添加复选框_qtableview添加复选框-CSDN博客 这哥们只贴了部分代码&#xff0c;我还是把它弄好分享给大家吧 DTableHeaderView.h #ifndef DTABLEHEADERVIEW_H #define DTABLEHEADERVIEW_H#include <QHeaderView>class DTableHea…

高精度人像背景分割SDK技术解决方案

图像处理技术已经成为企业和个人生活中不可或缺的一部分&#xff0c;特别是在人像处理方面&#xff0c;如何准确、高效地将人物与背景分离&#xff0c;一直是一个技术难题。然而&#xff0c;美摄科技凭借其在AI深度学习领域的深厚积累&#xff0c;推出了一款高精度的人像背景分…

app抓包-突破【单向证书验证代理检测模拟器检测】

0x00 app的普通抓包配置 1.模拟器开启本地以太网代理&#xff0c;设置端口&#xff0c;bp监听以太网系统端口即可 2.科来协议分析&#xff0c;可以获取模拟器进程的网络通讯信息&#xff0c;目标通讯的ip地址 3.封包监听工具&#xff0c;同科来一致&#xff0c;监听的进程即可…

gitlab

Gitlab 安装git yum安装 [rootgit ~]# yum -y install git编译安装 Git官网 #安装依赖关系 [rootgit ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker # 编译安装 [rootgit ~]# tar -zxf git-2.0…

[汇编实操]DOSBox工具: unable to open input file: 文件名.asm问题解决

出错原因1 &#xff1a;将文件放在debug文件下&#xff0c;mount后发现并没有该文件 解决方案 &#xff1a;重启DOSBox&#xff0c;重新mount&#xff0c;直到dir后可以看到该asm文件 出错原因2&#xff1a;DOS系统不支持8位以上的文件名 解决方案 &#xff1a;将文件名改为8…

智能座舱架构与芯片- (14) 测试篇 上

一、 验证平台概要 1.1 测试软件方法论 “软件定义汽车” 的时代&#xff0c;软件在整车制造中的重要性日渐凸显。但不同于其他行业的软件开发&#xff0c;汽车行业有自己独特的软件开发要求。首先是需求严谨、需求层次复杂、需要通过专业的工具进行管理&#xff1b;其次开发…

基恩士软件的基本操作(四,快速编辑plc技巧)

目录 单元软原件注释快速添加 双击单元配置&#xff0c;进入单元编辑器 KV一键添加注释 双击软元件注释 进入软元件编辑界面 &#xff0c;对弹出的列表中软元件打勾点击登录 元件注释就自动添加了 注释收索&#xff0c;快速编辑软元件 自定义注释收索 空软元件快速查找 …

8.2 Windows驱动开发:内核解锁与强删文件

在某些时候我们的系统中会出现一些无法被正常删除的文件&#xff0c;如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉&#xff0c;而所谓的解锁其实就是释放掉文件描述符&#xff08;句柄表&#xff09;占用&#xff0c;文件解锁的核心原理是通过调用ObSetHandleAttri…

PDF文件无密码,如何解密?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。想要解密&#xff0c;我们需要输入正确的密码&#xff0c;但是有时候我们可能会出现忘记密码的情况&#xff0c;或者网上下载P…

人工智能:科技之光,生活之美

在科技飞速发展的今天&#xff0c;人工智能已经深入到我们的生活中&#xff0c;它如同一束璀璨的科技之光&#xff0c;照亮我们生活的每一个角落&#xff0c;使我们的生活更加美好。下面我将从人工智能的领域、应用以及对人工智能的看法三个方面来谈谈它对我们生活的影响。 一、…

c语言-qsort函数的使用-参数带函数指针

一、qsort函数-数组排序 qsort函数是c库里的数组排序函数。会将原始数组进行升序排列。 头文件&#xff1a; #include <stdlib.h> 函数原型&#xff1a; void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *)); 参数&#xff1a…

MySQL数据库:开源且强大的关系型数据库管理系统

大家好&#xff0c;我是咕噜-凯撒&#xff0c;数据在当今信息化时代的重要性不可忽视。作为企业和组织的重要资产&#xff0c;数据的管理和存储变得至关重要&#xff0c;MySQL作为一种关系型数据库管理系统&#xff0c;具有非常多的优势&#xff0c;下面简单的探讨一下MySQL数据…

[补题记录] Coolbits(2019陕西省赛)

URL&#xff1a;https://pintia.cn/problem-sets/91827364500/exam/problems/91827370530 目录 Problem/题意 Thought/思路 Code/代码 Problem/题意 给出 N 个区间&#xff0c;可以从每个区间中选择一个数&#xff0c;问选出的 N 个数的按位与的值最大是多少&#xff1f; …
最新文章