传统软件工程与面向对象分析的区别.docx
传统软件工程与面向对象分析的区别传统软件工程与面向对象的区别 摘要:自然语言和编程语言之间的鸿沟,是软件开发过程中最难跨越的阶段早期的软件开发所面临的问题域比较简单从认识清楚要解决的问题,到把这种认识用程序表达出来,还不是很困难的事情。软件危机的出现,促进了软件工程学的形成和发展由于面向对象编程语言的发展,面向对象的软件被设计成一系列的对象及其之间通过消息的相互作用,这些对象从根本上形成了问题的模型,并由这些对象共同作用于一个解决方案。面向对象的程序设计又提供了信息隐蔽、继承、多态和动态绑定等机制。这种软件开发方法固有的特性,给软件测试理论、技术、方法等方面带来了巨大的影响。 关键字: 程序 软件 面向对象 软件工程 Abstract:The gap between natural language and programming language is the most difficult in the software development process across the stage.The problems faced by early in the software development domain is relatively simple.Recognize clearly problems to be solved, this understanding program expressed, is not very difficult thing.Software crisis, promote the formation and development of software engineering.In order to facing to the development of the object plait distance language, face to the software of object to be design a series of object and it passes the interaction of news, these objects by the root became the model of problem, and from these object common function are at a solution.The program design which faces to object provided an information again concealment, inherit, many Tais and dynamic state bind settle etc. mechanism.This kind of method inherent property of the software development, give software test the theories, technique, method.etc. brought huge influence。 Keywords: Program Software object-oriented software engineering 1、传统软件工程方法。 传统方法学1在软件开发过程中占据相当大的比重,因为其悠久的历史而为很多软件工程师青睐。传统方法学又称生命周期方法学或结构化范型。一个软件从开始计划起,到废弃不用止,称为软件的生命周期。在传统的软件工程方法中,软件的生存周期分为需求分析、总体设计、详细设计、编程和测试几个阶段。 传统方法学使用的是结构化分析技术来完成需求分析阶段的工作。软件工程学中的需求分析具有两方面的意义。在认识事物方面,它具有一整套分析、认识问题域的方法、原则和策略。这些方法、原则和策略使开发人员对问题域的理解比不遵循软件工程方法更为全面、深刻和有效。在描述事物方面,它具有一套表示体系和文档规范。但是,传统的软件工程方法学中的需求分析在上述两方面都存在不足它在全局范围内以功能、数据或数据流为中心来进行分析。这些方法的分析结果不能直接地映射问题域,而是经过了不同程度的转化和重新组合。因此,传统的分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难。 在总体设计阶段,以需求分析的结果作为出发点构造出一个具体的系统设计方案,主要是决定系统的模块结构,以及模块的划分,模块间的数据传送及调用关系。详细设计是在总体设计的基础上考虑每个模块的内部结构及算法,最终将产生每个模块的程序流程图。但是传统的软件工程方法中设计文档很难与分析文档对应,原因是二者的表示体系不一致,所谓从分析到设计的转换,实际上并不存在可靠的转换规则,而是带有人为的随意性,从而很容易因理解上的错误而留下隐患。 编程阶段是利用一种编程语言产生一个能够被机器理解和执行的系统,测试是发现和排除程序中的错误,最终产生一个正确的系统。但是由于分析方法的缺陷很容易产生对问题的错误理解,而分析与设计的差距很容易造成设计人员对分析结果的错误转换,以致在编程时程序员往往需要对分析员和设计人员已经认识过的事物重新进行认识,并产生不同的理解。因此为了使两个阶段之间能够更好的衔接,测试就变得尤为重要。 软件维护阶段的工作,一是对使用中发生的错误进行修改,二是因需求发生了变化而进行修改。前一种情况需要从程序逆向追溯到发生错误的开发阶段。由于程序不能映射问题以及各个阶段的文档不能对应,每一步追溯都存在许多理解障碍。第二种情况是一个从需求到程序的顺向过程,它也存在初次开发时的那些困难,并且又增加了理解每个阶段原有文档的困难。 传统软件工程方法面向的是过程,它按照数据变换的过程寻找问题的结点,对问题进行分解。由于不同人对过程的理解不同,故面向过程的功能分割出的模块会因人而异。对于问题世界的抽象结论,结构化方法可以用数据流图,系统结构图,数据字典,状态转移图,实体关系图来进行系统逻辑模型的描述,生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。 传统软件工程方法学强调以模块为中心,采用模块化,自顶向下,逐步求精设计过程,系统是实现模块功能的函数和过程的集合,结构清晰,可读性好,是提高软件开发质量的一种有效手段。结构化设计从系统的功能入手,按照工程标准,严格规范地将系统分解为若干功能模块,因为系统是实现模块功能的函数和过程的集合。然而,由于用户的需要和软硬件技术的不断发展变化,作为系统基本组成部分的功能模块很容易受到影响,局部修改甚至会引起系统的根本性变化。开发过程前期入手快而后期频繁改动的现象比较常见。 当然,传统的软件工程方法学也存在很多的缺点,主要表现在生产效率非常底,从而导致不能满足用户的需要,复用程度低,软件很难维护等。虽然如此,传统方法学仍然是人们在软件开发过程中使用的十分广泛的软件工程方法学,在开发某些类型的软件时也比较有效。因此传统软件工程方法学的价值并不会因面向对象方法学的出现而减少,并且它还是学习面向对象方法学的基础。 2、面向对象的分析与设计。 面向对象语言更接近人的思维,面向对象程序的主要结构特点是:第一,程序一般有类的定义和类的使用两部分组成,在主程序中定义各个对象并规定它们之间传递消息的规律;第二,程序中的一切操作都是通过面向对象发送消息来实现的,对象接收到消息后,启动有关方法去完成相应的操作”。下面就是一些有关面向对象语言的对象、状态、消息、类、以及面向对象语言的三个重要的特征,继承、封装和多态2。 对象,对象由保存对象属性的数据和可以施加于这些数据的操作封装在一起构成的整体。对象是类的实例,对象给类以生命,类想要做的事情必须通过建立对象和在对象仁进行操作而实现。 消息,消息是对象的操作将要执行的一种请求,是一个对象要求另外一个对象执行某个功能操作的规格况明,通过消息传递。能完成对象之问的相互请求或相互协作。除了需要一个操作的名字,消息还可包含一些值,它们常常在操作被执行时使用。消息的接收者也可以将某个值返回给消息的发送者,消息传递使程序的控制流错综复杂,不易于理解和把握,给测试带来了一定的困难。 类,类是面向对象中基本构造单元,是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作,也就是方法。在面向对象的程序中,任何被描述的概念最初都必须被声明为类,然后创建由该类定义的对象在一个类中,每个对象都是类的实例,它们都可使用类中提供的函数。类和对象之间的关系是抽象和具体的关系,类是对多个对象进行综合抽象的结果。 继承,继承是面向对象程序设计的一个重要特征,它允许在既有类的基础上创建新的类,新类可以从一个或多个既有类中继承函数和数据,而且可以重新定义或加进新的数掘和函数导出类或子类。一个类对另一个类的依赖,使得己有类的说明和实现可以被复用。 封装,封装就是对象把一些属性和方法封装起来,将私有元素和实现操作的内部细节隐藏起来,并能管理自己的内部状念。外部只能从对象所表示的具体概念、对象提供的服务和对象提供的外部接1:3来认识对象。通过向对象发送消息来激活对象的自身动作,达到施加特定操作的目的。 多态,多态就是不同的对象收到相同的消息,产生不同的动作。通俗的晚,就是一个名字定义不同的函数,这些函数执行不同但又类似的操作,即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。多态性可以分为静念多念性和动念多态性,在静态多态性中,绑定是在编译时进行的,而动态多态性用隐式运行时的绑定和运行时的类型检查代替了显示的编译时的绑定和静态类型。 3、面向对象分析与设计和传统软件工程的比较。 面向对象的分析OOA(Object-Oriented Analysis),OOA强调直接针对问题域客观存在的各项事物设立OOA模型中的对象问题域有哪些值得考虑的事物,OOA模型中就有哪些对象00A对问题域的观察、分析和认识是很直接的,对问题域的描述也是很直接的它所采用的概念及其术语与问题域中的事物保持了最大 程度的数据一致,不存在语言上的鸿沟。 面向对象的设计OOD(Object-Oriented Design),OOD是针对系统的一个具体的实现运用OO方法它与OOA采用相同的表示法和模型结构OOA与00D采用一致的表示法是面向对象的分析与设计优于传统的软件工程方法的重要因素之一。这使得从OOA到OOD不存在转换,只有很局部的修改或调整,并增加几个与实现有关的独立部分,因此OOA与OOD之间不存在传统方法中分析与设计之间的鸿沟,二者能够紧密衔接,大大降低了从OOA到00D的难度、工作量和出错率 面向对象的编程OOP(Object-Oriented Programing),OOP工作就是用同一种面向对象的编程语言把OOD模型中的每个成分书写出来即用具体的数据结构来定义对象的属性,用具体的语句来实现服务流程图所表示的算法OOP阶段产生的程序能够紧密地对应00D模型;OOD模型中一部分对象类对应OOA模型,其余部分的对象类对应与实现有关的因素;OOA模型中全部类及对象都对应问题域中的事物这样的映射关系提高了开发工作的效率和质量 传统软件工程采用面向过程,即结构化程序设计方法,有很多成功的例子,也有失败的例子。面对越来越复杂的软件系统, 传统软件工程已经不能胜任, 在实践中, 人们呼唤能适应复杂系统开发的软件工程方法学和软件开发技术的诞生, 面向对象软件工程应运而生。面向对象方法的出现,是人类认识事物的一个返朴归真的过程面向对象方法不论是从软件开发阶段的开发效率上说,还是从软件维护阶段的系统维护成本考虑,都要远远优于传统的软件工程方法所以我们的软件开发人员要充分重视面向对象方法在实践中的运用 参考文献 1 张俊兰,王文发等.软件工程M.西安:西安交通大学出版社,2009 2 麻志毅.面向对象分析与设计M.北京:机械工业出版社,2008.3