结构化方法与面向对象方法的比较分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第29卷 第2期陕西师范大学学报(自然科学版)Vol.29 No.2 2001年6月Journal of Shaanxi Normal University(Natural Science Edition)J un.2001
文章编号:100123857(2001)022*******
结构化方法与面向对象方法的比较分析
张 莉, 裘国永
(陕西师范大学计算机科学学院,陕西西安710062)
摘 要:剖析了结构化方法和面向对象方法这两种软件开发方法具体的分析设计过
程,讨论了各自在不同软件开发中的应用及局限性,提出了在选用面向对象方法开发
大型软件系统的同时可结合结构化方法.
关键词:软件开发;结构化方法;面向对象方法;问题域
中图分类号:TP316 文献标识码:A
20世纪60年代以来,软件的发展一直受到开发综合症“软件危机”的影响.为了提高软件质量,软件开发方法不断推陈出新,其中结构化方法[1,2]经过30多年的研究及应用,最为成熟且影响最大,直到现在仍有许多系统是用它开发的.而面向对象方法[1,3]是在结构化方法、信息建模方法等基础上发展起来的,近10年来发展较快,现已呈现出取代结构化方法的趋势.本文具体分析两者在软件开发中的差别以及面向对象方法的优越性.
1 结构化方法
结构化方法基于功能分解设计系统结构,通过不断把复杂的处理逐层分解来简化问题,它从内部功能上模拟客观世界.用结构化开发的软件运行效率较高,且能够增加软件系统的可靠性.
1.1 结构化分析
它是面向数据流进行需求分析的方法,在该阶段力求寻找功能及功能之间的说明.它主要采用的工具是数据流图DFD(Data Flow Diagram),利用DFD描述边界和数据处理过程的关系.
1.2 结构化设计
结构化设计是将数据流图表示的信息转换成程序结构的设计描述,在该阶段力求寻找功能的实现方法,采用系统结构图表示系统所具有的功能和功能之间的关系.设计过程分两步完成,第一步以需求分析的结果作为出发点,构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系).第二步详细设计即过程设计,在总体设计的基础上,确定每个模块的内部结构和算法,最终产生每个模块的程序流程图.因此,结构化方法比较适合于像操作系统、实时处理系统等这样的以功能为主的系统.
1.3 结构化方法的局限
(1)结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基
收稿日期:2000211228
作者简介:张莉(1969─),女,陕西西安人,陕西师范大学讲师
本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域.同时,当系统较复杂时,很难检验分析的正确性.因此,结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难;(2)结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致.结构化方法的结果2数据流图(DFD )和结构化设计结果2模块结构图(MSD )是两种不同的表示体系,从分析到设计的“转换”实际上并不存在可靠的转换规则,而是带有人为的随意性,容易因理解上的错误而埋下隐患,使得设计文档与问题域的本来面貌相差甚远;(3)结构化方法对需求变化的适应能力比较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起一个加工和它相连的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程.
2 面向对象方法面向对象方法是从内部结构上模拟客观世界,其基本思想为:对象是对现实世界客观实体的描述,均由其属性和相关操作组成,是系统描述的基本单位.面向对象方法更强调运用人类在日常的逻辑思维中经常采用的思想方法和原则,例如抽象、分类、继承、聚合、封装等,这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来.OOA 和OOD 的软件开发方法层出不穷,其中有代表性的有Coad 和Y ourdon 的五层次分析方法和四组件设计方法、Booch 的静态和动态的描述方法以及Rumbaugh 的三种模型描述法等,这些方法都有各自的特点.但总的来说,这些方法还不完善.目前OO 方法所采用的统一建模语言UML (Unified Modeling Language )[4~6],它是面向对象开发中一种通用的、图形化的模型语言,是近代软件工程环境中对象分析和设计的重要工具.以下通过UML 语言来分析OOA 和OOD 过程.
2.1 面向对象分析
OOA 阶段是通过行为分析法认定对象及它们之间的关系.具体过程如下:(1)使用用例图1 顾客和销售商通过电话联系的用例模型Fig.1 Use Case model of the communication of customer and seller
图[7](Use Case Diagram )从用户角度描
述系统功能并指出各功能的操作者.用
例(Use Case )是指用户使用系统时所执
行的一个与行为相关的事务序列,这个
序列是在与系统的会话中完成的.用例
之间存在三种关系:角色(Actor )与用例
之间的连接,用例之间的使用(Use )和
扩展(Extend )关系,通过角色执行用例,
可以识别出不同的用例.图1显示了顾
客和销售商通过电话联系的用例模型;
(2)根据需求建立系统的静态模型来构
造系统的结构.静态模型包括类图
(Class Diagram )、对象图(Object
Diagram )和包图(Package Diagram ).类
图描述了系统中的类及其相互之间的关30 陕西师范大学学报(自然科学版)第29卷
系,其本质反映了系统中对象的类型以及对象之间的各种静态关系,如关联、依赖、聚合等.对象图是类图的实例,几乎使用与类图完全相同的标识,它们的不同点在于对象图显示类的多个对象实例而不是实际的类.包图由包或类组成,表示包与包之间的关系,包图用于描述系统的分层结构;(3)根据系统执行时的时序状态或交互关系来描述系统的行为,从而构造其动态模型,包括交互图(Interaction Diagram )、状态图(Status Diagram )、活动图(Activity Diagram )等.交互图描述对象间的交互关系,包括顺序图和合作图.顺序图显示对象之间的动态合作关系,图2 铁路模型中火车的状态图Fig.2 Status diagram of train in the Railway model 强调对象之间消息发送的时间顺序;合作图
也显示对象间的动态合作关系,但更强调上
下级关系.状态图描述对象的所有可能状态
以及事件发生时状态的转移条件;活动图描
述为满足用例要求所进行的活动以及活动
间的约束关系,用于识别并行活动.图2显
示铁路模型中火车的状态图,其中以“@”开
头的表示复合状态,需进一步精化.
2.2 面向对象设计
OOA 和OOD 采用一致的概念、原则和表示方法,二者之间不存在鸿沟,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分.能体现二者之间关系的是近几年提图3 喷泉模型Fig.3 Fountain model 出的一种新的软件生命周期模型———喷泉模型(图3),其中分析与设计
这两个水泡表明OOA 与OOD 没有严格的边界,它们是连续的、无缝的、
允许有一定的相交(一些工作既可以看作是OOA 的,也可以看作是
OOD 的).在分析阶段所获得的信息,不仅是设计阶段的输入,同时也是
设计阶段的一个完整部分,分析得到对象及其相互关系,而设计则是解
决这些对象及其相互关系的实现问题.具体过程:(1)对象行为和对象
间交互作用的进一步细化;(2)用例的设计和实现.用例的分析工作从
系统的外部角度展示系统的功能,系统内部的对象为实现这些外部功能
而要发生的相互作用的行为是由用例的设计和实现工作来确定的;(3)精化分析阶段的交互图、状态图、活动图;(4)确定系统可重用的类或部
件;(5)用构件图(Component Diagram )描述代码部件的物理结构及相互
之间的依赖关系;(6)用配置图(Deployment Diagram )描述软硬件的物理体系结构.面向对象方法中的OOA 对问题域的观察、分析和认识是很直接
的,使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌.OOD 是对OOA 所得出的对象模型的直接细化和抽象,得到可直接实现的类图.因此,OO 设计不但是一个细化的过程,同时还是数据抽象的过程.从应用范围看,面向对象方法适用于数据库、信息管理系统等这些以数据为主而操作较少的系统.
2.3 面向对象方法的局限
(1)面向对象方法中对象的确定有时会因客观边界模糊而难以确定,这样就很难保证软件描述的正确性;(2)面向对象在描述问题域方面的不足.在问题域模型中,面向对象方法把具体
第2期张莉等:结构化方法与面向对象方法的比较分析31