一、基本概念
1、结构化方法
结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。
基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
2、面向对象方法
面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。
基本思想:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。
二、两者对比
1、基本单位不同
结构化方法的基本单位是模块。
面向对象方法的基本单位是对象。
2、分析方法不同
结构化分析方法是一种面向数据流而基于功能分解的分析方法, 在该阶段主要通过采用数据流程图、编制数据字典等工具, 描述边界和数据处理过程的关系, 力求寻找功能及功能之间的说明。
面向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建立起问题域的简洁、精确、可理解的面向对象模型, 为后续的面向对象设计和面向对象编程提供指导。面向对象分析通常建立三种模型: 对象模型、动态模型、功能模型。其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表示瞬时的、行为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。
3、各自局限
(1)结构化方法
i.不能直接反映问题域: 结构化分析方法以数据流为中心, 强调数据的流动及每一个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽一些对问题域的理解偏差。
ii.数据和代码缺乏保护机制: 一个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问, 这给程序设计带来了不安定因素, 一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。
iii.分析和设计体系不一: 结构化分析的结果是数据流图, 结构化设计的结果是模块结构图。 二者的表示体系不一致, 分析文档很难与设计文档对应, 所以从分析到设计的“ 转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。
iv.开发过程复杂: 由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。 对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序, 而且往往不能对数据的安全性进行有效的控制。 如果程序进行扩充或升级, 也需要大量修改函数, 因此结构化程序的可重用性不好。 要使数据与程序始终保持兼容, 已成为程序员的一个沉重的负担。
(2)面向对象方法
i.开发过程管理要求高:在面向对象分析过程中,需要多次迭代,开发过程要经过“修改-评价-再修改”的多次反复。
ii.系统复用性低:面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障代价大,对于需求变化频繁的系统,很难得到一个高度可复用的面向对象软件系统设计。
iii.开发人员易将原型取代规范系统分析:缺乏规范化的文档资料,不易于后期维护。
三、个人体会
在用C语言写时,我需要想的是,我要做什么事情,我需要完成什么功能,自然,完成不同的功能就要用到不同的模块;而在学习JAVA时,我需要思考的是,有几个对象,这个对象需要什么属性,需要完成什么事情,与其他对象之间又有什么联系。
所以在设计C语言的结构时,我是这么一层一层,逐渐细化设计的,功能之间是利用数据流进行联系。在真正实现时,如果发现哪个功能还不完善或可以更加细化时,需要由下往上依次修改子模块,工作量比较大。
而在设计JAVA语言时,我基本是利用UML图设计,不存在层次关系,每个类就是一个对象,类里包括了对象的属性和对象可以做的事情,类之间通过发送请求来进行通信。我感觉实现起来比C语言更为方便,它的继承机制很好地提高了代码的复用性,并且在进行功能扩展时,仅需要设计新的对象,或在对象原有基础上进行扩展。
结构化和面向对象是软件工程的程序设计方法中最本质的思想方法。结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块,它以过程为中心, 强调的是过程, 强调功能和模块化, 通过一系列过程的调用和处理完成相应的任务。 面向对象编程以对象为中心, 是对一系列相关对象的操纵, 发送消息给对象, 由对象执行相应的操作并返回结果, 强调的是对象。 理论上, 面向对象的程序设计方法将产生更好的模块内聚和耦合特性, 使得软件更易于重用与维护。在执行效率上来说,结构化方法比面向对象方法产生的代码更直接,更高效。从应用的范围看,结构化方法适用于数据少而操作多的问题。时间证明对于像操作系统这样的以功能为主的系统,结构化方法比较适应它。面向对象方法正好相反,对于数据库,信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于结构化方法。 在实践中程序设计方法关注软件生命周期的各个环节, 从需求分析、总体设计到编码、测试和维护,同时设计方法在各个阶段需要工具和环境的支撑, 因此在选择程序设计方法时, 需要综合考虑这些因素。
四、参考文献
- http://baike.baidu.com/view/551681.htm,百度百科,结构化方法
- http://baike.baidu.com/subview/7867/11370681.htm,百度百科,面向对象方法
- http://www.docin.com/p-725901488.html,结构化方法与面向对象方法之比较
- 《程序设计中过程化方法与面向对象方法的比较》,符于江,2008