结构化方法和面向对象方法的比较

摘要:
结构化编程方法一直是程序员的基本编程方法,近年来流行的面向对象方法也受到人们的青睐。本文介绍了编程世界中两种主要编程方法——结构化方法和面向对象方法的分析、设计和应用。结构化方法和面向对象方法的使用与特定的开发环境和开发方法有关。例如,结构化方法更适合于传统的软件工程,而敏捷软件开发方法中的面向对象开发方法更受欢迎。

结构化方法和面向对象方法的比较

翁松秀

北京航空航天大学

    摘要:编程之精髓在于编程思想,而不同的编程方法有不同的编程思想。结构化程序设计方法一直以来都是编程人员基本的编程方法,而近年来流行的面向对象方法也备受人们青睐。文章通过介绍编程世界的这两种主要编程方法,结构化方法和面向对象方法的分析、设计和应用。并在最后对两种方法进行比较分析,比较结构化方法和面向对象方法编程思想的异同和两种方法的应用。

关键词:结构化方法;面向对象方法;编程思想;再抽象;再模块化;

   前言

  结构化方法和面向对象方法是当前软件开发最常用的方法。基于“瀑布模型”的软件开发方法中,以软件架构为核心,采用结构化设计和分析方法将软件开发的生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护六个基本阶段。而在通过迭代式和增量式进行开发的敏捷软件开发方法中,主要采用面向对象的设计和分析方法。结构化方法与面向对象方法的使用,与具体的开发环境和开发方法有关,如传统软件工程中更适合用结构化方法,而敏捷软件开发方法中面向对象开发方法更受青睐。

  1   结构化方法

  结构化编程思想由艾慈格·迪杰斯特拉在1976年在《GOTO陈述有害论》中提出,1975年赖瑞·康斯坦丁和爱德华·尤登提出结构化设计,1978年汤姆·迪马克和爱德华·尤登等在1975年提出结构化分析,后来逐渐被完善,形成现在软件开发方法中主要采用的结构化方法。结构化方法从功能上对系统进行划分,将系统按功能划分成各个模块,将子模块编写成子程序,通过子程序之间的结构和层次之间的耦合来解决复杂的问题。结构化方法按软件周期可划分为结构化分析、结构化设计和结构化实现,这里主要讨论SA和SD。

  1.1 结构化分析(Structured Analysis)

  结构化分析是通过数据来对需求进行分析,功能模块之间通过数据进行联系,采用的建模技术有:数据流图DFD(Data Flow Diagram)、ERD(Entity Relation Diagram)和数据字典DD(Data Dictionary)等。数据在结构化分析方法中举足轻重,就相当于血管之于人体,系统的各个模块通过数据的传递进行沟通和联系,导致了功能模块的强耦合性,模块之间的耦合性降低了结构化程序的可重用性和可维护性。主要分析步骤如下:

  ①  分析当前的情况,做出反映当前物理模型的DFD;

  ②  推导出等价的逻辑模型的DFD;

  ③  设计新的逻辑系统,生成数据字典和基元描述;

  ④  建立人机接口,提出可供选择的目标系统物理模型的DFD;

  1.2 结构化设计(Structured Design)

  结构化设计阶段将分析阶段得到的目标系统物理模型的DFD表示的具体信息转化成程序结构的设计描述,过渡成软件结构。在这个过程中采用的建模技术有:系统结构图SSD(System Struct Diagram)。这个过程分两步完成,第一步是从分析得到的结果出发,构造一个设计方案,决定系统功能模块的结构。第二步进行详细设计,确定每个功能模块的内部控制结构和算法,最终产生每个功能模块的程序流程图。具体步骤如下:

  ①   评审和细化数据流图;

  ②   确定数据流图的类型;

  ③   把数据流图映射到软件模块结构;

  ④   基于数据流图逐层分解高层模块,设计中下层模块;

  ⑤   对模块的控制结构和算法进行优化;

  ⑥   描述模块接口;

  1.3 结构化方法的应用

  结构化方法对需求变化的适应能力比较弱,功能的改变甚至会牵一发而动全身,但由于结构化分析和设计对系统进行完整的架构和具体功能的分析以及实现的各个阶段严谨的测试,所以结构化程序可靠性高。基于结构化分析、设计和实现中的这些主要优点和缺点,结构化比较适合于像操作系统、实时处理系统等这样以功能为主的系统。比如绝大多数操作系统都是以结构化语言C语言写的。

  2   面向对象方法

  面向对象OO(Object Oriented)方法把面向对象的思想应用于软件开发,将系统中的数据和相关操作进行分类和封装,抽象成一种新的数据结构——类,并在系统的实现过程中实例化,实例化的对象与客观实体有直接对应关系,通过对象的属性和行为,以及对象之间的关系来解决实际问题。面向对象方法吸收了结构化的基本思想和优点,在数据抽象的基础上添加对操作的抽象,使面向对象程序具有高重用性。面向对象方法其实就是结构化的再抽象和再模块化。

  2.1 面向对象分析(Object Oriented Analysis)

  面向对象分析阶段通过分析,确定问题空间和解空间中所有对象及其属性,进而确定每个对象的操作,即对事务的处理能力,然后通过对象之间的行为来确定对象之间的关系。具体步骤如下:

  ①   确定问题域和解空间;

  ②   区分类和对象;

  ③   区分整体对象以及组成部分,确定类的关系以及内部结构;

  ④   定义类的数据(属性)和操作(处理事务的行为);

  ⑤   确定附加的系统约束

  2.2 面向对象设计(Object Oriented Design)

  面向对象设计阶段主要对分析阶段的结果进行进一步的规范化整理,以便后面的具体实现。OOA阶段和OOD阶段没有明显的划分界限,两者相互衔接,最能体现出这种关系的是近年来出现的新的软件生命周期模型——喷泉模型。如图(1)

结构化方法和面向对象方法的比较第1张                                                                                           图(1)

  面向对象设计阶段的主要步骤如下:

  ①   改进和完善分析阶段对系统的分析结果;

  ②   设计交互过程和用户接口;

  ③   设计任务管理、子系统以及任务之间的协调方式;

  ④   设计全局资源,确定任务或者子系统的资源分配;

  ⑤   设计对象;

  2.3 面向对象方法的应用

  面向对象方法从问题的模型开始,模拟人对事物的认识对事物进行分类,进而识别对象,通过整理对象的内部结构和对象之间的关系不断细化问题,它的本质就是敏捷开发方法中的迭代和递增。开发过程通过不断地对功能进行反复的迭代,使系统的功能不断完善。所以面向对象方法适用于SCRUM、XP(极限编程)、CRYSTAL(水晶编程)、PDD(特性驱动开发)等敏捷软件开发。

  3   结构化方法和面向对象方法的比较

  3.1 编程思想的比较

  软件开发的过程就是人们使用各种计算机语言将现实世界的问题翻译到计算机世界,可描述为图(2):

结构化方法和面向对象方法的比较第2张

图(2)

  结构化方法的编程思想是自上而下,逐步求精,按系统的功能进行模块化设计,将一个复杂和完整的系统按功能分解成小的模块,模块内由顺序、分支和循环等基本控制结构组成,各模块的功能由子程序进行实现。如图(3)

结构化方法和面向对象方法的比较第3张

图(3)

  而面向对象方法通过模拟人类日常的逻辑思维中经常采用的思想方法和原则,将系统中的事物进行抽象、分类、继承和封装。通过抽象出来的类之间的行为关系来确定整个系统的联系,并在系统中实例化需要的对象,在系统的设计中尽可能地运用人类的思维方式。与结构化相比面向对象更符合人们对事物和解决问题的过程和思维方法。如图(4)

结构化方法和面向对象方法的比较第4张

图(4)

  3.2 应用的比较分析

  结构化开发方法开发前期对系统的功能需求和非功能需求进行完整的架构,使软件具有高可靠性。开发过程自上而下,按照严谨的软件开发生命周期:计划、分析、设计、编码、测试和维护逐个阶段进行开发,各个阶段相互衔接,每一个阶段都要通过严格的审查,测试通过才能进入下一个阶段,保证了软件的高质量。所以比较适合于像操作系统、实时处理系统等这样以功能为主的系统。而由于面向对象方法迭代和递增的本质,所以面向对象方法更适合于在敏捷软件开发中使用。如SCRUM、XP(极限编程)、CRYSTAL(水晶编程)、PDD(特性驱动开发)等。

参考文献:

[1]雷西玲,谢天保,何文娟. 面向对象方法与结构化方法的比较. 2001

[2]邵维忠,杨芙清. 面向对象的系统分析. 1998

[3]蔡希尧. 面向对象技术. 2001

[4]翁松秀. 敏捷软件开发与传统软件工程概述比较. 2016

[5]张莉,裘国永. 结构化方法与面向对象方法的比较分析. 陕西师范大学学报. 2001

 

https://www.cnblogs.com/maya389069192/p/6166238.html

免责声明:文章转载自《结构化方法和面向对象方法的比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转:jmeter性能测试---登录百度进行搜索Source Insight 常用设置和快捷键大全下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言的面向对象设计 —— 对 X264/FFMPEG 架构探讨

类似题目的文章已经不新鲜了,这里,我仅仅总结自己的一些代码经验,结合两款在视频开发领域比较常用的开源软件探讨C语言的应用问题。 1.为什么要用C语言 曾几何时,我也不熟悉C,最早接触C的是在大学四年级,当时已经学过pascal,过二级也是pascal。接着走上了Delphi的路,多方便的软件,写写画画,程序就出来了,本科的毕业设计就是这样出来的MIS,在当...

Spark在美团的实践

https://tech.meituan.com/2016/03/31/spark-in-meituan.html 本文已发表在《程序员》杂志2016年4月期。 前言 美团是数据驱动的互联网服务,用户每天在美团上的点击、浏览、下单支付行为都会产生海量的日志,这些日志数据将被汇总处理、分析、挖掘与学习,为美团的各种推荐、搜索系统甚至公司战略目标制定提供数据支...

SimpleScalar分析

1.编写测试程序 #include <stdio.h> int main() { printf("Hello world!\n"); return 0; } 2.编译程序 bin/sslittle-na-sstrix-gcc hello.c 含义:用simplescalar的编译器对hello.c进行编译,以生成能够在模拟器中运行的可执行...

《JavaScript面向对象编程指南》

第一章、引言 1.5 面向对象的程序设计常用概念 对象(名词):是指“事物”在程序设计语言中的表现形式。 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作。 这些对象特征就叫做属性(形容词),动作称之为方法(动词)。 类:实际上就是对象的设计蓝图或制作配方。类更多的是一种模板,而对象就是在这些模版的基础上被创建出来的。 封装:主要...

基于功能树分析(FTA)功能级FIT硬件测试方法

共创力研发咨询/杨学明 1 基于功能树分析(FTA)的功能级FIT测试方法原理介绍 功能FIT分析方法的提出,是基于对FMEA分析方法的如下疑问: a) 利用FMEA分析做FIT测试时,智能控制整个芯片失效,或者控制芯片部分功能的随机失效,但是无法模拟器件单个功能或者是特定组合功能的失效。而对于产品系统而言,对于整体失效有检测和保护,不能等同于部分失效也有...

[转载] 常用CASE工具介绍

(因为学习ERWin无意发现的此文章,非常不错,转载一篇!) 一,概述 今天, 代码变得日益简单, 在Model的指导下, 思想, 设计, 分析都变得异常重要。企业业务建模工具, 产品非常多, 特别是在MDA日益流行的今天. WorkFlow是典型的业务及流程建模。 二,软件开发CASE工具简介 (一)图稿绘制: 1,visio:这是目前国内用得最...