[架构之路-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.mzph.cn/news/157282.shtml

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

相关文章

【Linux入侵日志排查】

在Linux系统中,不同的服务和应用程序可能会产生不同格式的日志记录。以下是一些常见类型的日志文件及其格式说明: 以下是一些常见的 Linux 日志字段格式说明,以及具体的示例: /var/log/auth.log:此日志文件包含与身份…

px4+vio实现无人机室内定位

文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件软件机载电脑: Intel NUC系统:Ubuntu 20.04相机: Intel Realsense D435iros:noetic飞控:Pixhawk 2.4.8固件&am…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十七)

介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

[EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件

硬件型号驱动情况主板ASUS EX-B365M-V5处理器Intel(R) Pentium(R) Gold G5400 CPU已驱动内存8GB Kingmax Dual Channel已驱动硬盘Vaseky V800 128GB SATA已驱动显卡Radeon RX 560已驱动声卡Realtek ALC887已驱动网卡RTL8111已驱动无线网卡蓝牙Killer(R) Wi-Fi 6 AX1650需要自行…

服务器系列之 成功解决 com.jcraft.jsch.JSchException: Auth fail

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

如何使用rclone将腾讯云COS桶中的数据同步到华为云OBS

在多云策略与数据迁移趋势下,企业往往需要将数据在不同云服务提供商之间进行迁移。本文介绍如何使用rclone工具同步腾讯云COS(Cloud Object Storage)桶中的数据到华为云OBS(Object Storage Service)。先决条件是您已经…

【SQL SERVER】序列

原来sqlserver也能用序列呀,我原来以为只有oracle有呢 浅薄了~ 创建序列 CREATE SEQUENCE A_SequenceSTART WITH 1INCREMENT BY 1;使用序列 oracle使用序列是A_Sequence.NEXTVAL,而sqlserver是NEXT VALUE FOR A_Sequence CREATE TABLE A_TABLE (ID IN…

PAT甲级 1023 高精度

1023 Have Fun with Numbers 分数 20 Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the…

vb圣经加注释

Imports System.Data.OleDbPublic Class Form1小目录简写Dim jiuyue As String() {"创", "出", "利", "民", "申", "书", "士", "得", "撒上", "撒下", "王上&quo…

Python---函数的应用案例(多个)

案例:使用print方法打印一条横线 print(- * 40) 案例:对上个案例进行升级,可以根据输入的num数值,生成指定数量的横线 def print_lines(num, length):""" print_lines函数主要作用用于生成多条指定长度的横线&…

cocoapods使用

macOS/iOS系统上做原生开发,需要用到的开源包管理工具:cocoapods。 类似: 语言包管理工具官方仓库镜像仓库私有仓库jsnpm,cnpm,pnpm,yarnpythonpip c#nugetjavagradle,mavenrubygemoc/c/swiftco…

快速幂极简写法快速幂求逆元

快速幂原理介绍 快速幂模板 int qmi(int a, int k, int p) {int res 1;while (k) {//后面的a其实是底数与其指数的运算结果了,是不断迭代的//第一个a其实就是a的2的0次方if (k & 1) res (res * a) % p;a (a * a) % p;//注意,a是一个不断变化的过…

Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

TFTP服务器 TFTP(Trivial File Transfer Protocol)即简单文件传输协议,是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…

Android 获取设备内存和外存

参考 Android 获取设备运行内存信息 https://blog.csdn.net/b1tb1t/article/details/131290808 Android 获取设备外存 // 全部外存, 和手机标称不一样public static long getTotalStorage() {File path Environment.getExternalStorageDirectory();StatFs stat new StatFs(p…

Qt TCP相关的一些整理:客户端常见操作 socket 通信 network

目录 1、相关的库和类 2、一些常用的API 3、帖子用到的完整核心代码: 1、相关的库和类 Qt下使用tcp协议,需要在工程的pro文件中添加: QT network 需要添加network网络库之后,才可以使用对应的类 客户端的类头文件&#xf…

python趣味编程-5分钟实现一个简单弹跳球游戏(含源码、步骤讲解)

简单的Python弹跳球程序是使用Python编程语言开发的。 Python 中的弹跳球游戏是 使用 Tkinter 和图形用户界面 (GUI) 设计的,它是一个桌面应用程序。 Python 中的弹跳球游戏代码使用Canvas 在 Python 中绘制对象和随机模块。

UVM项目笔记——通过寄存器模型实现AHB接口的寄存器读写(内含源码)

目录 1.前言 2.DRIVER实现 2.1 AHB二级流水时序 2.2 “队列错位法”实现driver 2.3 driver代码 2.4 仿真log与波形 2.5 多级流水拓展方法 1.前言 UVM driver在接口协议的实现中起着非常重要的作用,因为它一端处理基于类的事务级sequence,另一端处…

45-设计问题-最小栈

原题链接: 198. 打家劫舍 题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&a…

Pytorch从零开始实战10

Pytorch从零开始实战——ResNet-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet-50算法实战环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook,使用Python3.8&#xff0c…

QT专栏2 -Qt for Android

#2023年11月18日 # Qt version 6.6 JDK17 JDK 安装 Java Downloads | Oracle 设置环境变量 鼠标右键我的电脑,出现如下界面 Qt配置 改用JDK18,没有乱码,由于不影响APK产生。 做了好多尝试,更换JDK版本(11,18,19,21)&…