结构化方法与面向对象方法比较
Posted AmorFati
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构化方法与面向对象方法比较相关的知识,希望对你有一定的参考价值。
结构化方法与面向对象方法比较
软件工程离不开软件开发方法,软件开发方法是指在项目投资规模和时间限制内、设计、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发策略。而自20世纪60年代以来,受到开发综合症“软件危机”的影响,软件开发方法不断地快速发展着,产生了许多众所周知的开发方法,比如结构化方法、原型法基于模型的VDM(维也纳开发)方法、面向对象方法等。其中,结构化方法和面向对象方法最具有代表性,在软件开发领域中使用比较广泛,下面我们就来对这两种方法进行说明和比较。
我们先来了解一下什么是结构化方法,什么是面向对象方法。结构化方法顾名思义,更注重结构在软件开发中的作用,它从层次的角度,自顶向下地分析和设计系统。结构化方法包括结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)三部分。总的来说,就是对系统的功能进行分解,形成不同的模块,然后根据具体的模块进行结构化设计和编程,这样就能把一个庞大且复杂的系统分割成较为简单的部分,实现起来更为容易。结构化方法是面向数据流进行需求分析的方法,主要采用的工具是数据流图DFD。大致步骤有两步,首先构造具体的系统设计方案,确定系统的模块结构。第二步即为详细设计,在总体结构的基础上确定每个模块的结构和算法。
图1 数据流图
面向对象(OO)方法是指以面向对象思想为中心进行软件开发的方法总成,面向对象的思想起源于Simula计算机仿真语言。面向对象方法基于面向对象语言,比如Simula语言、Smalltalk语言和现在广泛应用的JAVA和C++语言,进行软件开发。在面向对象方法中,对象和类是其最基本的概念,对象是指系统运行时要研究的事物,它具有一定的状态,实现了数据和操作的结合。类是指具有相同属性和操作的对象的抽象描述。面向对象方法也包括三部分:面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)。现在较为广泛使用的面向对象方法是基于统一建模语言UML,UML主要包括:基本构造块、规则和公共机制。UML常见关系有四种,分别是依赖、关联、泛化和实现。
图二 UML类图举例
对结构化方法和面向对象方法有了一定了解之后我们从思想、原则、软件开发中处理问题的方式来讨论一下这两种方法的区别和联系。
思想上:结构化方法的思想主要有三个方面,第一方面是自顶向下,这是一种分层的思想,从上到下将整个系统分成不同的层次;第二方面是模块化思想,将整个系统按功能分成不同的模块,按模块进行软件开发,模块间由接口相连;第三方面是语句结构化,不再使用GOTO语句,使程序语言形成一定的规范结构,比如循环结构、顺序结构等。而面向对象方法的主要思想显然是面向对象思想,将系统中要处理的问题看作对象,复杂对象由简单对象组成。具有相同属性和操作的对象属于一个类,类之间有类似于结构化的层次,可以有子类,且可以继承父类的全部属性并具有自己的属性和操作。类具有封装性,将内部属性和操作隐藏。面向对象的思想强调抽象、继承和封装。
原则上:结构化和面向对象方法都遵循抽象原则,但其具体内容不同。结构化方法的抽象原则指忽略与系统无关的内容,注重系统本质。而面向对象的抽象是指将面向对象中的对象进行抽象,使其与其他对象区别开来。结构化和面向对象都遵循模块化原则,即将一个复杂的系统按功能划分成较为简单的模块。结构化方法还遵循分解原则,自顶向下进行分层解决。面向对象方法还遵循封装原则和层次原则。封装是指将对象外部特征和内部操作分开,公共部分只能看到对象的外部特征。层次由抽象集形成,包括类型层次和结构性层次,它有助于发现抽象关系,理解问题本质。
处理问题的方式上:结构化方法在软件开发中是以过程为中心的,是面向过程的开发方法;面向对象强调对象与对象间的关系,更符合人们面对客观世界时处理问题的思维。结构化方法把客观世界的问题抽象成计算机可以处理的过程,用系统科学的方法来解决问题;面向对象方法则是用计算机模拟客观世界中的事物,更加直观。结构化方法通过程序处理数据,各模块间存在控制关系;面向对象的数据和代码是封装的,其它对象不能修改其数据,只能由自身的函数完成。这两种方法都用较为容易实现的模块组成较为复杂的系统整体。
从这三方面讨论了结构化方法和面向对象方法的区别和联系之后,我们来总结以下两者各自的优缺点。结构化方法的优点是考虑问题的方式较为合理,先确定主要系统功能,然后逐层深入,由简到难,逐渐将一个大致的总体结构具体化,最终全部实现其功能。结构化的模块化使得问题难度降低,开发软件时思路更清晰,,编写的程序也更加简明,可读性更高。面向对象方法的优点在于其开发软件的思维与人类思维方法一致,用户更容易理解。而由于面向对象的封装性,局部的改变不会影响整体系统的功能,使得管理人员调试维护起来也很方便,可靠性也更高。而面向对象方法也使用了模块化的思想,将复杂问题分解成独立的小问题,降低了难度和成本。
结构化由于要对一个整体问题不断分解,要处理的条件和信息也会越来越多,有时候会给开发人员编程时造成麻烦,这需要他们有能从整体从全局看待问题的能力,这也使得结构化方法能处理的复杂问题难度有一定的限制。而且由于软件要不断发展,用户的需求也在不断提高,系统的功能模块需要修改,结构化方法开发的系统会由于局部修改而发生较大的变化,即有修改时需要重新设计,开发周期太长,不利于维护。面向对象虽然对于用户使用起来很方便,但对于开发人员抽象对象的能力有很高的要求。对于对象的建立不但要准确,还要全面,并且符合模块的要求,若整体模块划分不合理,对功能会有很大的影响。面向对象的封装性也给错误定位带来了一定的困难,出错时需要查找每个模块是否有故障。此外,由于面向对象的模型很复杂,UML图需要一定的专业知识才能看懂,使得在与客户或者用户沟通时有一定的难度。
软件系统的开发需要选择适合的方法,面向对象是现如今软件开发的主流方法,而结构化方法的数据流需求分析的特点在信息管理领域还有一定的应用。软件开发中从来没有过时与否之说,我们所做的努力都是为了提高软件质量、降低开发成本,充分满足用户需求。所以我们不能盲目追求新思维、新方法,只要是符合我们实际开发要求,就可以使用,或者将多种方法混合使用,比如既需要处理实时信息又要数据库支持同时还有大量操作请求的系统,就可以在面向对象方法为主体的系统中嵌入部分结构化方法。我们在实际的软件开发过程中要根据具体情况选择要使用的开发方法,做出合适的选择,应用到开发中。
参考文献:
[1] 张莉,裘国永. 结构化方法与面向对象方法的比较分析[J].陕西师范大学学报(自然科学版) 2010 29。
[2] 林玲. 结构化方法与面向对象方法在建模中的应用与比较[J]. 机电技术 2010:26-30.
[3] 周民,王秀丽. 结构化方法与面向对象方法结合方案的探讨[J]. 科技创新导报 2012.
以上是关于结构化方法与面向对象方法比较的主要内容,如果未能解决你的问题,请参考以下文章