20世纪60年代中期,大容量、高速度计算机的出现,使得计算机的应用范围迅速扩大,软件开发急剧增加。高级语言开始出现;操做系统的发展引发了计算机应用方式的变化;大量数据处理致使第一代数据库管理系统的诞生。软件系统的规模愈来愈大,复杂成都愈来愈高,软件可靠性问题也愈来愈突出。原来的我的设计、我的使用的方式再也不能知足现实需求,迫切须要改变软件生产方式,提升软件生产率,“软件危机”开始爆发。数据库
为了提升软件质量和软件开发的效率,人们提出了各类各样的软件开发方法,结构化方法和面向对象方法应运而生。结构化方法最为成熟,影响最大。直到如今,仍有60%~70%的系统是用结构化方法开发的。面向对象方法近十年来发展迅速,大有取代结构化方法的趋势。本文将就两者在软件开发中的优点、特色、差别进行对比与分析。编程
结构化方法出现于20世纪70年代,是一种早期的传统的软件开发方法。它基于功能分解设计系统结构,经过不断把复杂的处理逐层分解来简化问题,它从内部功能上模拟客观世界。用结构化开发的软件运行效率较高,且可以增长软件系统的可靠性。数据库设计
结构化方法由结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)三部分组成。它的基本思想是自顶向下、逐步求精,把一个复杂的系统分解成容易求解的各个模块,进而把复杂的问题简单化、模块化,利于工程化地实现与解决。模块化
结构化分析是面向数据流进行需求分析的方法,在该阶段力求寻找功能及功能之间的说明。它主要采用的工具是数据流图DFD(Data Flow Diagram),利用DFD描述边界和数据处理过程的关系。工具
进行结构化分析的主要工具还有数据词典、结构化英语、断定表、断定树、实体关系图等,其中数据流图和实体关系图应用最为普遍。优化
一般有以下步骤:spa
(a) 分析当前的状况,作出当前物理模型的DFD;操作系统
(b) 推导出等价的逻辑模型的DFD;设计
(c) 设计新的逻辑系统,生成数据字典和基元描述;对象
(d) 创建人机接口,肯定目标系统物理模型的DFD。
数据流图有四个基本要素:数据流、实体、数据加工和数据存储。
数据流图是一种分层的思想,逐渐地体现系统的逻辑功能。整体思想是:首先肯定系统和系统涉及到的外部实体之间的数据量,画出顶层图;而后在顶层图的基础上,对系统的主要功能进行分析,抽象出各个功能,做为系统的加工,所以顶层图的系统加工模块就细化为下一层的加工模块,肯定实体和加工之间的数据量,画出下一次数据流图;而后再在此基础上,对其全部加工进行进一步的分析说明,逐一细化,以此类推,细化到加工不能再细化为止。数据流图越详细,系统的功能就越明确。
下面经过一张经典的图来形象化地说明数据流图的分层结构:
在结构化分析的基础上,映射分析模型到设计模型,获得系统的模块结构、数据库结构等,其中数据库结构主要从分析阶段的ER(实体关系)模型获得,数据库设计至少要知足第三范式的要求,在设计过程当中的数据库设计在此不做过多说明。而系统的模块结构是在数据流图的基础上,进行相应的变换分析和事务分析获得,从结构化分析阶段的数据流图映射到系统的模块结构图,设计出知足高内聚低耦合的模块,即模块要知足独立性要求。
一般有以下步骤:
(a) 评审和细化数据流图;
(b) 肯定数据流图的类型;
(c) 把设局刘图映射到软件模块结构,设计出上层结构;
(d) 基于数据流图逐步分解高层模块,设计中下层模块;
(e) 对模块结构进行优化,获得更为合理的软件结构;
(f) 描述模块接口。
结构化方法从内部功能上模拟客观世界,用结构化方法开发的软件运行效率高,且可以增长软件规格说明的可读性及系统的可靠性,由于数据流图容易理解,有利于开发人员与客户的交流。但其缺点在于软件系统结构对功能的变化十分敏感,功能变化每每意味着难以重用。
结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有事物——对象做为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据量为中心进行分析的,因此分析结果不能直接反映问题域。同时,当系统较复杂时,很难检验分析的正确性。所以结构化分析方法容易隐蔽一些对问题域的理解误差,与后续开发阶段的衔接也比较困难。
结构化方法中设计文档很难与分析文档对应,由于两者的表示体系不一致。结构化分析的结果数据流图(DFD)和结构化设计结果模块结构图(MSD)是两种不一样的表示体系,从分析到设计的“转换”不存在可靠的转换规则,而更多的是带有我的理解的随意性,容易因理解上的误差产生错误而为之后的开发埋下隐患。
结构化方法对需求变化的适应能力较弱,软件系统结构对功能的变化十分敏感,功能的变化会引发许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。
面向对象思想最先起源于Simula计算机仿真语言,随着20世纪80年代面向对象语言的普遍出现,逐渐成为主流。面向对象方法的基本思想,就是要创建出问题域模型,开发出可以直观表现求解方法的软件系统,在这个过程当中,问题域模型必须给予人们习惯的思惟方式。
与结构化方法相似,面向对象方法也包含三个部分:面向对象分析(OOA )、面向对象设计(OOD)、面向对象程序设计(OOP)。对象、类、封装性、继承性、多态性的引入使用,另面向对象方法具备必定的优点,能为生成可重用的软件构件和解决软件的复杂性问题提供一条有效的途径。如今比较流行的面向对象方法是基于统一建模语言(UML),经过创建系统的各类模型来分析设计系统。同时UML支持系统构建,可以进行正向工程和反向工程,即可以将各类UML模型自动映射为源程序代码,也能够从源程序代码映射为各类模型,这体现了必定的灵活性。在面向对象方法中,分析与设计再也不有明显的界限,能够把面向对象分析做为面向对象设计的一部分,面向对象方法中系统功能的实现是经过对象的交互来进行的。
UML主要内容包括:基本构造块、规则和公共机制,其中基本构造块包括事物、关系、图,基本构造块是UML建模的灵魂。UML中涉及到的事物主要有结构事物、行为事物、分组事物和注释事物。
UML的组成如图所示:
OOA和OOD采用一致的概念、原则和表示方法,两者之间不存在鸿沟,不须要从分析文档到设计文档的转换,两者之间也不强调严格的阶段划分。能体现两者之间关系的是近几年提出的一种新的软件生命周期模型——喷泉模型,其中分析与设计这两个水泡表面OOA与OOD没有严格的边界,它们是连续的、无缝的、容许有必定的相交。
面向对象设计的具体过程:
(1) 对象行为和对象间交互做用的进一步细化;
(2) 用例的设计和实现。用例的分析工做从系统的外部角度展现系统的功能,系统内部的对象为实现这些外部功能而要发生的相互做用的行为是由用例的设计和实现工做来肯定的;
(3) 精化分析阶段的交互图、状态图、活动图;
(4) 肯定系统可重用的类或部件;
(5) 用构件图(Component Diagram)描述代码部件的物理结构及相互之间的依赖关系;
(6) 用配置图(Deployment Diagram)描述软硬件的物理体系结构。
面向对象方法从内部结构上模拟客观世界,对象是客观世界对象的直接映象,符合人们的思惟方式。在面向对象的开发模型中,分析、设计和编程阶段是重叠的,核心概念“对象”在开发的各个阶段均被使用,相对结构化方法来讲能够减小工做量和映射偏差。面向对象方法中对象不只包括数据,还包括对数据的操做方法;对象之间的通信是经过发送消息来完成的,因为采用了继承的概念,有利于软件重用;所建模型的稳定性比结构化方法高;它更接近人们的思惟习惯,因此容易让人们接受。
面向对象方法中对象的肯定有时会因客观边界模糊而难以肯定,即便肯定下来也将会带有不少人为的因素,这样就很难保证软件描述的正确性。
在问题域模型中,面向对象方法把具体或抽象的问题域或现象直接表述为对象,同时把现象类型直接表述为类。大多数面向对象分析方法支持多视角模型,即对同一问题域现象,不一样的主体能够将它表述为同一对象或类型,但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图经过面向对象的表述对存在的问题域现象达成一致,然而,结果获得的对象或类并不很适合于某个描述者对对象的独自观察而获得的表述。也就是说,在面向对象模型中,不一样的系统描述者在观察描述同一个问题域现象时,均可以把该现象表述为对象或类,但却不能表述各自之间存在的对问题域现象的不一样认识。
从上面的分析设计过程能够看出,结构化方法是对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界。面向对象方法则是从行为的角度进行建模,基于行为分析法认定对象及它们之间的关系,从内部结构上模拟客观世界,它采用了新概念、新方法、新的表示形式,有助于软件开发人员加深对系统的理解,给软件开发带来很大益处。但在实际应用中,开发的大型软件系统一般是混合型系统,即须要处理实时信息、又须要数据库的支持,同时还涉及大量的事务性操做请求,在这种状况下,在选用面向对象方法的同时在局部处理上能够结合使用结构化方法。
[1]张莉,裘国永. 结构化方法与面向对象方法的比较分析[J]. 陕西师范大学学报(天然科学版),2001,02:29-32. |
[2]林玲. 结构化方法与面向对象方法在建模中的应用与比较[J]. 机电技术,2011,05:26-30. |
[3]成朋,李代平,杨文伟. 结构化方法与面向对象方法的可结合性[J]. 广东工业大学学报,2006,03:102-107. |