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

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

140613 14231012 李旭

一、     概述

20世纪60年代以来,软件的发展一直受到开发综合症“软件危机的影响。为了提高软件质量,软件开发方法不断推陈出新,其中结构化方法经过30多年的研究及应用,最为成熟且影响最大,直到现在仍有许多系统是用它开发的。而面向对象方法是在结构化方法、信息建模方法等基础上发展起来的,近10 年来发展较快,现已呈现出取代结构化方法的趋势。本文将具体分析两者在软件开发中的差别。

二、     结构化方法

结构化方法出现于20 世纪70 年代,是一种早期的传统的软件开发方法,它是由结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)三部分有机组成的。它的基本思想是,基于功能的分解与抽象,形成系统的模块结构,从而针对每个模块进行结构化设计及结构化编程来完成系统的开发,把一个复杂的系统分解成容易求解的各个模块,从而把复杂的问题简单化。

1.     结构化分析

结构化分析是面向数据流的系统分析方法,进行结构化分析的主要工具有数据流图、数据词典、结构化英语、判定表、判定树、实体关系图等,其中数据流图和实体关系图应用最为广泛,前者是一种分层的建立系统逻辑模型的方法,后者是数据库设计的基础。其中,数据流图有四个基本要素:数据流、实体、数据加工和数据存储。数据流图是一种分层的思想,逐渐地体现系统的逻辑功能。总体思想是:首先确定系统和系统涉及到的外部实体之间的数据流,画出第0 层数据流图(也叫顶层图);其次,在第0 层图的基础上,对系统的主要功能进行分析,抽象出功能123…,作为系统的加工,因此第0 层的系统加工模块就细化为第1 层的123…加工模块,确定实体和加工之间的数据流,画出第1 层数据流图;再次,在第1 层图的基础上,对其所有加工进行进一步的分析说明,把123…加工细化为1.11.21.32.12.22.32.4…依此类推,细化到加工不能再细化为止。数据流图越详细,系统的功能就越明确。数据流图的分层结构如下图所示。

2.     结构化设计

结构化设计是将数据流图表示的信息转换成程序结构的设计描述,在该阶段力求寻找功能的实现方法,采用系统结构图表示系统所具有的功能和功能之间的关系。设计过程分两步完成,第一步以需求分析的结果作为出发点,构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系)。第二步详细设计即过程设计,在总体设计的基础上,确定每个模块的内部结构和算法,最终产生每个模块的程序流程图。因此,结构化方法比较适合于像操作系统、实时处理系统等这样的以功能为主的系统。

3.     结构化程序设计

根据结构化设计阶段的模块结构,即对每个模块进行处理过程设计,分析每个模块内部的逻辑程序结构,在结构化程序设计阶段,用各种编程语言实现,本文不作详细说明。

4.     结构化方法的局限

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

三、     面向对象方法

面向对象方法是从内部结构上模拟客观世界,其基本思想为:对象是对现实世界客观实体的描述,均由其属性和相关操作组成,是系统描述的基本单位。面向对象方法更强调运用人类在日常的逻辑思维中经常采用的思想方法和原则,例如抽象、分类、继承、聚合、封装等,这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。OOAOOD的软件开发方法层出不穷,其中有代表性的有CoadYourdon的五层次分析方法和四组件设计方法、Booch的静态和动态的描述方法以及Rumbaugh的三种模型描述法等,这些方法都有各自的特点。但总的来说,这些方法还不完善。目前OO 方法所采用的统一建模语言UML(Unified Modeling Language,它是面向对象开发中一种通用的、图形化的模型语言,是近代软件工程环境中对象分析和设计的重要工具。UML 的主要内容包括:基本构造块、规则和公共机制,其中基本构造块包括事物、关系、图,基本构造块是UML 建模的灵魂。UML 中涉及到的事物主要有结构事物、行为事物、分组事物和注释事物。UML的组成如下图所示。

1.       面向对象分析

OOA 阶段是通过行为分析法认定对象及它们之间的关系。具体过程如下:

(1)   使用用例图从用户角度描述系统功能并指出各功能的操作者。用例(Use Case)是指用户使用系统时所执行的一个与行为相关的事务序列,这个序列是在与系统的会话中完成的。用例之间存在三种关系:角色(Actor)与用例之间的连接,用例之间的使用(Use)和扩展(Extend)关系,通过角色执行用例,可以识别出不同的用例。

(2)   根据需求建立系统的静态模型来构造系统的结构。静态模型包括类图(Class Diagram )、对象图(Object Diagram)和包图(Package Diagram)。类图描述了系统中的类及其相互之间的关系,其本质反映了系统中对象的类型以及对象之间的各种静态关系,如关联、依赖、聚合等。对象图是类图的实例,几乎使用与类图完全相同的标识,它们的不同点在于对象图显示类的多个对象实例而不是实际的类。包图由包或类组成,表示包与包之间的关系,包图用于描述系统的分层结构。

(3)   根据系统执行时的时序状态或交互关系来描述系统的行为,从而构造其动态模型,包括交互图(Interaction Diagram)、状态图(Status Diagram)、活动图(Activity Diagram)等。交互图描述对象间的交互关系,包括顺序图和合作图。顺序图显示对象之间的动态合作关系,强调对象之间消息发送的时间顺序;合作图也显示对象间的动态合作关系,但更强调上下级关系。状态图描述对象的所有可能状态以及事件发生时状态的转移条件;活动图描述为满足用例要求所进行的活动以及活动间的约束关系,用于识别并行活动。

2.       面向对象设计

OOA OOD 采用一致的概念、原则和表示方法,二者之间不存在鸿沟,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分。能体现二者之间关系的是近几年提出的一种新的软件生命周期模型———喷泉模型(如右图)。其中分析与设计这两个水泡表明OOAOOD没有严格的边界,它们是连续的、无缝的、允许有一定的相交(一些工作既可以看作是OOA的,也可以看作是OOD )。在分析阶段所获得的信息,不仅是设计阶段的输入,同时也是设计阶段的一个完整部分,析得到对象及其相互关系,而设计则是解决这些对象及其相互关系的实现问题。

面向对象方法中的OOA 对问题域的观察、分析和认识是很直接的,使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。OOD是对OOA所得出的对象模型的直接细化和抽象,得到可直接实现的类图。因此,OO设计不但是一个细化的过程,同时还是数据抽象的过程。从应用范围看,面向对象方法适用于数据库、信息管理系统等这些以数据为主而操作较少的系统。

四、     结构化方法和面向对象方法的比较

结构化方法和面向对象方法作为两种经典的软件开发方法,各有优缺点。结构化方法是基于功能的分解和抽象,其建立的模型比较直观、简单、可读性好,有利于客户和开发人员的交流,能够把一个复杂的系统用多个满足独立性要求的小模块来实现,能够有效地提高软件开发质量。然而,由于用户的需求往往容易变更,而且硬件、软件技术等也会不断变化,作为系统基本组成部分的功能模块会很容易受到影响,对于系统进行局部的修改往往会引起系统发生根本性的变化。进一步来说,就是需求稍微有所变更,就要从头开始结构化分析、设计到结构化程序设计,不利于软件的维护,开发周期一般也比较长。

面向对象方法主要是基于对象的交互,以数据为中心来描述系统,数据相对于功能而言,具有更强的稳定性,而且可以在模型的基础上直接映射出源代码,容易进行系统维护和系统构件重用,提高软件开发效率,能够比较容易地适应变更。但是这种方法不一定适合所有项目的开发,比如这种方法就不太适合大型信息管理系统的开发,因为在这种系统的开发过程中,若缺乏整体系统模块的设计划分,容易造成系统各模块结构不合理等问题,而且建立的模型相对比较复杂,较难理解。比如类图中类的属性和操作方法,一般客户是理解不了的,不利于沟通。所以用该种方法建模,在与客户进行交流的时候,要求客户要具有一定的专业基础。

五、     结束语

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

参考文献

[1] 结构化方法与面向对象方法的比较分析  张莉,裘国勇陕西师范大学计算机学院,2001

[2] 结构化方法与面向对象方法在建模中的应用与比较林玲福州大学阳光学院,2011

转载于:https://www.cnblogs.com/lxpeterlee/p/6211665.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值