结构化方法与面向对象方法之比较
在软件开发的过程中,采用的开发方法主要有两种,分别为结构化开发方法和面向对象的开发方法,本文将对两种开发方法进行介绍和比较。
一. 结构化方法介绍
结构化方法,即面向过程开发是最早最传统的软件开发方法,由结构化分析,结构化设计和结构化程序设计三个部分有机的组合而成,它将软件分为多个过程进行开发,是迄今为止信息系统中应用最普遍,最成熟的一种软件开发方法。
1.1结构化分析
结构化分析(SA)是一种面向功能或面向数据流的需求分析方法,它是结构化方法中的一部分,是由1960到70年代的系统分析技术发展而成。它给出了一组原理与技术以帮助分析人员进行分析和功能规约,使用包括数据流图,数据字典,结构化语言,判定表和判定树等手段生成方便易懂图形来表达用户需求。
结构化分析的步骤如下:
① 根据当前的情况,设计数据流图以反映当前的物理模型
② 根据物理模型的数据流图分析得到等价的逻辑模型的数据流图
③ 根据逻辑模型的数据流图进行逻辑系统的设计
④ 建立人机接口以便于人机交互,并确定目标物理系统的数据流图
⑤ 对设计的各种方案进行分析,得到各种方案成本和风险等级
⑥ 根据各种方案的成本和风险等级择优选择一种方案
⑦ 根据选择的方案建立完整的需求规约
结构化方法通过结构化分析将一个复杂的问题自顶向下逐层进行分解,从而把一个复杂的大问题变成一个个人们容易进行解决的小问题进行解决。
1.2结构化设计
结构化设计(SD)是一种面向数据流的设计方法,目的在于确定软件的结构。它的基本思想是根据结构化分析的结果运用模块化的设计原理建立一个良好的模块结构图。其设计必须实现分析模型中的所有显示需求以及用户希望的隐式需求。并且设计的可读性良好,以便于进行实现,测试和维护。
结构化设计分为概要设计和详细设计两个阶段,在概要设计中,主要的任务是设计软件结构以完成结构化分析中的得到的系统的功能需求,从而最终形成软件的模块结构图。而在详细设计中,则需要对软件结构图中的每个模块确定算法和数据结构并通过某种表达工具给出详细设计阶段的清晰表述。
1.3结构化程序设计
结构化程序设计(SP)是进行以模块功能和处理过程设计为主的详细设计的基本原则。
它的三种基本结构为:顺序结构,选择结构和循环结构,其中,顺序结构表示程序中的操作按照出现的先后顺序进行执行,选择结构表示程序的处理步骤出现分支,需要根据条件选择其中的一个分支进行执行,循环结构则表示程序需要反复执行某些操作,直到达到某种条件时才终止循环。
它使用三种基本的控制结构进行程序的构造,严格控制GOTO语句的使用,从而使程序的明晰性更好,拥有更好的程序品质。
二. 面向对象方法
面向对象方法(OO)起源于面向对象的编程语言(OOPL),是一种把面向对象的思想应用于软件开发过程中,指导软件的开发活动的系统方法。它是建立在“对象”这一概念的基础上的。对象是一个程序模块,是由数据和对数据允许进行的操作组成的封装体,对应了客观世界的实体。所谓面向对象就是在基于对象概念的基础上,以对象为中心,以类和继承为构造机制来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向对象方法主要包括面向对象分析和面向对象设计以及面向对象的实现三大部分
2.1面向对象分析
面向对象分析(OOA)是一种新的系统分析方法,它按照面向对象的思想来分析,根据抽象,封装,继承,分类,聚合,关联等设计原则进行分析,并最终得到三种功能模型(功能模型,对象模型,动态模型)。
面向对象分析的基本步骤为:
① 确定问题域
② 区分类和对象
③ 区分整体对象和组成部分,确定类的关系及结构
④ 定义属性和服务
⑤ 确定附加的系统约束
2.2面向对象设计
面向对象设计(OOD)是一种软件设计方法,它根据面向对象分析得到的结果进行进一步的规范化整理,以便面向对象实现中能够直接使用。
它的主要任务包括:
① 对象定义规则的求精:对于面向对象分析中所抽象出的对象,类和汇集的分析文档,面向对象设计根据设计要求进行整理和求精,使其满足面向对象编程的需要区分类和对象
② 数据模型和数据库设计:数据模型设计的需要完成对类和对象属性内容的确定,决定消息的连接方式,设计系统访问等。并且,每个对象实例的数据都要落实到面向对象的库结构模型中
③ 优化:面向对象设计的优化设计过程是从另一个角度对分析结果和处理业务过程的整理归纳,优化包括对象和结构的优化、抽象、集成。
面向对象设计包括高层设计和低层设计两个阶段,在高层设计中,需要对系统的结构进行设计,构造出系统的总体模型。底层设计则是对类进行类的详细设计,使每个类都能形成单一概念的模型,且设计的部件是可重用和可靠的。
2.3面向对象实现
面向对象的实现(OOI)是指在面向对象设计的基础上,进行软件功能的编码实现,包括对对象内部功能的实现,对系统界面的实现等,即是对面向对象设计阶段中所设计的部分进行编程实现。
三. 两种开发方法的比较
相同点
- 二者在软件开发过程中都遵循抽象的原则,都需要将问题进行分解来解决,二者在运用分解和抽象原则上的要求是一致的
- 二者在局部化上有一致性,都不希望软件的一部分过多的影响软件的其他部分,在结构化方法中局部化主要通过代码与数据的分隔化实现,而在面向对象中则通过数据和操作的封装实现局部化
不同点
1:处理问题的基本单位不同
在结构化方法中,处理问题的基本单位是能清晰表达过程的模块,而在面向对象方法中,以对象的集合作为处理问题的基本单位
2:层次逻辑不同
结构化方法在分析的过程中强调功能抽象和模块化处理,它将待解决的问题看作一个系统进行分析和解决。通过对系统的功能进行设计,将问题的解决由大到小,自顶向下不断进行细分,形成一种类似树状图的层次结构,即结构化方法对功能的细分是分层的,上一层的结构往往只与下一层的结构进行交互,即第n层只考虑它和第n+1层的关系,而不进一步考虑与第n+2层的关系。而同一层的功能可以是“与”或者“或”的关系,它们通过相互协作来完成上一层的功能。
而在面向对象方法中,整个系统被分解成对象集合而非功能的集合,每个对象的职责是确定的,不同对象之间通过相互协作完成具体的任务。与结构化相比,对象形成的结构不是结构化方法中的层次结构,即结构化方法中上下层的依赖关系在面向对象中是不存在的,面向对象能够很好的封装变化,外界只需使用对象提供的接口,而不用考虑结构的实现。
3:数据处理方式不同
结构化方法是直接通过程序来进行数据的处理,而在面向对象方法中,将数据与操作封装成一个整体,原则上其它对象不能直接修改其数据,即对象中数据的修改只能由自身的成员函数完成。
结构化方法与面向对象方法都是当前应用很广泛的开发方法,各自有不同的特点,而了解这些特点有助于我们在软件开发过程中选择合适的开发方法,提高开发效率和软件的质量。