面向对象软件工程方法学与传统方法学的异同

软件工程课上在学习 总结了一下 

 

面向对象工程方法学

传统方法

基本概念

面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象

传统方法通常指结构化方法。结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的

基本思想

尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。

把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内

基本单位

对象

模块

主要内容

分析

强调针对问题域客观存在的各项事务设立对象,把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建立起问题域的简洁、精确、可理解的面向对象模型, 为后续的面向对象设计和面向对象编程提供指导。面向对象分析通常建立三种模型: 对象模型、动态模型、功能模型。其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表示瞬时的、行为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。

传统分析方法是一种面向数据流而基于功能分解的分析方法, 在该阶段主要通过采用数据流程图、编制数据字典等工具, 描述边界和数据处理过程的关系, 力求寻找功能及功能之间的说明。

设计

针对系统的一个具体的实现运用面向对象方法,与面向对象分析采用相同的表示法和模型结构,这使得从分析到设计只有局部大修改或调整,并增加几个与实现有关的独立部分。

以需求分析的结果作为出发点构造出一个具体的系统设计方案,主要是决定系统的模块结构,以及模块的划分,模块间的数据传送机调用关系。详细设计是在总体设计的基础上考虑每个模块的内部结构及算法,最终将产生每个模块的程序流程图。但由于分析文档和设计文档表示体系不一致,实际上并不存在可靠的转换规则,从而很容易因理解上的错误和留下隐患。

实现

用一种面向对象的编程语言把设计模型中的每个成分书写出来,用具体的数据结构来定义对象的属性,用具体的语句来实现服务流程图所表示的算法。此阶段产生的程序紧密对应设计中的模型,其余部分的对象类对应与实现有关的因素。

利用一种编程语言产生一个能被机器理解和执行的系统,测试时发生和排除程序中的错误,最终产生一个正确的系统。但由于分析方法的缺陷很容易产生对问题的错误理解,以致在编程时程序员往往需要对分析员和设计人员已经认识过的事务重新进行认识。

局限

i.不能直接反映问题域: 结构化分析方法以数据流为中心, 强调数据的流动及每一个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽一些对问题域的理解偏差。
  ii.数据和代码缺乏保护机制: 一个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问, 这给程序设计带来了不安定因素, 一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。
  iii.分析和设计体系不一: 结构化分析的结果是数据流图, 结构化设计的结果是模块结构图。 二者的表示体系不一致, 分析文档很难与设计文档对应, 所以从分析到设计的“ 转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。
  iv.开发过程复杂: 由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。 对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序, 而且往往不能对数据的安全性进行有效的控制。 如果程序进行扩充或升级, 也需要大量修改函数, 因此结构化程序的可重用性不好。 要使数据与程序始终保持兼容, 已成为程序员的一个沉重的负担。

i.开发过程管理要求高:在面向对象分析过程中,需要多次迭代,开发过程要经过“修改-评价-再修改”的多次反复。

  ii.系统复用性低:面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障代价大,对于需求变化频繁的系统,很难得到一个高度可复用的面向对象软件系统设计。

  iii.开发人员易将原型取代规范系统分析:缺乏规范化的文档资料,不易于后期维护。

 

总结

   统方法和面向对象是软件工程的程序设计方法中最本质的思想方法。传统方法编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块,它以过程为中心, 强调的是过程, 强调功能和模块化, 通过一系列过程的调用和处理完成相应的任务。 面向对象编程以对象为中心, 是对一系列相关对象的操纵, 发送消息给对象, 由对象执行相应的操作并返回结果, 强调的是对象。 理论上, 面向对象的程序设计方法将产生更好的模块内聚和耦合特性, 使得软件更易于重用与维护。在执行效率上来说,传统方法比面向对象方法产生的代码更直接,更高效。从应用的范围看,传统方法适用于数据少而操作多的问题。时间证明对于像操作系统这样的以功能为主的系统,传统方法比较适应它。面向对象方法正好相反,对于数据库,信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于传统方法。 在实践中程序设计方法关注软件生命周期的各个环节, 从需求分析、总体设计到编码、测试和维护,同时设计方法在各个阶段需要工具和环境的支撑, 因此在选择程序设计方法时, 需要综合考虑这些因素


你可能感兴趣的:(面向对象软件工程方法学与传统方法学的异同)