结构化分析设计方法拥有较长的发展历史,如果以前拥有结构化程序设计的基础和经验,现在转换使用面向对象的方法,则容易出现采用面向对象语言却是结构化的实现方式的问题。那么,面向对象方法论与结构化方法论到底存在什么样的差异呢?
下面通过一个具体实例的分析来比较一下结构化方法论与面向对象方法论在分析问题的出发点和描述问题的方法等方面的区别。
实例:设计一个程序,对不同类型的图形(例如,圆和矩形)提供求其面积、绘制指定图形的功能。
总的来说,结构化的程序设计是一种自上而下的设计方法,设计者用一个主函数概括出整个应用程序需要做的事情主线,并由一系列子可调用的函数组成,对于主函数中的每一个子函数,又可以再被精炼成更小的函数。重复这个过程,就可以完成一个结构化的设计,其特征是以函数为中心,用函数作为划分程序的基本单位,通过问题求解过程将函数串联起来,数据在其间进行传递。数据在结构化设计中往往处于从属的位置。
根据这种原则,针对具体的问题,可以分析出来,程序的核心是要求完成两项功能:计算图形面积和绘制相应图形。程序执行的过程是计算面积,然后再绘制相应图形。因此,从整体上看,主函数描述程序的主逻辑并控制功能实现的顺序。从模块内聚的角度,提取两个功能函数:计算面积和绘制图形。软件结构图设计如图5-1所示。
图5-1 结构化软件结构图
最终的程序(以C语言为例)实现的部分代码如下:
结构化方法将系统看成是过程的集合,过程与数据实体之间交互,过程接受输入并产生输出。(www.xing528.com)
面向对象方法则不再把程序看成工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。
以面向对象的视角观察例题中的内容,我们看到的是具体的图形对象,例如圆和矩形,它们具有各自的特征,圆具有圆心坐标和半径,而矩形具有边长和左上角坐标。它们都能够提供面积计算和图形绘制的行为,并且可以抽象提取图形的共同特点形成通用图形对象。图5-2展示了这些对象之间的关系。在这里,每个对象可以看作是一个微型程序,有自己的数据、操作、功能和目的,自己对自己的数据进行处理和维护,模块(对象)独立性强。
图5-2 面向对象设计过程中的类图
下面从五个方面对结构化方法和面向对象方法的区别做总结。
(1)从概念方面看,结构化软件是功能的集合,通过模块以及模块和模块之间的分层调用关系实现;面向对象软件是事物对象的集合,通过对象以及对象和对象之间的通信联系实现。
(2)从构成方面看,结构化软件是过程和数据的集合,以过程为中心;面向对象软件是数据和相应操作的封装,以对象为中心。
(3)从运行控制方面看,结构化软件采用顺序处理方式,由过程驱动控制;面向对象软件采用交互式和并行处理方式,由消息驱动控制。
(4)从开发方面看,结构化方法的工作重点是设计;面向对象方法的工作重点是分析。但是,在结构化方法中,分析阶段和设计阶段采用了不相吻合的表达方式,需要把在分析阶段采用的具有网络特征的数据流图转换为设计阶段采用的具有分层特征的软件结构图,在面向对象方法中设计阶段的内容是分析阶段成果的细化,则不存在这一转换问题。
(5)从应用方面看,相对而言,结构化方法更加适合数据类型比较简单的数值计算和数据统计管理软件的开发;面向对象方法更加适合大型复杂的人机交互式软件的开发。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。