第29卷 第2期陕西师范大学学报(自然科学版)Vol.29 No.2 2001年6月Journal of Shaanxi Normal University(Natural Science Edition)J un.2001 文章编号:100123857(2001)022*******结构化方法与面向对象方法的比较分析张 莉, 裘国永(陕西师范大学计算机科学学院,陕西西安710062)摘 要:剖析了结构化方法和面向对象方法这两种软件开发方法具体的分析设计过程,讨论了各自在不同软件开发中的应用及局限性,提出了在选用面向对象方法开发大型软件系统的同时可结合结构化方法.关键词:软件开发;结构化方法;面向对象方法;问题域中图分类号:TP316 文献标识码:A20世纪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 )、对象图(ObjectDiagram )和包图(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 或抽象的问题域现象直接表述为对象,同时把现象类型直接表述为类.大多数OOA 方法支持多视角模型,即对同一问题域现象,不同的主体可以将它表述为同一对象或类型.但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题域现象达成一致,然而,结果得到的对象或类并不很适合于某个描述者对对象的独自观察而得到的表述.也就是说,在面向对象模型中,不同的系统描述者在观察描述同一个问题域现象时,都可以把该现象表述为对象(或类),但却不能表述各自之间存在的对问题域现象的不同认识,除非通过底层结构(如操作、协议等)的处理.3 结束语从上面的分析设计过程可以看出,结构化方法是对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界.面向对象方法则是从行为的角度进行建模,基于行为分析法认定对象及它们之间的关系,从内部结构上模拟客观世界,它采用了新概念、新方法、新的表示形式,有助于软件开发人员加深对系统的理解,给软件开发带来很大益处.但在实际应用中,开发的大型软件系统通常是混合型系统,即需要处理实时信息、又需要数据库的支持,同时还涉及大量的事务性操作请求,在这种情况下,在选用面向对象方法的同时在局部处理上可以结合使用结构化方法.参考文献:[1]缪淮扣,高晓雷,李刚.结构化方法、面向对象方法和形式方法的比较与结合[J ].计算机工程和科学,1999,21(4):28~29.[2]郑人杰,殷人昆,陶永雷.实用软件工程[M ].北京:清华大学出版社,1997.[3]邵维忠,杨芙清.面向对象的系统分析[M ].北京:清华大学出版社,1998.[4]鲁博,柴跃廷.关于统一建模语言———UML.计算机工程与科学[J ],2000,22(4):59~60.[5]The Object Management Group.doc.no.ad/97208204.UML Semantics[OL ].versions1.1,1September ,1997.[6]The Object Management Group.doc.no.ad/97208205.UML Notation Guide [OL ].version 1.1September ,1997.[7]刘作伟,宁洪.现代软件开发方法中的use case 技术[J ].计算机科学,1999,26(4):70~74.〔责任编辑 张惠民〕Structured methodology and Objected 2oriented methodologyZHAN G Li ,Q IU Guo 2yong(College of Computer Science ,Shaanxi Normal University ,710062Xi ′an ,Shaanxi ,China )Abstract :This paper anatomizes the analysis and design process of Structural method and objected 2oriented method ,discusses their applications and disadvantages and proposes that structural method can also be used while developing the large-scale software systems in selecting the object-oriented method.K ey w ords :software 2development ;structured methodology ;objected 2oriented methodology ;problem domain 32 陕西师范大学学报(自然科学版)第29卷。