《面向过程、面向对象、面向组件、面向服务软件架构的分析与比较(共16页).doc》由会员分享,可在线阅读,更多相关《面向过程、面向对象、面向组件、面向服务软件架构的分析与比较(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上面向过程、面向对象、面向组件、面向服务软件架构的分析与比较 摘要:软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,每一步都体现了不断抽象、更加贴近业务实际的发展趋势。当前软件发展正处于从面向组件思想向面向服务思想的跨越阶段。本文深入分析了面向过程、面向对象、面向组件、面向服务架构,得出相关的优缺点。关键字:面向过程,面向对象,面向组件,面向服务1 背景当前,信息系统的发展越来越明显地呈现出以下特征:软件系统越来越庞大,但是软件系统内部组成模块的规模却越来越小;软件系统的功能越来越复杂,但是系统的开放性却越来越好。信息系统软件正向着不依赖于特定的硬件和
2、操作系统以及具有高度可重用性的方向发展。在这种情况下,人们对这种大型复杂软件产品的质量和开发速度都有了更严格的要求,传统的开发方法已经难以满足这种需求。首先,我们来分析一下几种传统的系统开发方法。1)自底向上法自底向上法出现于早期的计算机管理应用系统,即在进行系统分析和设计时自下而上,先从底层模块做起,然后逐步完成整个系统。自底向上法使得系统的开发易于适应组织机构真正的需要;有助于发现系统的增长需要,所获得的经验有助于下一阶段的开发,易于控制和管理。但由于方法的演变性质,自底向上法使系统难以实现其整体性;同时由于系统未进行全局规划,数据一致性和完整性难以保证;而且为了保证系统性能的需求,往往要
3、重新调整,甚至重新设计系统。2)自顶向下法随着信息系统规划的扩大和对开发经验的总结与归纳,自顶向下的系统分析方法论逐步得到了发展和完善。自顶向下法要求开发者首先制定系统的总体规划,然后逐步分离出高度结构化的子系统,从上至下实现整个系统。运用这类方法可以为企业或机构MIS的中期或长期发展规划奠定基础,同时支持信息系统的整体性,为系统的总体规划、子系统的协调和通信提供保证。但它同样也存在缺点:对系统分析、设计人员要求较高,在大系统中,对下层系统的实施往往缺乏约束力,开发的周期长,系统复杂,成本较高。3)快速原型法原型法的核心是原型,即模型,是系统的早期可运行版本。随着用户或开发者对系统理解的加深,
4、不断地对原型进行补充和细化。系统的定义是在逐步发现的过程中进行,这就是快速原型法的基本出发点。快速原型法的开发过程体现了不断迭代的快速修改过程,是一种动态定义技术。快速原型法的最大优点是能够大大减少软件系统的后期维护费用,使系统功能正确反映用户的需求。原型本身及这种方法的不足之处在于,如果原型本身功能设置不齐全、性能不好,会导致原型的设计和使用超出预期的花费和时间。另一个关键不足是原型法需要一个合适的软件开发环境,以便原型能直接转换成现实的系统。以上方法各有其优缺点。“自底向上”法只重局部而忽视了对整体的把握;“自顶向下”法开发周期长、见效慢、缺乏灵活性和适应性;快速原型法虽然具有很明显的优越
5、性,但因其依赖于快速开发工具的支持,又不能不令许多系统开发者望而却步。因此通过对软件构建技术的研究,人们提出一种新的开发方法基于组件的开发方法(eomponent一basedDevelopment,CBD)。采用CBD法开发系统的过程与搭积木的过程很类似,一般是先构筑系统的总体框架,然后构造各个组件,并依次把组件安装到系统中去。大部分的信息系统,在功能上有类似之处,因而利用软件的重用技术就可以把开发过程大大简化,CBD法的提出正是基于这种设想。通过这种方法,人们就把一个庞大的应用程序分成多个模块,每个模块保持一定的功能独立性,在协同工作时,通过相互之间的接口完成实际的任务。我们把每一个这样的模
6、块称为组件,一个设计良好的应用系统往往被切分成一些组件,这些组件可以单独开发,单独编译,甚至单独调试和测试。当所有的组件开发完成后,把它们组合在一起就得到了完整的应用系统。当系统的软硬件环境发生变化或者用户的需求有所更改时,并不需要对所有的组件进行修改,而只需对受影响的组件进行修改,然后重新组合得到新的升级软件。组件技术是在模块化系统、结构化设计和面向对象技术的基础上发展起来的,被认为是面向对象技术之后的软件开发的标准方法体系。基于组件的软件工程 (eomponent一basedSoftwareEngineering,CBsE)可提高软件的可重用性,使软件开发摆脱小作坊的工作模式,按照大规模的
7、工业化方式进行,是软件开发方法发展的必然结果。从目前的技术发展趋势来看,基于复用的软件构造技术受到广泛关注;大规模应用系统集成技术成为主要技术热点;开放化、标准化成为主要潮流。随着信息技术的日益发展,现代企业对生产管理信息化的需求和依赖越来越明显,不断加大投入进行企业信息系统的建设。与此同时,随着硬件系统、操作系统平台的不断增加以及企业网络的飞速蔓延,软件系统间的异构度和复杂度也不断增加,这就使得如何整合彼此分散的自治信息系统以提高其利用效率成为企业信息化建设中必须面对的重要课题。在最初的信息化建设过程中,企业应用大多是用来替代重复性劳动的一些简单设计。当时并没有考虑到企业数据的集成,惟一的目
8、标就是用计算机代替一些孤立的、体力性质的工作环节。然而,使用传统开发方法所形成的软件系统是刚性的,也就是说系统严格按照预先设定的目标进行设计,各功能模块按照确定的顺序执行,一旦开发完成并投入运行,就是固定不变的,不能在使用过程中进行调整和改变。如果数据结构或者业务逻辑发生了改变,就必须对所有相关的软件模块、数据源和消息逐个进行修改。为了应对这种局面,上世纪年代末兴起了企业应用集成的技术潮流,即通过定义企业私有的数据结构、通讯协议以及适配器接口,来联系横贯整个企业的异构系统、应用、数据源等,完成在企业内部的数据库、数据仓库以及其他重要的内部系统之间无缝地共享和交换数据的需要,从而消除信息孤岛。然
9、而,随着这种方法的广泛实施和应用,被证实缺乏必要的灵活性和适应性,扩展性较差,从而无法取得与大量投入相匹配的收益效果。随着对信息整合的需求和认识的深入,近年来面向服务体系结构的概念逐渐走入人们的视野并被广泛接受。面向服务体系结构采用服务请求的方式,通过将业务应用功能以服务的形式提供给最终用户应用或其他服务,使软件系统向“柔性化”迈进了一大步。回顾软件开发的演化过程,我们可以看出面向服务体系结构的出现有其必然性:从最初面向机器语言的开发模式到面向过程的开发模式,软件开发通过独立于机器的程序语言如等不再依赖于不同平台的机器语言,实现了代码的重用;随后面向对象开发模式的出现使人们可以通过等语言以更接
10、近现实的对象来表述完整的事物,即进行对象的重用;此后随着软件开发规模的扩大,在涉及分布式、异构等复杂特征的环境中,出现了基于等技术的面向组件模式,软件开发的重用也上升到组件的级别;进入世纪,当软件的开发面对更加复杂的环境和更加灵活多变的需求时,人们开始将应用程序以服务的形式公布出来供别人使用,而完全不需要去考虑这些业务服务运行在哪一个架构体系上,这就是面向服务的体系结构。相对于传统的代码重用,对象重用,和组件重用,面向服务体系结构更加着重于业务级的应用,即服务的重用。2 面向过程的分析概述“面向过程”是一种以事件为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现
11、,使用的时候一个一个依次调用就可以了。2.1面向过程的程序设计思想:程序算法+数据结构。编写一个程序,算法是核心,算法是千变万化的,但是重点掌握其中一些基本的典型的算法以及算法思考的方法从而能推及一些其他的算法。2.1.1 算法:算法就是为解题而编写程序的方法和步骤(1) 解决问题的方法千变万化,也是思考的重点,需要掌握一些基本的方法及推导原理,具有推及其他方法的能力;(2) 根据Qb的结构化特点,解决问题的基本步骤是顺序结构,即根据题目或问题要求顺序思考,在顺序解决问题过程中结合使用循环结构和条件(选择)结构,这可以看成是算法的程序结构;(3) 具有将算法转换为程序模型的能力。2.1.2 数
12、据结构:在程序结构和方法中需要使用不同的数据结构:变量 数组 记录等。基本结构较简单,但是要具有根据问题,使用不同数据结构将解决问题的算法模型转换为程序模型的能力。比如一个单个的量我们设计一个不同类型的变量,具有一定联系和顺序的变量我们设计成一维数组,具有表结构我们可以设计成二位数组,或是具有两个相关的属性也使用二维数组,而三个属性或是多个二维数组构成三维数组。一般程序分为三大块,输入数据部分、处理数据部分,输出数据部分。每一块可以进行细分,采取模块化的设计思想。其中处理数据部分是核心。以上的解决问题的算法主要指处理数据部分。3 有关面向对象 “面向对象”(Object Oriented,简称
13、OO)是一种以事物为中心的编程思想。在面向对象分析设计方法中,基本的构成是类和对象。对象是封装了描述其属性的数据(对象的状态)以及可以对这些数据实施的操作(方法、行为),对象之间通过发送消息相互协作。类是一组相似对象的描述,描述了该类对象所具有的共同特征。面向对象的程序设计又提供了信息隐蔽、继承、多态和动态绑定等机制。3.1 面向对象的方法学3.1.1 软件建模方法碰到的问题和分析在计算机知识的学习和使用过程中,有很多接触到面向对象的概念,其中最主要的是面向对象的开发语言,使用类的概念对对象进行封装,元素或者实体用类来表示,定义类概念上的数据和操作方法。面向对象对程序的结构,代码功能上的封装和
14、安全性都有很大的提高。但面向对象的概念,最为一种思想,其应用远不止是在计算机程序语言领域,其它的过程和领域中也有着比较广泛的应用。应用于软件开发方法上,面向对象的思想同样有很多好处。实际的软件应用开发中,互联网相关的开发是比较多的一类开发。其中有的系统可以很复杂。进行这类开发是,网页设计过程,经常需要对原有的代码进行编辑修改,但我们最多只能重复使用代码,把原有相近的代码复制一份,用到新的开发工作中去,而不能直接重复的使用原有的组件。而使用原来的代码有时会牵涉到对复制的代码进行改动,造成代码冗余的同时,可能因为对原来的代码模块不够熟悉,复制代码上的修改不够全面等原因,带来新的代码质量问题,采用面
15、向对象的方法,通过构建和测试基本的对象,可以建立一个经过严格测试的代码库和可靠的组件,从而无需在以后的使用中对每个组件重新测试,而仅需对组件的整体进行测试。这种方法有助于加快开发的进度,提高代码的质量。面向对象的软件开发方法是解决软件设计过程中所出现问题的基础性的解决方案,它可以使我们无需做重复的工作,让我们的工作变得更有效率。即进行可重复使用性设计,软件的总体框架中可以设计在一起用同一个功能模块实现的不同部分也可以通过面向对象的设计,和模块的复用来实现重复利用,减少开得重复工作,提高开发效率。比如设计可重复使用的代码,一项功能可以有一段相对独立的代码来完成。如果这项功能在系统中多个位置调用到
16、,这段代码就可以重复利用。60年代末开始,计算机软件开发领域,出现了“软件危机”,其主要表现是软件质量变差、成本及开发进度变得难以控制,软件产品的维护工作也变得很麻烦。这些变化是随着计算机应用的规模不断变大,领域范围不断广泛,软件应用不断复杂产生的,这一危机的根本原因在于结构化的方法强烈依赖于系统逻辑模型的完整性描述,传统的软件开发模式方法是由最简单和一般的情况出发,建立在系统逻辑模型完整性描述和系统是静态不会变动的基础之上,这样,传统的方法就难以做到适应系统的动态变化与扩展,使系统开发质量和效率都不高、而且容易产生开发到中间的系统由于碰到难以解决的问题而使前面的工作回滚,浪费资源甚至有时被迫
17、取消系统的开发。开发的周期很长,费用也是很高,传统结构化设计方法中主要是是自顶而下的瀑布模式的开发方法,在其设计中,使数据结构的设计仅服从于当前功能实现的要求,为以后的扩充和重用设置了巨大的障碍。我们都知道,就软件开发而言,面向对象技术,简称的确带来革命性的变化,因为面向对象技术是一种完全崭新的软件开发和程序设计技术,其所开发的程序是面向对象程序,直接描述客观世界的对象及其相互关系。随着技术的飞速发展及计算机大规模的应用和普及,软件的应用范围越来越广,规模也是越来越大,要解决的问题越来越复杂,人们对软件的要求也越来越高,包括纯粹软件功能上的,同时还有软件易用方面上的,既要求实现一项功能,又要使
18、得这项功能在使用上方便好用。传统的软件开发技术根本无法满足现实需要,只能通过引入像面向对象的思想和分析方法以及使用后来的开发方法来实现这样的软件开发。在开发过程中,传统的程序开发方法使用的是面向过程、按顺序进行的机制,其缺点是程序员始终要关心什么时候发生什么事情,要求程序员对开发的很对细节都很清楚,使得开发的设计工作和开发的具体实现没有很好的分离,应用程序的界面都需要程序员编写语句来实现,对于图形界面的应用程序,只有在程序运行时才能看到效果,一旦不满意,还需要修改程序,因而使得开发工作非常繁琐。3.1.2 建模问题的分解和面向对象的方法学面向对象设计方法的主要特点是封装性、继承性和多态性。封装
19、是对对象内部的结构而言的,一个对象,在本文后面的部分会具体介绍面向对象开发方法中对象的感念。这里可以简单的把对象理解为构成系统的一个实体元素,该实体元素对应着系统中的某一部分元素,有着自身的一些属性和在这些属性上的一系列方法和行为。面向对象的开发方法同样是以封装的思想对系统作分解。一个复杂的系统在高的设计层次上可以看作是由几个元素组成。系统实现的所有功能都是由这些组成系统的元素来实现的。这些元素有自身的特征和他们的相互作用关系和行为,这些就构成了整个系统。面向对象框架是构成一类特定领域软件可复用设计的一组相互协作的类。框架将设计分割成一系列的抽象类和具体类,并定义它们各自的责任,用它们之间的协
20、作关系以及控制流程来规定应用程序的体系结构。框架预定义了这些设计参数,以便于应用程序设计者能集中精力于程序本身。框架记录了该特定领域的共同的设计决策,因此,框架更强调设计复用,尽管框架包含具体的立即可用的子类。应用程序的大部分设计和代码将来自于它所使用的框架或受其影响。使用面向对象的分析方法和分层次的分析设计手段,系统就可以划分为相对独立的很多模块,每个模块有着自己的设计和实现要求,大部分的开发人员都可以把注意力集中在模块的开发工作上去,有一部分工作人员负责最后模块的组织和集成。这样复杂的系统就可以分解成相对规模较小,结构简单的模块系统,如果有必要,可以在应用这样的方法对模块系统进行分解,使整
21、个系统的结构清晰,而开发工作的进度也容易管理。3.2 面向对象的思想3.2.1 基本思想和对象的概念面向对象的思想是把系统的关系看成是由组成系统的实体对象以及它们之间的关系组成。面向对象是自结构化方法以来对系统开发过程的最重要的变革,在世纪年代,它代替了结构化方法而成为软件开发的主要方法。这种开发策略基于下面的概念,即系统可以由一系列称作对象的可重用组件来构建。对象是面向对象系统的基本思维单位,与结构化方法里分离数据和功能不同,对象包含了它们两者,即面向对象的方法中没有把数据和数据上的方法操作分离开来,相反是把二者结合起来看。对象的思想是具有一定的属性,在软件系统的设计中表现为数据和行为,即软
22、件开发中定义在这些数据上的操作。它的实质是从系统组成的角度对系统进行分析,利用对象的单位作为基本构造单元,使开发中,设计出的软件系统能够变得模块化、可复用性能好、易于维护,降低开发维护费用,优化软件结构和提高软件质量。面向对象方法的基本思想是,从现实世界中客观存在的事物,即可以映射成软件开发中的对象的系统元素,出发来构造软件系统,并在系统中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题。这些问题所涉及的业务范围称作该软件的问题域。面向对象方法强调直接以问题领域,即现实应用领域,中的事物为中心,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以
23、使系统直接地映射问题应用领域,保持问题域中事物及其相互关系的本来面貌。现实的世界中,任何一个东西我们都可以看作是一个对象。一辆汽车可以是,一扇门可以看作是对象。汽车本身有颜色,大小,品牌,位置,运动与否,运动的方向,运动的速度等属性。再看一扇门,门有大小,安装在那个房间,门的形状和其它样式,门的状态是开,关了没锁上,还是锁上等属性。软件系统的开发都是针对于一个具体的现实应用问题而言的,只是有些应用情况比较复杂,对应的现实应用实体可能会很抽象,但不管是对应的现实应用的实体是不是具体的,这些实体都可以上述的汽车和门一样看作是对象。也就是说,我们要开发的一个系统可以看成是要用计算机管理一个现实的对象
24、。现实的对象到计算机软件开发过程中所讲的对象还经过了一个抽象和简化的过程。把一辆汽车放在计算机面前,计算机是很难直接去管理它,所以计算机要用自己可以识别的方式去表示这辆汽车,这个过程也就是把现实对象抽象成计算机软件概念上对象的过程。同时,这个过程也牵涉到对现实对象属性信息的简化。现实中的汽车其本身的属性是不可列举的,我们用再多的信息去记录一辆汽车,只要不是把这辆车拿去收藏,就很难根据记录信息去完全重现一辆完全没差别的汽车。从另外一个角度讲,在软件开发的过程中,软件系统的产品并不需要掌握现实对象的所有信息,也不能去掌握所有的信息。用计算机技术去完全模拟出来一个真人的结构和行为,这些的工作量可能让
25、现在计算能力最强大的机器去做也很难完成。而如果我们用一个软件来为汽车指路,告诉它在那个路口怎么走,最后到达目的地。这个应用里,汽车的信息之需要知道汽车的位置,也许一些与道路相关的信息,比如某段特殊的道路是否允许这个类型的汽车通过。而对于汽车的颜色,汽车的新旧程度,汽车的购买时间的等信息在这个软件应用中是用不到的,所以在把汽车抽象到软件开发过程中时,后面的信息就可以省略来简化对象。这样我们可以对软件开发过程中的对象有大体上的了解,和现实中的对象实体类似,软件的对象可以是对应着现实中的某个对象,也可以对应着软件过程中抽象的一些内容,这些内容可以用对待现实中对象实体的方法相同对待。从实际的应用领域抽
26、象和简化后得到软件应用开发中的对象。这些对象包含了软件系统所需要的各方面属性,同时在这些属性上的方法也包含在对象体中。3.2.2 面向对象的结构和对象定义面向对象的结构有模块化的特点。框架通过封装多变的实现细节于固定的接口之后,提高了软件的模块性。框架通过设计和实现的变化带来的影响进行局部化来改善应用程序的质量,这有助于理解和维护已有的软件,面向对象中的对象组建可以复用。框架提供的固定接口被定义成为对象相互关系和行为概念上的组件,并可被用来创造新的应用程序,这样就提高了可复用性。框架的可复用性利用了有经验的开发者在该特定领域中的专业知识和开发努力,避免了后继开发人员针对该领域中的同一问题和需求
27、做重复的劳动。框架组件的复用能大幅度地提高后继开发人员的产量,同时还能够改善软件的质量、性能和可靠性。面向对象的结构有可扩展的特征,框架通过提供显式的钩子方法,允许应用程序来扩展其固定接口,这样就提高了框架的扩展性。钩子方法系统地为框架的固定接口和由于不同的需求而产生的应用程序行为之间进行减少藕合。框架的这种扩展性对于保证及时地定制新的应用程序服务和特征是十分必要的。面向对象的设计。面向对象的设计是对一个具体的实现应用面向对象方法,其中重要的一个步骤是对象的定义和对象的表示和实现开发做出系统的体系结构图。要求首先对系统的流程和运行方式有比较清楚的了解。把系统表示成不同的元素对象和这些对象之间的
28、行为和相互作用。定义元素对象之间的联系行为,一个对象在外面看来的样子,以及外界可以对之进行的操作。同时联系行为包括对象之间的作用行为集合。什么时候,什么条件下对象对另外的对象发出特定请求。这样,完成了系统对象的定义,系统地开发工作就成为很多个对象的开发工作了。如果定义好的对象还是很复杂,对象的定义可以在对定义好的对象继续进行,直到对象的复杂程度较小,对象可以用较简单和明显的开发方法来实现为止。这样就进入对象的实现和开发过程中了。对象的定义给出了对象的接口和对象的行为,在对象的开发中要做的工作就是实现对象的定义。根据对象的定义设计出对象的属性,然后通过对这些属性的操作来实现对象定义要求的方法。这
29、些完成之后就可以通过一些模拟测试,检查对象自身开发中的质量和实现进度控制。3.3 面向对象的开发3.3.1 面向对象的相关概念面向对象方法从内部结构上模拟客观世界。对象是客观世界对象的直接映射符合人们的思维方式,在面向对象的开发模型中分析、设计和编程阶段是重叠的核心概念“对象”在开发的各个阶段均被使用,相对结构化方法来说可以减少工作量和映射误差。面向对象方法中对象不仅包括数据,还包括对数据的操作方法对象之间的通讯是通过发送消息来完成的,由于采用了继承的概念,有利于软件重用所建模型的稳定性比结构化方法高。它更接近人们的思维习惯,所以容易让人们接受。面向对象的软件开发方法利用这种在思维上和人们习惯
30、的相近的特点,是对系统的分析和设计更容易理解,和对系统的结构设计和模块划分变得容易和自然。面向对象的软件开发方法通过对实际应用系统的对象表示,然后再对用对象表示的系统进行实现,来完成软件开发的设计和实现过程。该方法中涉及到的内容包括,用对象化在软件设计中表示应用系统,对实际系统进行抽象,用对象和对象间的静态相互关系表示系统的框架,用对象间的动作和行为来表示系统的行为。系统的对象表示,一个实际的应用系统,通过计算机软件方式的抽象和简化之后,映射到一个软件范围下的对象上面。这一过程是软件开发中的系统的对象表示。这一概念是把系统作为整体来进行对象表示的,我们要开发的一个系统,可以看成是一个对象,用对
31、象的概念表示,它有自身的关于系统应用的属性,和相应的这些属性上的操作。这些操作和方法可能会改变系统对象的属性的状态,而属性状态的改变通过一些操作方法向外提供接口或者是服务。系统结构的对象化,这个概念的含义是把系统的结构,用一系列对象和这些对象之间的相互关系来表示。系统的整体对象下面可以由多个相互联系的分对象组成。这里的对象之间的关系是指静态的关系,在某一时刻,这些关系可能是处在一定状态,随着时间的变化和系统行为的进行,这些关系也会发生变化。在系统的关系里,组成系统结构的这些对象可以是系统包含的各个子系统,这些是系统结构的组成要素,同时它们之间的关系也是构成系统结构的重要组成部分。对象化系统的结
32、构,就包括结构的对象表示和表示对象静态关系。系统行为的对象化,这个过程是对系统中对象行为的定义。依据系统的行为,在一定的比例条件下,系统的对象需要对外界的输入和自身的状态采取一定的行为,使得系统的整体行为按照预定的要求进行。这部分内容是系统对象之间关系的动态变化,一个整体行为可能会涉及到很多个相互联系的对象,对象自身的行为以及对象通过的其它对象接口的调用或者是使用其它对象提供的服务来从组成对象级别的动态变化,实现系统的行为。3.3.2 面向对象的开发过程采用面向实体视角来设计过程才更符合面向对象思想的特点,并能够建立产品在整个生命周期中的渐进目标,产品的阶段性里程碑。该里程碑是产品向完整内容迈
33、进的一次渐进,渐进的内容能够事先被开发的过程清晰定义,并能够在里程碑点处进行验证。采用阶段来分组活动并基于里程碑来实施进度控制的项目管理技术对面向对象的开发依然有效,只不过面向对象的过程的阶段划分与活动定义要以产品为中心进行设计。阶段不再是时序的概念,而是一组紧密祸合的活动,阶段之间的关系可以是顺序、并行与交错的关系。基于上面的分析,面向对象软件开发过程中,设计的关键是标识逻辑上相对独立且物理上可区分的产品实体,分析实现产品内容演进的活动,建立产品阶段性渐进的里程碑目标。软件开发过程产生的工作产品分两大类管理类和产品类。面向对象的过程产生的产品类产品如下:业务描述:由业务调研与分析获得的业务需
34、求描述。产品范围描述:以规格化的方式清晰定义产品应实现的业务需求项,客户与开发者双方的期望包含质量要求、承诺和项目约束等。用例:定义产品的功能需求。原型:体现界面交互的产品原型。验收标准体:现产品能够很好支持业务需要的产品验收测试标准。对象和对象关系视图:定义产品的数据需求与内部结构组成。交互图:分为系统、对象与对象之间以及单个对象内部三个级别建模和设计。客户目标图:刻画对象之间的调用与依赖关系,是架构设计与集成测试设计。的依据源码及其规格源程序及其内含的规格说明测试文档:包含集成测试、产品测试以及验收测试的测试用例及其结果,在路径覆盖率上和边缘情况测试上都有一定要求。最终交付的文档包括维护文
35、档,用户参考手册,安装与管理指南,相关培训资料以及速查手册等。基于面向对象开发方法的应用过程重点包括系统的对象表示,系统结构的对象化和系统行为的对象化等内容。软件开发的难点在于系统分析与设计,而面向对象的过程的不确定性更加大了该项工作对人员依赖的风险。因此,面向对象的软件开发过程的关键内容在于系统的分析系统结构的对象化设计。面向对象方法的工作流程过程中,根据活动的祸合程度以及要开发软件项目的过程和管理颗粒度的需要,开发的工作可以是由几个相互连接的大的阶段和更多的相对比较独立的小的开发阶段组成。每个开发阶段可以设定用于检验开发结果的历程别。相应的软件过程,软件生命周期过程,其中定义了阶段之间的执
36、行关系以及应交付和评审的里程碑产品,依据阶段进行项目进度控制是项目管理的常规方法,管理者可依据项目管理的颗粒度要求来选择大阶段或者子阶段作为项目的监视点。面向对象方法中的领域分析是在给定的领域中,通过分析找出对所有应用程序来说都共同的类和对象,建立领域模型,领域模型中包含了该领域中的需求关系,领域中的相关概念及它们之间的关系,该模型应该集中在领域的实体上而不是实现细节。对软件开发需求的分析和确认,最主要的目标是为了捕获所有有效的需求,给出一个能满足这些需求的理想系统并结合领域分析,找出系统的共同点,给出系统需求说明书,文档化的需求和记录需求变更。面向对象的框架设计包括框架体系结构设计和详细设计
37、。在体系结构设计阶段,结合设计模式,将定义许多抽象类,使得整个系统结构的设计支持更灵活的变化。在详细设计阶段,将描述在体系结构设计中抽象出来的类,并精确地定义它们。面向对象方法中的框架的实现即对框架的抽象类和具体类进行编码,一般采用自顶至下的开发方法。在实现过程中,还必须定义一个完整的实现标准,如编码的统一性。这样做可以使得开发出来的框架更易于被应用程序开发人员所理解和利用。设计后的应用和实现是通过对应用程序进行分析和设计,得到应用程序在该领域的特殊要求,从而扩展框架来实现该应用程序。这一阶段,需要应用程序开发人员对框架进行系统的学习,从而能够有效的使用框架来进行开发。开发的过程中测试是不可少
38、的一部分,该过程一般分为单元测试和集成测试。其中都可以运用面向对象的方法来设计测试用例和执行测试。一个单元是指某个操作、类或包含多个类的模块、甚至整个框架。单元测试又分为结构测试和功能测试。结构测试需要熟悉该单元的内部结构,对单元的代码和分支结构进行测试,主要是验证单元的可靠性。而功能测试则不关心该单元的内部结构,而主要测试单元对特定输入的响应,检查是否符合该单元的功能需求。集成测试则测试这些软件单元集成在一起时,是否能满足整个程序的功能要求。同其它的软件开发过程一样,以上所述的阶段都是相互重叠、不断反复的过程。4 面向过程与面向对象的区别面向过程其实是最为实际的一种思考方式,就是算面向对象的
39、方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际的实现。一般的面向过程是从上往下步步求精。所以面向过程最重要的是模块化的思想方法。对比较面向对象,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。比如拿学生早上起来的事情来说说这种面向过程吧。粗略的可以将过程拟为: (1)起床 (2)穿衣 (3)洗脸刷牙 (4)去学校 而这4步就是一步一步的完成,它的顺序很重要,你只须一个一个的实现就行了。而如果是用面向对象的方法的话,可能就只抽象出一个学生的类,它包
40、括这四个方法,但是具体的顺序就不能体现出来。5 基于组件的复杂系统开发基于组件的软件开发方法(Co叩onentBasedDevelopment)被认为是面向对象的软件工程(ooSE,object-orientedsoftwareEngineering)之后的软件开发的标准方法体系。5.1 基于组件的软件开发方法综述CBD的基本思想就是“分治”,强调将系统分解成松散藕合的组件并独立开发,然后通过接口及脚本语言将它们连接起来。CBD的过程可以简单描述为寻找组件和使用组件装配系统两个阶段,其中寻找组件有两种途径:开发和重用。开发是指系统设计人员针对本身的特征构造组件并实现之,而重用组件则强调使用以前
41、开发过的组件。基于组件的软件开发方法以其重要性和复杂性在学术上引起了广泛的研究。自上世纪90年代以来,出现了基于组件的系统分析和设计方法。面向对象技术的创始人之一Jacobson从理论上进行了探讨,他将CBSE的过程分为Applicationfamilyengineering、Componentsystemengineering和Applieationsystemengineering三步,首先构造完整、分层的体系结构,然后从体系结构中获取一般性和可变性的需求,构造组件系统,最后使用组件系统实现应用系统。OMT(objeetModelingTechnology)中提出的一种基于UML(Unif
42、iedMOdelingLanguage)的Catalysis分析方法更具有可操作性。该方法使用了用例图、交互图、顺序图和组件图等UML的概念精确地描述系统分析与设计过程中的每一个细节,并引入了框架和模式的概念。这种方法充分利用了UML建模的优点。Brown也给出了一种基于合作场景的CBD开发方法,通过研究和分析系统中各种对象之间的合作关系构造出具有较低藕合度的场景,并从中提取相关的角色和类型,构造接口,然后将接口分配到不同的组件以形成组件库,使用者就可以利用组件构造应用系统了。在实际的软件开发过程中,并不是所有的组件都是由系统开发人员自己实现的。开发者可以充分依赖大量已有的通用商业组件(Com
43、ponen七off一the一Shelf, COTS)作为新系统开发的基础。这方面的研究重点在于对COTS组件的识别、评估、选择、修改和集成,从而达到缩短开发周期、降低开发费用的目的。大体上,CBD方法可以将一个软件系统的开发分为3个阶段:应用系统的分析与设计、组件的开发、组件的装配。其中,系统分析和设计是一个领域工程,由领域问题专家根据系统需求建立系统模型,再由系统分析及设计人员对该模型进一步完善,刻画出系统的总体结构,按照组件开发规则定义系统所需的所有组件以及组件的接口说明和组件之间的交互协议;组件开发也叫组件生产,可以重新设计组件,可以将现有的软件封装成组件,也可以从外界(市场或互联网)直
44、接获得,通过这些方式得到的组件均装入组件库中统一管理;组件的装配就是按照应用系统设计中提供的结构,从组件库中选取合适的组件,按照组件接口约定,用组装工具完成应用系统的连接与合成,最后对系统进行各种测试(如集成测试和系统测试等)。这种开发过程如图:应用系统分析/设计系统需求分析软件体系结构领域工程组件生产编制新组件封装现有软件购买组件组件装配组件库基于组件的软件开发技术从根本上改变了软件的生产方式,与传统开发方法相比,它具有很明显的优势:提高了软件的重用率,保护了已有的投资。开发者可以将原有软件运用组件技术封装起来,通过标准的组件接口将旧的程序代码进行包装制作成可以重用的组件,从而保护了软件的投
45、资。降低了对系统开发者的要求,使他们更好地关注业务系统,可以用业务术语,而不是计算机术语来规划、设计和建造应用系统。使开发的系统更加灵活,更加便于维护和升级。组件的模块化程度高,模块藕合度低,开发者在对软件进行改进时,往往只需增加新的接口即可。易于学习和使用。组件的开发一般由组件设计、生产和组装等过程组成,不同岗位的开发者分工明确、术业有专攻,大量的开发人员可以快速投入基于组件的开发过程中。5.2 基于组件的复杂系统的主架构设计在基于组件的软件开发过程中,主架构设计是承接于需求分析的。主架构是保证面向对象的软件项目成功的一个至关重要的要素,它的主要作用是让团队汇聚思想,化解各人需求的冲突,从而
46、创造出软件的一体性(unity)。尤其是基于组件的软件系统,各组件的设计人员对于组件将派上用场的整体环境 (eontext)的基本假设(assumption)和想象如果不能统一,就非常难以将之组装成为一个完美的整体(thewh01e)。TomLove说“软件项目会失败的原因是其需要许多的创作、许多分开设计的组件、许多人员参与、以及跟现有软硬体系统的许多连接点。”由此我们可以知道,主架构的稳定和灵活是保证软件项目成功的关键。5.3 主架构概述关于主架构的定义,一直都没有出现过统一的答案。目前人们最常引用的定义是:SoftwarearehiteetureEleoents、Forms、Rationa
47、l/ConstraintS软件主架构=组件元素、元素的合作模式、基本需求及限制就是说:将各组件元素以某种理想的合作模式组织起来,以达成系统的基本功能和限制。所以主架构的叙述(architectural descriPtion)必须说明各组件的特性;以什么方式结合在一起,共同支持系统的功能;并说明有关的条件或限制。Garlan认为:典型的主架构设计是要描述系统如何分解成为许多组件元素,并说明元素之间的沟通方式。其中强调的是要在组件被实际代码实现 (imPlement)之前,首先理清组件的界限(boundary)及其结合方式。所以主架构的叙述包含一个或一组抽象模式,是与组件的实现分开的。Mowbr
48、ay说:实作是实际去写出一些较细致的组件;而主架构是抽象地定义组件之间的介面,让开发者和维护者知道如何将组件组装在一起。从上述观点可了解到,设计主架构时,将设计一组模式描述系统的分解 (deeomposition)、组件的组合(eomposition),并且有风格(style)及美感。Mowbray说:实作是实际去写出一些较细致的组件;而主架构是抽象地定义组件之间的介面,让开发者和维护者知道如何将组件组装在一起。从上述观点可了解到,设计主架构时,将设计一组模式描述系统的分解 (deeomposition)、组件的组合(eomposition),并且有风格(style)及美感 (aestheticS)。此外,主架构也必须确保系统能够合乎软件所运行的电脑硬件设施的条件或限制,才能建立出真正可用的系统。主架构必须考虑到软件的静态组织结构,也得同时顾虑到软件如何在电脑系统之中表现出应有的功能。也就是说,主架构必须包含模式来表达各组件元素如何安置在电脑网络上执行,以及实际的沟通情形。5.4 基于组件系统与多层体系架构系统架构定义一个应用程序的各个模块之间如何相互作用,以及每个模块负责执行什么样的功能。从纯功能的观点来看,大多数应用系统主要处理以下三种任务:获得用户输入数据、按预定的规则处理数据、对数据进行存储管理。应用程序体系结构模型主要是根据在用户与数据之