结构化方法与面向对象方法的比较
Posted 名前のない怪物
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构化方法与面向对象方法的比较相关的知识,希望对你有一定的参考价值。
摘要:
结构化方法在软件工程中得到广泛接受和使用,而面向对象方法提出后,当代软件工程的发展面临着从传统的结构化方法到面向对象方法的转变,本文剖析了结构化方法和面向对象方法这两种软件开发方法具体的分析设计过程,讨论了各自在不同软件开发中的应用及局限性,提出了在选用面向对象方法开发大型软件系统的同时可结合结构化方法。
关键词:软件工程、结构化方法、面向对象方法。
1. 引言
结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
2. 结构化方法
2.1结构化分析
结构化分析是 70 年代中期由DeMarco 和Yourdon等倡导的一种基于功能分解的分析方法,即使用数据流程图、决策表、决策树等工具,来建立一种符合用户需求的结构化说明书。它主要采用的工具是数据流图DFD(Data Flow Diagram),利用DFD描述边界和数据处理过程的关系。
2.2结构化程序设计
结构化设计是一种面向数据流的设计方法,是将数据流图表示的信息转换成程序结构的设计描述,在该阶段力求寻找功能的实现方法,采用系统结构图表示系统所具有的功能和功能之间的关系.设计过程分两步完成,第一步以需求分析的结果作为出发点,构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系).第二步详细设计即过程设计,在总体设计的基础上,确定每个模块的内部结构和算法,最终产生每个模块的程序流程图.因此,结构化方法比较适合于像操作系统、实时处理系统等这样的以功能为主的系统。
2.3局限
结构化方法在软件行业得到广泛接受和使用,并一度成为早期占主导地位的软件构造与开发方法。结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断地把复杂的处理分解为子处理,这样一层一层地分解下去,直到仅剩下的若干个容易实现的子处理为止。随着软件工程的发展,结构化方法具体表现出以下问题:
- 结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域.同时,当系统较复杂时,很难检验分析的正确性.因此,结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难;
- 结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致.结构化方法的结果-数据流图(DFD)和结构化设计结果-模块结构图(MSD)是两种不同的表示体系,从分析到设计的“转换”实际上并不存在可靠的转换规则,而是带有人为的随意性,容易因理解上的错误而埋下隐患,使得设计文档与问题域的本来面貌相差甚远
- 结构化方法对需求变化的适应能力比较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起一个加工和它相连的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程.
3.面向对象方法
面向对象包括以下概念:
属性——说明一个类的数据集合;类——封装数据和过程的抽象,这些是说明某些真实世界中的实体的内容和行为所必需的。换种方式说,类是一组相似对象的概括说明(如:模板、模式、蓝图);对象——某个特定类的实例。对象继承类的属性和操作;操作——也称作方法和服务,表现类的某个行为;子类——超类的特化,子类可以从超类继承属性和操作;超类——也称作基
类,是一组相关类的泛化。
面向对象技术包括面向对象分析(OOA)、面向对象设计(OOD)及面向对象程序设计(OOP)3 部分内容。
3.1面向对象分析
Object-Oriented Analysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务。例如:OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
3.2面向对象设计
OOD的目标是管理程序内部各部分的相互依赖。为了达到这个目标,OOD要求将程序分成块,每个块的规模应该小到可以管理的程度,然后分别将各个块隐藏在接口(interface)的后面,让它们只通过接口相互交流。比如说,如果用OOD的方法来设计一个服务器-客户端(client-server)应用,那么服务器和客户端之间不应该有直接的依赖,而是应该让服务器的接口和客户端的接口相互依赖。
这种依赖关系的转换使得系统的各部分具有了可复用性。还是拿上面那个例子来说,客户端就不必依赖于特定的服务器,所以就可以复用到其他的环境下。如果要复用某一个程序块,只要实现必须的接口就行了。
OOD是一种解决软件问题的设计范式(paradigm),一种抽象的范式。使用OOD这种设计范式,我们可以用对象(object)来表现问题领域(problem domain)的实体,每个对象都有相应的状态和行为。我们刚才说到:OOD是一种抽象的范式。抽象可以分成很多层次,从非常概括的到非常特殊的都有,而对象可能处于任何一个抽象层次上。另外,彼此不同但又互有关联的对象可以共同构成抽象:只要这些对象之间有相似性,就可以把它们当成同一类的对象来处理。
3.3对象程序设计
面向对象编程技术的关键性观念是它将数据及对数据的操作行为放在一起,作为一个相互依存、不可分割的整体——对象。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。面向对象编程就是定义这些类。类是描述相同类型的对象集合。类定义好之后将作为数据类型用于创建类的对象。程序的执行表现为一组对象之间的交互通信。对象之间通过公共接口进行通信,从而完成系统功能。类中声明的public成员组成了对象的对外公共接口。
3.4局限性
1.面向对象方法中对象的确定有时会因客观边界模糊而难以确定,这样就很难保证软件描述的正确性;
2.面向对象在描述问题域方面的不足.在问题域模型中,面向对象方法把具体或抽象的问题域现象直接表述为对象,同时把现象类型直接表述为类.大多数OOA方法支持多视角模型,即对同一问题域现象,不同的主体可以将它表述为同一对象或类型.但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题域现象达成一致,然而,结果得到的对象或类并不很适合于某个描述者对对象的独自观察而得到的表述.也就是说,在面向对象模型中,不同的系统描述者在观察描述同一个问题域现象时,都可以把该现象表述为对象(或类),但却不能表述各自之间存在的对问题域现象的不同认识,除非通过底层结构(如操作、协议等)的处理
4. 二者的比较
从上面的分析设计过程可以看出,结构化方法是对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界.面向对象方法则是从行为的角度进行建模,基于行为分析法认定对象及它们之间的关系,从内部结构上模拟客观世界,它采用了新概念、新方法、新的表示形式,有助于软件开发人员加深对系统的理解,给软件开发带来很大益处.但在实际应用中,开发的大型软件系统通常是混合型系统,即需要处理实时信息、又需要数据库的支持,同时还涉及大量的事务性操作请求,在这种情况下,在选用面向对象方法的同时在局部处理上可以结合使用结构化方法
结构化方法首先关心的是功能,强调以模块(即过程)为中心,采用模块化、自顶向下、逐步求精设计过程,系统是实现模块功能的函数和过程的集合,结构清晰、可读性好,的确是提高软件开发质量的一种有效手段。每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。如果问题世界的功能比数据更复杂或者更重要,那么结构化方法仍然应是首选的方法。如果数据结构复杂,模块独立性很难保证。
面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。
结构化设计从系统的功能入手,按照工程标准和严格规范将系统分解为若干功能模块。然而,由于用户的需求和软、硬件技术的不断发展变化,作为系统基本成分的功能模块很容易受到影响,局部修改甚至会引起系统的根本性变化。开发过程前期入手快而后期频繁改动的现象比较常见。
面向对象方法则从所处理的数据入手,以数据为中心来描述系统,数据相对于功能而言,具有更强的稳定性,这样设计出的系统模型往往能较好地映射问题域模型。对象、类、继承性、多态性、动态定连概念和设施的引入使用,显然令面向对象的设计方法具有一定的优势,能为生产可重用的软件构件和解决软件的复杂性问题提供一条有效的途径。
面向对象方法的优点并不是减少开发时间,相反,初次使用这种技术软件,可能比结构化方法开发时间更长,开发人员必须花很大精力去分析对象是什么,每个对象应该承担什么责任,所有这些对象怎样很好地合作以完成预定的目标。这样做换来的好处是,提高了目标系统的可重用性,减少了生命周期后续阶段的工作量和可能犯的错误,提高了软件的可维护性。
5.参考文献
[1]. 全兆明,对结构化方法和面向对象方法的对比和讨论
[2]. 王德军,结构化程序设计方法与面向对象的程序设计方法的比较
[3]. 张莉,结构化方法与面向对象方法的比较分析
[4]. 霍迎旦,软件工程中结构化方法与面向对象方法之比较
以上是关于结构化方法与面向对象方法的比较的主要内容,如果未能解决你的问题,请参考以下文章