单位文秘网 2022-02-15 08:12:01 点击: 次
摘要:结构化方法与面向对象方法是软件开发程序设计中的2个核心思想。这两种程序设计方法不仅表现为在程序语言、分析与设计上的差异,更表现在开发思想和开发视角上的差异。
关键词:软件工程;结构化;面向对象;程序设计
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)21-30451-02
In Programming Structurized Method and Object-oriented Method Comparison
FU Yu-jiang
(Hainan Software Professional Technology Institute,Qionghai 571400,China)
Abstract: The structurized method and the object-oriented method are 2 cores thought in the software development programming.These two programming method not only displays for in the program language, the analysis and the design difference, displays in the development thought and the development angle of view difference.
Keywords: Software Engineering; Structurization; Object-oriented; Programming
在计算机系统开发领域中存在各种各样的系统分析和设计方法,其中结构化方法与面向对象方法是软件开发程序设计中的2个核心思想。结构化方法来自于20世纪60年代流行的结构化设计语言,例如PASCAL、C语言等,经过几十多年的研究及应用,最为成熟且影响最大。而面向对象方法近10年来发展较快,被广泛应用于计算机软件的各个领域,如计算机仿真、系统设计、人工智能程序设计等各个方面,显示出了强大的生命力,现已呈现出取代结构化方法的趋势。本文具体分析了两者在系统分析设计中的差别及优劣。
1 结构化方法分析与设计
结构化方法承袭了传统的编程思想与编程方法,结构化方法只是对传统程序结构的改进。模块是结构化编程的基本单位,计算方法(简称为算法)是程序的核心,结构化分析和结构化设计是结构化方法软件开发最关键的两个时期。
1.1 结构化方法的基本思想
结构化方法程序设计的基本思想是:自顶向下,采用模块化技术,分而治之,逐步求精地将信息系统按功能分解为若干模块进行分析与设计,应用子程序实现模块化,模块内部由顺序结构、选择结构、循环结构等三大基本控制结构组成。即从代表目标系统整体功能的单个处理着手,自顶向下不断地把复杂的处理分解为子处理,这样一层一层地分解下去,直到仅剩下若干个容易实现的子处理为止,并写出各个最低层处理的描述。
1.2 结构化分析
结构化分析是一种面向数据流而基于功能分解的分析方法,在该阶段主要通过采用数据流程图、编制数据字典等工具,描述边界和数据处理过程的关系,力求寻找功能及功能之间的说明。通常所说的“结构化分析”就是“数据流分析”。
数据流分析的核心特征是“分解”与“抽象”。“分解”和“抽象”是两个相互有机联系的概念,下层是上层的分解,上层是下层的抽象。例如,假设系统很复杂,为了理解它,将它分成了5个子系统,如果子系统仍然比较复杂还可以再继续分解它,如此下去,直到每个子系统足够简单,能清楚地被理解和表达为止。
典型的结构化分析方法可以描述为:功能分解=功能+子功能+功能接口。问题域映射为功能和子功能,规格说明间接反映问题域。分析的结果是系统、子系统、功能、子功能层次结构的建立。
1.3 结构化设计
结构化设计通常与结构化分析方法衔接起来使用,以数据流图为基础,将数据流图表示的信息转换成程序结构的设计描述,在该阶段力求寻找功能的实现方法,完成软件层次图或软件结构图。
结构化设计通常表述为:结构图+关系数据模式,其中,结构图描述软件系统的程序结构,关系数据模式描述软件系统的数据库结构。因此,结构化设计工作主要包括程序结构设计和数据库结构设计。设计过程分两步完成,第一步构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系);第二步在总体设计的基础上,将实体联系图转换成关系数据模式,确定每个模块的内部结构和算法,产生每个模块的程序流程图,最终在此基础上设计建立外模式。
1.4 结构化分析设计的局限
1)不能直接反映问题域:结构化分析方法以数据流为中心,强调数据的流动及每一个处理过程,不是以问题域中的各事物为基础,打破了各事物的界限,分析结果不能直接反映问题域,容易隐蔽一些对问题域的理解偏差。
2)数据和代码缺乏保护机制:一个特定全程数据既可以被操作这些数据的过程访问,也可以被其他过程访问,这给程序设计带来了不安定因素,一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。
3)分析和设计体系不一:结构化分析的结果是数据流图,结构化设计的结果是模块结构图。二者的表示体系不一致,分析文档很难与设计文档对应,所以从分析到设计的“转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。
4)开发过程复杂: 由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序,而且往往不能对数据的安全性进行有效的控制。如果程序进行扩充或升级,也需要大量修改函数,因此结构化程序的可重用性不好。要使数据与程序始终保持兼容,已成为程序员的一个沉重的负担。
2 面向对象分析与设计
2.1 面向对象的基本思想
面向对象方法的出发点是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。
面向对象是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。它打破了传统的代码、数据分离做法,将一种数据结构和操作该数据结构的方法捆在一起,封装在一个程序内,实现了数据封装和信息隐藏,通过“操作”作为接口实现信息传递。对外部来说,只知道“它是做什么的”,而不知道“它是如何做的”,使得数据封装、信息隐藏、抽象代码共享等软件工程思想得到充分体现。
2.2 面向对象的重要特征
1)抽象:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。
2)类和对象:“类”是面向对象语言中的一种抽象数据类型。面向对象方法认为客观世界是由各种对象组成的,复杂的对象可以由比较简单的对象以某种方式组合而成。例如人、车、学校、球场、商店、螺丝钉等都可以看做是对象。对象按照不同性质可以划分成各种对象类。“对象”可以理解为“类”的一个实例,每个对象都有自己的属性(状态和特征)和方法(行为)。
3)继承: 即特殊类的对象拥有其一般类的全部属性与服务。由于具有“继承”性这个特点,使得程序员对共同的属性以及方法只说明一次,并且在具体的情况下可以扩展细化或修改这些属性及方法。
4)封装:表示对象状态的数据和实现各个操作的代码,都被封装在对象里面,它与外界的联系是通过对象的对外接口(方法)实现。外界不需要关心对象是如何进行各种细节处理。
5)多态:指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。就如不同的对象,收到同一消息可以产生不同的结果。
2.3 面向对象分析(Object Oriented Analysis OOA)
面向对象分析是面向对象软件工程方法的第一个环节,OOA的任务是把对问题域和系统的认识理解,正确地抽象为规范的对象(包括类、继承层次)和消息传递联系,最终建立起问题域的简洁、精确、可理解的面向对象模型,为后续的面向对象设计和面向对象编程提供指导。面向对象分析方法可以描述为:OOA=对象+类+继承+消息传递。
面向对象分析通常建立三种模型:对象模型、动态模型、功能模型。其中,对象模型描述了系统的静态结构,在第一轮迭代中可能只确定类的名称和类间的关系。动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。功能模型表明了系统中数据之间的依赖关系,以及有关数据的处理功能,它有一组数据流图组成。
面向对象的分析过程实际上是依次建立对象模型、动态模型、功能模型,之后反复迭代,细化类的属性和服务(方法)。之后可以根据需要,再按此过程逐渐迭代细化。
2.4 面向对象设计(Object Oriented Design OOD)
1)OOA和OOD采用一致的概念、原则和表示方法,二者之间不存在鸿沟,不需要从分析文档到设计文档的转换,二者之间也不强调严格的阶段划分。能体现二者之间关系的是软件生命周期模型——喷泉模型(如图1),其中分析与设计没有严格的边界,它们是连续的、无缝的、允许有一定的相交。在分析阶段所获得的信息,不仅是设计阶段的输入,同时也是设计阶段的一个完整部分,分析得到对象及其相互关系,而设计则是解决这些对象及其相互关系的实现问题。
OOA与OOD的区别主要是,OOA与系统的问题域更加相关,OOD与系统的实现更加密切;OOD是对OOA所得出的对象模型的直接细化和抽象,得到可直接实现的类图。
2)面向对象设计可看作是面向数据流图与面向数据结构的结构化方法的统一,把数据及其操作封装,再取个名字为对象。对象是高性能的数据,整个程序的执行就是若干对象彼此通信。这种以对象为中心的模块,不但内聚、耦合性能良好,而且适于并发。这样,系统的设计就可看成把系统所要求解的问题解释为一些对象及对象间消息传递的过程。
2.5 面向对象方法的优点
面向对象技术较之与传统的结构化方法有其独到之处:
1)可重用性。可重用性是面向对象软件开发的一个核心思路。通过类的继承关系,使公共的特性能够共享,简化了对象、类的创建工作量,增加了代码的可重性。另外,重用经过测试的代码还可以使产生额外错误的可能性达到最小。
2)可扩展性。可扩展性是对现代应用软件提出的又一个重要要求。类的继承性使类能反映现实世界的层次结构,多态性反映了现实世界的复杂多样。类的继承性和多态性使软件编码具有良好的可重用性和可扩展性。无需修改源代码就可以使软件功能容易扩充和修改。
3)数据保护。数据和操作数据的算法不再分离,它们被封装在一起,对象内部的行为实现细节被隐藏。封装防止了程序相互依赖性而带来的变动影响。
4)可管理性。面向对象的开发方法采用类作为构建系统的部件,以对象作为系统的基本组成单元,使整个项目的组织更加合理、方便,因为归纳事物、划分成类进行管理符合人们在认识和管理客观世界的习惯思维方式。
3 结束语
结构化和面向对象是软件工程的程序设计方法中最本质的思想方法。结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块。它以过程为中心,强调的是过程,强调功能和模块化,通过一系列过程的调用和处理完成相应的任务。面向对象编程以对象为中心,是对一系列相关对象的操纵,发送消息给对象,由对象执行相应的操作并返回结果,强调的是对象。理论上,面向对象的程序设计方法将产生更好的模块内聚和耦合特性,使得软件更易于重用与维护。但在实践中程序设计方法关注软件生命周期的各个环节,从需求分析、总体设计到编码、测试和维护。同时设计方法在各个阶段需要工具和环境的支撑,因此在选择程序设计方法时,需要综合考虑这些因素。
参考文献:
[1] 郭溪川.对比分析面向对象方法与结构化方法[J].农业网络信息,2006(11).
[2] 郭燕慧.面向对象软件分析设计与测试[M].北京:科学出版社,2004.
[3] 王德军,郝永芳.结构化程序设计方法与面向对象的程序设计方法的比较[J].铁路计算机应用,2003,12(11).
[4] 张世庆.结构化程序设计与面向对象[J].丹东纺专学报,2003,10(3).
[5] 张莉,裘国永.结构化方法与面向对象方法的比较分析[J].陕西师范大学学报:自然科学版,2001,29(2).
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-244-98959-1.html
上一篇:数字音频录音棚的构建研讨
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用