首页 > 代码库 > 结构化方法与面向对象方法之比较
结构化方法与面向对象方法之比较
一、 引言
随着计算机软硬件各方面的飞速发展,计算机领域的观念和方法日新月异。70年代, 人们都认为结构化方法是最好的系统开发方法,然而,随着计算机应用技术的不断发展,结构化方法越来越不能适应日益复杂庞大且高速发展的信息系统的建设。80年代以来,面向对象方法(ObjecOrientedMethodology)正引起越来越强烈的关注和重视,并在业内掀起一股新的面向对象编程浪潮。那么两种方法究竟分别是怎样的方法,有孰优孰劣呢?
二、 结构化方法
1、定义
结构化方法也称SD方法,是一种传统软件开发方法。这个方法的意思是将一个较为复杂的问题的解决过程分为若干阶段进行,分阶段的过程则是一个自顶向下,由抽象到具体,将问题逐层分解的过程,最后的实现则是自底向上,先局部后整体的过程。
2、过程
开发过程分为以下五个阶段:
系统规划阶段:该阶段的范围是整个业务系统,目的是从整个业务的角度出发确定系统的优先级。
系统分析阶段:主要包括可行性分析和需求分析。其范围是列入开发计划的单个信息系统开发项目。目的是分析业务上存在的问题,定义业务需求。
系统设计阶段:系统设计的目的是设计一个以计算机为基础的技术解决方案以满足用户的业务需求。总体设计的主要任务是构造软件的总体结构;详细设计包括人机界面设计、数据库设计、程序设计。
系统实施阶段:系统实施的目的是组装信息系统技术部件,并最终使信息系统投人运行。工作内容为程序设计、程序调试、用户培训、新旧系统之间的切换等。
系统运行与维护阶段:目的是对系统进行维护,使之能正常地运作。
3、内容
结构化方法的内容包括结构化分析、结构化设计和结构化程序设计三部分。
3.1结构化分析
结构化分析包括将系统概念转换为用数据及控制的来表示,也就是转换为数据流程图。结构图是指以模块的调用关系为线索,用自上而下的连线表示调用关系并注明参数传递的方向和内容,从宏观上反映软件层次结构的图形,数据流程图(Data Flow Diagram,DFD/Data Flow Chart),是描述系统数据流程的工具,它将数据独立抽象出来,通过图形方式描述信息的来龙去脉和实际流程。基本成分包括包括系统的外部实体、处理过程、数据存储和系统中的数据流四个组成部分。
外部实体是指系统以外和系统相关的人或事物,能够说明数据的来源和去处。
处理过程是对数据进行逻辑处理,可以用来改变数据值。
数据流是指处理过程的输入输出,属于中间数据。
数据存储是指数据保存的地方。
3.2结构化设计
结构化设计,亦称SD(Structured Design),是一种面向数据流的设计方法,目的在于确定软件的结构。结构图(SC: Structure Chart ),反映系统的功能实现以及模块与模块之间的联系与通信,即反映了系统的总体结构。注意:数据流DFD是软 件生命周期的定义阶段中的需求分析方法中结构化分析方法的一种,此外还有数据字典(DD)、判定树和判定表,而SC是开发阶段中概要设计使用的方法。
3.3结构化程序设计
程序设计的时候,应该首先考虑整体,后考虑细节。对复杂的问题逐步进行细化,模块化。
三、 面向对象方法
1、定义
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。直接面对问题域中客观存在的事物来进行软件开发, 就是面向对象。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
2、基本步骤
(1)分析问题空间和解空间的全部对象及其属性
(2)确定应施加于每个对象的操作,即对象固有的处理能力;
(3) 分析对象间的联系,确定对象彼此间传递的消息;
(4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;
(5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;
(6) 确定类之间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;
(7) 设计每个类关于对象外部特性的描述;
(8) 设计每个类的内部实现(数据结构和方法);
(9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。
3、OOA方法
即面向对象的分析方法,是指在系统的开发过程中进行了业务调查之后,按照面向对象的思想来分析问题。运用OOA方法对调查结果进行分析处理的时候,一般按照抽象(为了某一分析目的而集中精力研究对象某性质)、封装(信息屏蔽)、继承(获得已有的性质而不重新定义)、相关(把某时刻或相同环境下发生的失误联系在一起)、消息通信(对象之间互传信息)。
4、OOD方法
即面向对象的设计方法。主要作用是对OOA分析的结果作进一步的规范化整理。主要包括规格的求精过程、模型和数据库。
规格的求精过程包括两个方面:一是要根据面向对象的概念模型整理分析所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和重复的内容等。二是进行分类整理,以便于下一步数据库设计和程序处理模块设计的需要。
四、结构化方法与面向对象方法的特点比较
1、共同点
我们先分析二者之间的共同点。
首先,两种方法都涉及到分解和抽象。分解,就是把问题由大化小,由难化易。设计每一层的内容时只需要考虑本层各个元素之间的关系,不需要考虑每一个元素的具体实现。逐层解决问题是解决较大较复杂问题的必经途径,毕竟,没有人可以不经过一步一步的思考直接在脑海中解决一个很难的问题。在这点上,面向对象方法和传统结构化方法是完全一样的。
就我自己来说,我写的第一个规模较大的过程化程序就是编译技术课大作业,采用了递归下降子程序法。这个方法就是典型的
其次,在局部化和重用性这两点,两种方法也是一致的。局部化是指不希望软件代码中某一部分过多影响整个程序。在结构化方法中,局部化主要体现在代码与数据的分隔化。也就是程序各部分除了必要的数据信息交流之外,彼此隔离互不影响。而面向对象方法则采用了数据和代码的封装,提高了程序的可靠性和安全性。
接下来再说两者之间的不同。
首先是两者在处理问题时的出发点不一样。结构化方法强调的是模块化、过程化,是面向过程的开发方法。而面向对象方法强调的是吧问题域的要点直接落实到对象以及对象之间的接口上。
其次,结构化方法处理问题的基本单位是模块,而面向对象方法处理问题的基本模块是类,着重于类内容的设计和类之间的继承和发展。
再有,结构化方法设计的程序理论上任何代码都可以访问能够访问的任何数据。而面向对象程序强调封装,非public的数据和方法是有访问限制的。
五、个人体会
以上内容是我通过查阅资料、阅读文献的方法学来的。我还没有正式表达我对于所学内容的个人体会。
就我自己来说,我写的第一个规模较大的过程化程序就是编译技术课大作业,采用了递归下降子程序法。这个方法就是典型的结构化方法设计出的程序。语言文法本身可以看作是对编译程序由大化小的指向标。自顶向下对每一种语法成分都编出一个子程序就是递归下降子程序的核心思想,设计每一个子程序的过程,也是将问题分解,由大化小的过程。最终,这种方法也为我完成大作业带来了很大的便利。
至于面向对象方法,我想不必多说了。我们在大二下学期编写了一系列规模不小的面向对象程序。以电梯程序为例,我们首先将问题归结为电梯、调度器、乘客三个较为具体的类,然后又理清了三者之间的关系:乘客产生请求,调度器为三部电梯调度请求,电梯执行请求,三者之间实质上就是关于请求数据不断进行交互,形成一个可执行的系统。在又一次学习了面向对象软件开发方法之后,回顾过去这些变成经历,让我对于面向对象方法的认识进一步加深了。
至于两种方法哪一种更好,我认为这很难说。不同的问题,适合用不同的方法进行解决。例如电梯系统,把它想成几种不同部件之间运行、交互显然会更容易让编程者掌握问题的本质。如果把它想成一个流程图也不是不可以,但流程图会非常复杂,还很容易画错或者有遗漏。而对于编译程序,我们按照文法进行过程结构化的分析,显然更为合适。若真要说按照面向对象的思路来写编译器,无非就是语法分析器、符号表等类及其交互的问题。而语法分析占据了问题的绝大部分,这时把它们按对象来考虑,反而感觉不如按一个个模块、过程来考虑,这就是我的一些思考。
六、参考文献
《传统的软件工程方法与面向对象的软件工程方法比较》——刘红霞、刘红艳
《结构化程序设计方法与面向对象程序设计方法之比较》——喻梅
结构化方法与面向对象方法之比较