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

引言

  随着计算机的硬件及通讯技术的发展,计算环境也随之产生深远的变化;而计算环境的变迁和不断增长的软件需求对程序设计方法学提出了一个又一个的挑战。纵观计算机的发展史,计算机的发展可大概概括为3个主要的阶段,即:大型主机、客户/服务器以及网络计算。而与此相对应,软件工程的程序设计方法大概可以分为三类:结构化方法、面向对象方法和形式方法。
  其中,以结构化方法的历史最为悠久、最为成熟,直到现在,仍有60%~70%的系统是用结构化方法进行开发的。与之相比,面向对象方法近十年来发展迅速,大有取代结构化方法而代之的趋势。而形式化方法,虽然近些年来一直有人在进行研究,但是由于种种原因,发展较为缓慢,以致于人们对于程序设计方法的认知局限于结构化方法和面向对象方法。
  本文着重对结构化方法和面向对象方法进行比较。

一、结构化方法

  结构化方法是70年代中期由DeMarco和Yourdon等人提倡的一种基于功能分解的分析方法,即利用数据流程图、决策表、决策树等工具,来建立一种符合用户需求的结构化说明书。结构化方法基于功能分解设计系统结构,它从内部功能上模拟客观世界。面向数据流,通过数据流图DFD,不断将DFD中复杂的处理分解成子数据流图来简化问题。
  结构化方法的基本思想就是将一个待解决的问题看作一个系统,从而用系统科学的思想方法来分析和解决问题。结构化方法遵循以下基本原则:

  • 抽象原则
  • 分解原则
  • 模块化原则

  结构化方法能够增加软件规格说明的可读性和软件系统的可靠性。数据流图容易理解,有利于开发人员与客户的交流。其缺点是软件系统结构对功能的变化十分敏感,功能的变化往往意味着重新设计。设计出的软件难以重用,延缓了开发的进程。

二、面向对象方法

  所谓对象是指具有一定结构、属性和功能的实体,采用对象和对象类,以及对象之间的相互通信的消息,描述客观世界中的各种事物及其相互关系,建立面向对象和消息的具有层次结构的世界模型。面向对象的程序设计方法基于上述面向对象世界模型。采用面向对象的程序设计语言,如c++、Java等编程实现。
  与结构化方法类似,面向对象方法同样需要遵循一定的基本原则:

  • 抽象
  • 封装
  • 模块化
  • 层次

  面向对象的方法从内部结构上模拟客观世界。这里的对象是客观世界对象的直接映象。对象不仅包含数据,还包含对数据操作的方法。对象之间的通讯是通过发送消息完成的。由于采用了继承的概念,有利于软件的重用。从所建模型的稳定性来看,也比结构化方法高。但开发出的软件冗余部分多,从效率方面来看,比结构化方法要低;且由于其封装性,使得系统内部的控制不清晰,给以后的维护工作增加了难度。

三、二者间的比较

  结构化设计方法由瑞士沃斯教授最早提出为数据结构+算法=程序。这种观念自60年代的软件危机之后对程序设计方法产生了深远的影响,引导了一代人的程序设计习惯。然而,随着软件规模的不断增长,也愈来愈暴露出了它的不足和缺陷。在传统的结构化设计程序之中,所有的代码均被书写成结构化的语句,也就是说,数据可以从任意代码中访问,在开发人员不知情的情况之下被修改,从而产生难以调试的运行错误。同时,当一个大的程序完工之后,对该工程的维护也是相当耗费精力和时间的。因为,在结构化编程中,修改一句代码可能就会给全局带来不可预知的逻辑错误。而且,依赖于开发人员控制代码和数据结果会导致程序的可重复利用性及其的低。
  事实上,正如上文所说,结构化的程序是建立在数据结构的基础之上的,而数据结构是对现实世界中对象间的抽象。但是,现实世界的对象是最容易变化的一部分,这种变化导致程序很难局部得修改以拟合,所谓牵一发而动全身
  面向对象的程序设计方式为这些困难带来了希望。在面向对象的程序设计之中,数据结构不再是程序的基础,取而代之的则是对现实世界抽象而出的抽象数据类型、对象和类等的这些概念。数据和操作数据的算法以及大量的细节被封装,暴露给用户和程序员的是对象的属性和功能,这更加贴近于现实世界。这种思想所带来的好处是显而易见的。首先,降低了程序结构的复杂性,是程序更易读和修改;其次,类的功能细节被隐藏,将对象的功能零件化,实现高度的聚合,更易对错误进行定位,同时,易于实现代码的复用。
  多态和继承是类的两个最重要的特征。多态性反映了现实世界中的复杂多样,而继承性反映了现实世界的层次结构。OO思想允许开发人员通过继承重用代码和数据,更迅速的构造复杂的应用程序,也为新功能的开发提供便利。

结语

  结构化和面向对象是软件工程的程序设计方法中最本质的思想方法,结构化体现了抽象思维和复杂问题求解的基本原则,面向对象则深刻反映了客观世界由对象组成这一本质特点。各种程序设计方法的一个重要区别在于问题分解的出发点不同,思维模式不同。计算机中数据结构和过程是密切相关的,结构化方法将数据结构和过程分开考虑,面向对象的方法组合数据和过程于对象之中。理论上,对象式实际方法将产生更好的模块内聚和耦合特性,使得软件更易于重用与维护,但在实践中程序设计方法需要工具和环境的支撑,需要考虑软件生命周期的各个环节,在选择程序设计方法时,需要综合考虑这些因素。

posted @ 2016-12-26 00:37  Farrow  阅读(730)  评论(1编辑  收藏  举报