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

 

1     引言

         20世纪60年代中期,大容量、高速度计算机的出现,使得计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现;操作系统的发展引起了计算机应用方式的变化;大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂成都越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足现实需求,迫切需要改变软件生产方式,提高软件生产率,“软件危机”开始爆发。

         为了提高软件质量和软件开发的效率,人们提出了各种各样的软件开发方法,结构化方法和面向对象方法应运而生。结构化方法最为成熟,影响最大。直到现在,仍有60%~70%的系统是用结构化方法开发的。面向对象方法近十年来发展迅速,大有取代结构化方法的趋势。本文将就二者在软件开发中的优势、特点、差异进行对比与分析。

2     结构化方法

         结构化方法出现于20世纪70年代,是一种早期的传统的软件开发方法。它基于功能分解设计系统结构,通过不断把复杂的处理逐层分解来简化问题,它从内部功能上模拟客观世界。用结构化开发的软件运行效率较高,且能够增加软件系统的可靠性。

         结构化方法由结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)三部分组成。它的基本思想是自顶向下、逐步求精,把一个复杂的系统分解成容易求解的各个模块,进而把复杂的问题简单化、模块化,利于工程化地实现与解决。

2.1    结构化分析(SA)

结构化分析是面向数据流进行需求分析的方法,在该阶段力求寻找功能及功能之间的说明。它主要采用的工具是数据流图DFD(Data Flow Diagram),利用DFD描述边界和数据处理过程的关系。

进行结构化分析的主要工具还有数据词典、结构化英语、判定表、判定树、实体关系图等,其中数据流图和实体关系图应用最为广泛。

通常有如下步骤:

(a)     分析当前的情况,做出当前物理模型的DFD;

(b)     推导出等价的逻辑模型的DFD;

(c)      设计新的逻辑系统,生成数据字典和基元描述;

(d)     建立人机接口,确定目标系统物理模型的DFD。

2.1.1    数据流图

数据流图有四个基本要素:数据流、实体、数据加工和数据存储。

数据流图是一种分层的思想,逐渐地体现系统的逻辑功能。总体思想是:首先确定系统和系统涉及到的外部实体之间的数据量,画出顶层图;然后在顶层图的基础上,对系统的主要功能进行分析,抽象出各个功能,作为系统的加工,因此顶层图的系统加工模块就细化为下一层的加工模块,确定实体和加工之间的数据量,画出下一次数据流图;然后再在此基础上,对其所有加工进行进一步的分析说明,逐一细化,以此类推,细化到加工不能再细化为止。数据流图越详细,系统的功能就越明确。

下面通过一张经典的图来形象化地说明数据流图的分层结构:

 结构化方法与面向对象方法之应用比较_第1张图片

2.2    结构化设计(SD)

在结构化分析的基础上,映射分析模型到设计模型,得到系统的模块结构、数据库结构等,其中数据库结构主要从分析阶段的ER(实体关系)模型得到,数据库设计至少要满足第三范式的要求,在设计过程中的数据库设计在此不作过多说明。而系统的模块结构是在数据流图的基础上,进行相应的变换分析和事务分析得到,从结构化分析阶段的数据流图映射到系统的模块结构图,设计出满足高内聚低耦合的模块,即模块要满足独立性要求。

通常有如下步骤:

(a)     评审和细化数据流图;

(b)     确定数据流图的类型;

(c)      把设局刘图映射到软件模块结构,设计出上层结构;

(d)     基于数据流图逐步分解高层模块,设计中下层模块;

(e)     对模块结构进行优化,得到更为合理的软件结构;

(f)      描述模块接口。

2.3    结构化方法的特点与局限

结构化方法从内部功能上模拟客观世界,用结构化方法开发的软件运行效率高,且能够增加软件规格说明的可读性及系统的可靠性,因为数据流图容易理解,有利于开发人员与客户的交流。但其缺点在于软件系统结构对功能的变化十分敏感,功能变化往往意味着难以重用。

2.3.1     对问题域的认识

结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有事物——对象作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据量为中心进行分析的,所以分析结果不能直接反映问题域。同时,当系统较复杂时,很难检验分析的正确性。因此结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难。

2.3.2     分析与设计差异

结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致。结构化分析的结果数据流图(DFD)和结构化设计结果模块结构图(MSD)是两种不同的表示体系,从分析到设计的“转换”不存在可靠的转换规则,而更多的是带有个人理解的随意性,容易因理解上的偏差产生错误而为以后的开发埋下隐患。

2.3.3     难以适应需求变化

结构化方法对需求变化的适应能力较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。

3     面向对象方法

面向对象思想最早起源于Simula计算机仿真语言,随着20世纪80年代面向对象语言的广泛出现,逐渐成为主流。面向对象方法的基本思想,就是要建立出问题域模型,开发出能够直观表现求解方法的软件系统,在这个过程中,问题域模型必须给予人们习惯的思维方式。

与结构化方法类似,面向对象方法也包含三个部分:面向对象分析(OOA     )、面向对象设计(OOD)、面向对象程序设计(OOP)。对象、类、封装性、继承性、多态性的引入使用,另面向对象方法具有一定的优势,能为生成可重用的软件构件和解决软件的复杂性问题提供一条有效的途径。现在比较流行的面向对象方法是基于统一建模语言(UML),通过建立系统的各种模型来分析设计系统。同时UML支持系统构建,能够进行正向工程和反向工程,即能够将各种UML模型自动映射为源程序代码,也可以从源程序代码映射为各种模型,这体现了一定的灵活性。在面向对象方法中,分析与设计不再有明显的界限,可以把面向对象分析作为面向对象设计的一部分,面向对象方法中系统功能的实现是通过对象的交互来进行的。

3.1    统一建模语言(UML)

UML主要内容包括:基本构造块、规则和公共机制,其中基本构造块包括事物、关系、图,基本构造块是UML建模的灵魂。UML中涉及到的事物主要有结构事物、行为事物、分组事物和注释事物。

UML的组成如图所示:

 结构化方法与面向对象方法之应用比较_第2张图片

3.2    面向对象设计

OOA和OOD采用一致的概念、原则和表示方法,二者之间不存在鸿沟,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分。能体现二者之间关系的是近几年提出的一种新的软件生命周期模型——喷泉模型,其中分析与设计这两个水泡表面OOA与OOD没有严格的边界,它们是连续的、无缝的、允许有一定的相交。

         面向对象设计的具体过程:

(1)     对象行为和对象间交互作用的进一步细化;

(2)     用例的设计和实现。用例的分析工作从系统的外部角度展示系统的功能,系统内部的对象为实现这些外部功能而要发生的相互作用的行为是由用例的设计和实现工作来确定的;

(3)     精化分析阶段的交互图、状态图、活动图;

(4)     确定系统可重用的类或部件;

(5)     用构件图(Component Diagram)描述代码部件的物理结构及相互之间的依赖关系;

(6)     用配置图(Deployment Diagram)描述软硬件的物理体系结构。

3.3    面向对象方法的特点与局限

面向对象方法从内部结构上模拟客观世界,对象是客观世界对象的直接映象,符合人们的思维方式。在面向对象的开发模型中,分析、设计和编程阶段是重叠的,核心概念“对象”在开发的各个阶段均被使用,相对结构化方法来说可以减少工作量和映射误差。面向对象方法中对象不仅包括数据,还包括对数据的操作方法;对象之间的通讯是通过发送消息来完成的,由于采用了继承的概念,有利于软件重用;所建模型的稳定性比结构化方法高;它更接近人们的思维习惯,所以容易让人们接受。

3.3.1    对客观事物判断的不确定性

面向对象方法中对象的确定有时会因客观边界模糊而难以确定,即使确定下来也将会带有很多人为的因素,这样就很难保证软件描述的正确性。

3.3.2    认识差异

在问题域模型中,面向对象方法把具体或抽象的问题域或现象直接表述为对象,同时把现象类型直接表述为类。大多数面向对象分析方法支持多视角模型,即对同一问题域现象,不同的主体可以将它表述为同一对象或类型,但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题域现象达成一致,然而,结果得到的对象或类并不很适合于某个描述者对对象的独自观察而得到的表述。也就是说,在面向对象模型中,不同的系统描述者在观察描述同一个问题域现象时,都可以把该现象表述为对象或类,但却不能表述各自之间存在的对问题域现象的不同认识。

4     总结

从上面的分析设计过程可以看出,结构化方法是对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界。面向对象方法则是从行为的角度进行建模,基于行为分析法认定对象及它们之间的关系,从内部结构上模拟客观世界,它采用了新概念、新方法、新的表示形式,有助于软件开发人员加深对系统的理解,给软件开发带来很大益处。但在实际应用中,开发的大型软件系统通常是混合型系统,即需要处理实时信息、又需要数据库的支持,同时还涉及大量的事务性操作请求,在这种情况下,在选用面向对象方法的同时在局部处理上可以结合使用结构化方法。

 

参考文献

[1]张莉,裘国永. 结构化方法与面向对象方法的比较分析[J]. 陕西师范大学学报(自然科学版),2001,02:29-32.

[2]林玲. 结构化方法与面向对象方法在建模中的应用与比较[J]. 机电技术,2011,05:26-30.

[3]成朋,李代平,杨文伟. 结构化方法与面向对象方法的可结合性[J]. 广东工业大学学报,2006,03:102-107.

你可能感兴趣的:(结构化方法与面向对象方法之应用比较)