对比描述结构化与面向对象软件开发方法,说明两种方法互补使用的方法

发布时间:2019-08-08 12:39:33

对比描述结构化与面向对象软件开发方法,说明两种方法互补使用的方法

推荐回答

软件工程之结构化方法与面向对象方法之比较与结合

  软件开发方法指,在项目投资规模和时间限制内,设计、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发的策略。随着20世纪60年代,计算机软件、硬件发展不均衡,使大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题,引发了“软件危机”。为了同时提高软件效率和质量,软件开发方法不断革新。经过几十年的研究和应用,两种基于相应的程序设计思想和语言的软件开发方法,结构化方法与面向对象方法,成为了主流的开发方法之一,广泛地使用于软件工程。

  结构化方法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。相应地,面向对象方法包括面向对象分析(Object-Oriented Analysis,简称OOA)、面向对象设计(Object—Oriented Design,简称OOD)和面向对象程序语言(Object-Oriented Program Design,简称OOP)。两种软件开发方法从起源、思想、分析、设计,到程序设计、扩展重用、应用等各个方面有着许多的联系和区别,下文我将对二者进行比较分析。两种方法针对不同的工作环境和应用场景,各具优势,也都有所不足,我也将讨论二者在软件工程中的结合,以期产生更好的效果。

(一)从起源上看

  结构化方法与面向对象方法都起源于相应的程序设计思想和语言。20世纪60年代后期,《程序结构理论》和《GOTO陈述有害论》的提出,证明了任何程序的逻辑结构都可以用顺序结构、选择结构和循环结构来表示,确立了结构化程序设计思想,产生了如FORTRAN、PASCAL、C等语言。结构化方法把对程序的分析、设计,延伸至对项目工程的分析、设计,结合程序设计语言的技术支持,得以产生和发展。

  20世纪80年代,随着应用系统的日趋复杂、庞大,结构化开发方法在工程应用中出现了一些问题。同期,面向对象程序设计思想经过20年的研究和发展逐渐成熟,一大批面向对象语言相继出现,面向对象方法自产生就广受青睐。90年代中期,互联网兴起,JAVA语言因跨平台特性得以蓬勃发展;21世纪初,不受限于时空的联合开发成为常态;今天,移动APP市场火爆,Andriod开发成为热点。面向对象方法已经成为软件开发方法的中坚力量。

  结构化方法和面型对象方法的起源和发展具有模式一致性:

图一:软件开发方法发展模式

(二)从思想上看

  结构化方法承袭了结构化程序设计的思想,把待解决的问题看作一个系统,用系统科学的思想方法来分析和解决问题。结构化方法遵循抽象原则、分解原则和模块化原则;以数据和功能为中心;以模块为基本单位;以算法为程序核心;强调逐步求精和信息隐藏。

  面向对象方法的思想是模拟了客观世界的事物以及事物之间的联系。面向对象以类取代模块为基本单位;通过封装、继承和多态的机制,表征对象的数据和功能、联系和通信;通过对对象的管理和对象间的通讯完成信息处理与信息管理的计算和存储,实现软件功能。

  对于结构化方法,模块由函数实现,完成对输入数据的加工和计算,数据和功能是分离的;而面向对象把数据和功能封装在对象中,形成一个整体。两种方法在数据和功能上的不同处理是其思想上的本质差别。

图二:结构化思想和面向对象思想

(三)从分析上看

  建立模型是为了更好地理解要模拟的现实世界,是软件开发方法的核心问题。在结构化方法中,使用SA构建系统的环境模型和逻辑模型,实现模型的主要工具有数据字典(DD)、ER图和数据流图(DFD)。数据字典是一个包含所有系统数据元素定义的仓库;ER图描述了数据之间的属性及联系;数据流图是描述信息流和数据从输入到输出变换,并展示系统和外部的接口、数据的输入和输出以及数据的存储的应用图形技术[1]。SA的前提条件是需求分析,建模过程是迭代分解需求、不断细化应用的过程,即数据流图的分解从顶层图开始,按照每个加工对应一个子图的分解原则,逐层分解为0层图、1层图等。

  面向对象方法使用OOA定义类,对现实世界建模。OOA的主要任务是要在问题域上构建具有主题层、对象层、结构层、属性层和服务层的OOA模型,实现模型的主要工具有用例图(Use-Case)和类图(Class Diagram)。用例图从用户角度描述系统功能,并指出各功能的操作者,是对需求分析的整理;类图定义了类的组成(属性和服务)、类的结构和类间的关系,确定并划分系统中的类。经过OOA,系统的静态模型建立起来。

  相对于结构化方法使用DD、ER图和DFD分别描述数据和功能(尽管二者存在相互参考),面向对象方法中,无论是用例图还是类图,数据和功能的描述总是并行的。

图三:数据流图

                           

             

(四)从设计上看

  在结构化方法中,使用SD构建系统的行为和功能模型,实现模型的主要工具有模块结构图(SC)和程序流程图。模块结构图说明了系统的模块的划分、模块的功能、模块间的数据传递及调用关系。根据数据流图,我们能够映射出相应的软件的上层模块结构;结合数据流图,我们可以逐步分解上层模块,设计出中、下层模块;对于得到的全部模块,我们需要设计模块基本的内部结构和外部接口及对模块结构进行优化。进一步,则是针对每一个模块设计程序流程图,整理优化,归纳算法。SD依然是对项目系统的进一步分解求精的过程,把模型从逻辑级,细化到模块级,再细化到程序级。

  而OOD不只是对OOA的细化,更主要的,构建了系统的动态模型,实现模型的主要工具有交互图(Sequence Diagram)、状态图(State Diagram)、活动图(Activity Diagram)。和模块相比,对象最大的不同是具有“活性”,突出表现在对象具有状态和对象间能够通讯。交互图描述对象间的交互关系,显示对象之间的动态合作关系,强调对象之间消息发送的时间顺序;状态图描述对象的所有可能状态,以及事件发生时状态的转移条件;活动图描述为满足用例要求所进行的活动以及活动间的约束关系,用于识别并行活动,以提高系统效率[2]。

  从设计方面,我们可以比较明显地看出结构化和面向对象的区别。结构化方法的核心是程序,从分析到设计,其实是从抽象到具体,从模糊到清晰地实现程序的过程;而面向对象方法的核心是功能,分析的是对象,设计的是行为,程序设计和系统设计相对分离。

以上问题属网友观点,不代表本站立场,仅供参考!