首页 > 代码库 > 结构化方法与面向对象方法之应用比较

结构化方法与面向对象方法之应用比较

  现如今有两种比较常用的软件开发方法,一是结构化方法,二是面向对象的开发方法。本文介绍两种软件开发方法在应用上的不同与相容点。

一、结构化软件开发方法

  1、需求分析

  在需求分析阶段,结构化分析方法一般是从数据处理的方向去思考问题。结构化分析方法在面对一个需求时,开发者会把这个需求看成一系列的功能集合,换句话说,就是把整个程序的大功能拆分成好多个。然后用一个个小功能模块来进行组合,从而满足整个需求。从另一方面讲,用小功能模块去拼成大功能来满足需求的过程,也是开发者分析需要的过程,把一个大的系统的功能拆分成许多小块去理解,这有助于对需求的逐步细化。从宏观到细节,从上至下。

  在完成这个过程的过程中,开发者们总结了经验,并把经验发展成了一些成熟的分析技术。其中,比较常用的一种技术是数据流图,数据流图用于分析系统数据的处理过程,从顶层开始,沿着数据的流动方向,自顶向下,对每一个要对数据流进行操作的模块功能进行清晰而且明确的说明。也就是对数据进行了哪些操作,操作完成后输出哪些数据等等。

  2、 程序设计

  在程序设计阶段,同理是要遵循自顶向下的思想。首先在需求分析阶段已经产生了数据流图,系统有哪些模块都基本确定了,也就是根据数据流图,提取每个数据处理点的功能,每个功能就是一个模块,当然还需要对重复的功能进行合并,对太复杂的功能进行合理的分解。所以在程序设计阶段的主要工作是对程序每个模块的实现算法进行具体的设计,并设计好模块间的关系,把模块间的接口设计清楚。

  在模块关系设计方面,也有一些比较成熟的设计方法,比如用系统结构图来说明系统中功能和功能之间的联系,包括调用关系、协作关系、并列顺序执行关系等等。这就完成了系统的整体结构设计。

  在整体结构设计完成后,就可以对模块内部的具体细节进行深入的设计了。把每个模块看成一个小程序,有句话说,程序等于算法加数据结构,所以对每个模块的深入设计,就是要搞清楚每个模块到底要用什么样的算法去实现,用选用什么数据结构去保存数据信息。另外,因为模块毕竟不是单独的,所以还需考虑这个模块要通过什么方式与其它模块进行数据的交流。

  3、 程序开发

  程序设计完成后,就可以进行程序的开发了。结构化开发方法在程序开发阶段只需要根据设计阶段产生的设计结果,用计算机语言表达出来即可。主要是要选择合适的开发语言,在面向过程的开发语言中,一般有C语言,pascal语言等。

  4、程序测试

  当然,黑盒测试自然是与其它开发形式产生的系统没什么不同。但在白盒测试或者灰盒测试时就需要结合结构化开发方法的程序特点进行测试的过程的设计了。首先需要对每个功能模块的功能进行功能测试,然后再对数据流路径上的功能结合方式进行进行覆盖性测试。发现问题,如果是模块内的还是可以很快地解决地,如果是模块间衔接出现了问题,这可以会引起比较大的混乱,可能是牵一发而动全身。

  5、开发方法评价

  结构化设计方法把事物的功能做为主要考虑对象,从实现的事物中抽象地提取出他们在功能上的联系,所以结构化设计并不能地反映现实物事在实现中的真正关系,模块与模块之间的联系会比较个人化,不利于整个团队的合作。比如我认为这两个功能之间应该是调用的关系,而你却认为是并列合作的关系比较合理。但又由于它只是对事物功能的提取,这就减少了许多需求之外的联系引入。如果功能模块设计得当,会让程序相当简洁,这很大程序上保证了整个系统的运行效率。这也是如今许多基础性的系统还是会使用结构化开发方法进行开发的重要原因。

二、面向对象软件开发方法

  

  1、需求分析

  面向对象在需求分析阶段,开发者主要从事物的实现状态去考虑。他们会把具体的事物抽象成一个数据集和功能集,也就是一个类。然后再按每个类在实现中的关系把他们联系起来,达到满足需求的效果。这种理解需求的方面显得极其简单,因为它几乎没有从程序本身的功能去考虑问题,而是让试图让程序去模拟现实的事物以及事物间的关系,这然就自己把实现中的问题给实现了。在这个过程中,一般不会考虑用什么算法去实现。

  在面向对象需求分析阶段,常用的方法是用例图(Use case Diagram)。用例图从用户的角度去分析系统的功能,描述出用户与系统交互的所有事务。

  2、 程序设计

  在需求分析的基础上,就可以根据用例图进行程序设计了。在用例图中,可以清晰地看到系统涉及到了哪些事物,各个事物间是什么关系。然后就能大致地分析出整个程序需要哪些类了。把可能会用到的类先确定下来,再把系统的功能对照实现,合理地分配给每个类,这样就把系统整体分解成了局部,我们只要再按照实现中各个事物的关系,处理好系统中与现实事物所对应的类与类之间的关系,整个程序就处设计完成了。

  在设计阶段,一般使用到的技术有,类图、对象图和包图。把系统对象化,再把对象分类放在一个包里。这样由小及大,及类为基本单位,就能把整个系统搭建出来了。类图对系统进行了静态成分的设计,然后还需对系统动态过程进行设计。根据系统执行时的时序状态或交互关系来描述系统的行为从而可以构造出动态模型,包括交互图、状态图和活动图等。

  3、 程序开发

  面向对象的程序开发语言有c++、c#、java等等。

  4、程序测试

  在测试设计时,面向对象的程序可以对每个类的功能分别进行测试,因为每个类都可以单独进行实例化,所以测试起来也很方便。再者,还需要对类间合作的正确性进行测试,根据系统功能,实例化部分类,并对类间数据处理进行深入地测试。

  5、开发方法评价

  面向对象的设计方法思想比较简单,非常合适于团队的合作。因为以类为基本组成单位,而且类与类间的关系也是对现实事物的一种抽象。所以在团队开发时,开发人员间只需要统一好接口,剩下的开发部分其实就是相当于各自用程序把描述客观存在的实物。这种方法开发出来的程序,比较容易测试,没有太多的组合。并且一般逻辑的错误都能给控制在一个类里,而如果是类间的组合关系有错误,也是从类这个量级上对程序整体进行调整。

       不过因为面向对象的方法基本上是对实现实物进行了近乎完整的描述,所以程序整体看起来不是很整洁,而且运行效率也没有结构化程序的高。每个类都要有自己的属性和功能函数,除了有继承关系的家族类内部,类与类之间是不会同享属性和方法的。甚至有继承关系的类间也不是很提倡方法的属性的共享。这是面向对象方法的封装特性对开发设计的基本要求。这会对存储空间造成极大的浪费。

三、两者相容性

  两种开发方法并不是完全相互对立的,他们可以相互交叉使用。比如面向对象的类内功能的实现其实就是用面向过程的思想去处理的。还有往上层看,各个类之间的顺序抛弃功能,其实也是一种宏观意义上的过程设计。

  

结构化方法与面向对象方法之应用比较