面向过程、面向对象、面向组件、面向服务软件架构的分析与比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向过程、面向对象、面向组件、面向服务软件架构的分析与比较
摘要:软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,每一步都体现了不断抽象、更加贴近业务实际的发展趋势。
当前软件发展正处于从面向组件思想向面向服务思想的跨越阶段。
本文深入分析了面向过程、面向对象、面向组件、面向服务架构,得出相关的优缺点。
关键字:面向过程,面向对象,面向组件,面向服务
1 背景
当前,信息系统的发展越来越明显地呈现出以下特征:软件系统越来越庞大,但是软件系统内部组成模块的规模却越来越小;软件系统的功能越来越复杂,但是系统的开放性却越来越好。
信息系统软件正向着不依赖于特定的硬件和操作系统以及具有高度可重用性的方向发展。
在这种情况下,人们对这种大型复杂软件产品的质量和开发速度都有了更严格的要求,传统的开发方法已经难以满足这种需求。
首先,我们来分析一下几种传统的系统开发方法。
1)自底向上法
自底向上法出现于早期的计算机管理应用系统,即在进行系统分析和设计时自下而上,先从底层模块做起,然后逐步完成整个系统。
自底向上法使得系统的开发易于适应组织机构真正的需要;有助于发现系统的增长需要,所获得的经验有助于下一阶段的开发,易于控制和管理。
但由于方法的演变性质,自底向上法使系统难以实现其整体性;同时由于系统未进行全局规划,数据一致性和完整性难以保证;而且为了保证系统性能的需求,往往要重新调整,甚至重新设计系统。
2)自顶向下法
随着信息系统规划的扩大和对开发经验的总结与归纳,自顶向下的系统分析方法论逐步得到了发展和完善。
自顶向下法要求开发者首先制定系统的总体规划,然后逐步分离出高度结构化的子系统,从上至下实现整个系统。
运用这类方法可以为企业或机构MIS的中期或长期发展规划奠定基础,同时支持信息系统的整体性,为系统的总体规划、子系统的协调和通信提供保证。
但它同样也存在缺点:对系统分析、设计人员要求较高,在大系统中,对下层系统的实施往往缺乏约束力,开发的周期长,系统复杂,成本较高。
3)快速原型法
原型法的核心是原型,即模型,是系统的早期可运行版本。
随着用户或开发者对系统理解的加深,不断地对原型进行补充和细化。
系统的定义是在逐步发现的过程中进行,这就是快速原型法的基本出发点。
快速原型法的开发过程体现了不断迭代的快速修改过程,是一种动态定义技术。
快速原型法的最大优点是能够大大减少软件系统的后期维护费用,使系统功能正确反映用户的需求。
原型本身及这种方法的不足之处在于,如果原型本身功能设置不齐全、性能不好,会导致原型的设计和使用超出预期的花费和时间。
另一个关键不足是原型法需要一个合适的软件开发环境,以便原型能直接转换成现实的系统。
以上方法各有其优缺点。
“自底向上”法只重局部而忽视了对整体的把握;“自顶向下”法开发周期长、见效慢、缺乏灵活性和适应性;快速原型法虽然具有很明显的优越性,但因其依赖于快速开发工具的支持,又不能不令许多系统开发者望而却步。
因此通过对软件构建技术的研究,人们提出一种新的开发方法—基
于组件的开发方法(eomponent一basedDevelopment,CBD)。
采用CBD法开发系统的过程与搭积木的过程很类似,一般是先构筑系统的总体框架,然后构造各个组件,并依次把组件安装到系统中去。
大部分的信息系统,在功能上有类似之处,因而利用软件的重用技术就可以把开发过程大大简化,CBD法的提出正是基于这种设想。
通过这种方法,人们就把一个庞大的应用程序分成多个模块,每个模块保持一定的功能独立性,在协同工作时,通过相互之间的接口完成实际的任务。
我们把每一个这样的模块称为组件,一个设计良好的应用系统往往被切分成一些组件,这些组件可以单独开发,单独编译,甚至单独调试和测试。
当所有的组件开发完成后,把它们组合在一起就得到了完整的应用系统。
当系统的软硬件环境发生变化或者用户的需求有所更改时,并不需要对所有的组件进行修改,而只需对受影响的组件进行修改,然后重新组合得到新的升级软件。
组件技术是在模块化系统、结构化设计和面向对象技术的基础上发展起来的,被认为是面向对象技术之后的软件开发的标准方法体系。
基于组件的软件工程(eomponent一basedSoftwareEngineering,CBsE)可提高软件的可重用性,使软件开发摆脱小作坊的工作模式,按照大规模的工业化方式进行,是软件开发方法发展的必然结果。
从目前的技术发展趋势来看,基于复用的软件构造技术受到广泛关注;大规模应用系统集成技术成为主要技术热点;开放化、标准化成为主要潮流。
随着信息技术的日益发展,现代企业对生产管理信息化的需求和依赖越来越明显,不断加大投入进行企业信息系统的建设。
与此同时,随着硬件系统、操作系统平台的不断增加以及企业网络的飞速蔓延,软件系统间的异构度和复杂度也不断增加,这就使得如何整合彼此分散的自治信息系统以提高其利用效率成为企业信息化建设中必须面对的重要课题。
在最初的信息化建设过程中,企业应用大多是用来替代重复性劳动的一些简单设计。
当时并没有考虑到企业数据的集成,惟一的目标就是用计算机代替一些孤立的、体力性质的工作环节。
然而,使用传统开发方法所形成的软件系统是刚性的,也就是说系统严格按照预先设定的目标进行设计,各功能模块按照确定的顺序执行,一旦开发完成并投入运行,就是固定不变的,不能在使用过程中进行调整和改变。
如果数据结构或者业务逻辑发生了改变,就必须对所有相关的软件模块、数据源和消息逐个进行修改。
为了应对这种局面,上世纪年代末兴起了企业应用集成的技术潮流,即通过定义企业私有的数据结构、通讯协议以及适配器接口,来联系横贯整个企业的异构系统、应用、数据源等,完成在企业内部的数据库、数据仓库以及其他重要的内部系统之间无缝地共享和交换数据的需要,从而消除信息孤岛。
然而,随着这种方法的广泛实施和应用,被证实缺乏必要的灵活性和适应性,扩展性较差,从而无法取得与大量投入相匹配的收益效果。
随着对信息整合的需求和认识的深入,近年来面向服务体系结构的概念逐渐走入人们的视野并被广泛接受。
面向服务体系结构采用服务请求的方式,通过将业务应用功能以服务的形式提供给最终用户应用或其他服务,使软件系统向“柔性化”迈进了一大步。
回顾软件开发的演化过程,我们可以看出面向服务体系结构的出现有其必然性:从最初面向机器语言的开发模式到面向过程的开发模式,软件开发通过独立于机器的程序语言如等不再依赖于不同平台的机器语言,实现了代码的重用;随后面向对象开发模式的出现使人们可以通过等语言以更接近现实的对象来表述完整的事物,即进行对象的重用;此后随着软件开发规模的扩大,在涉及分布式、异构等复杂特征的环境中,出现了基于等技术的面向组件模式,软件开发的重用也上升到组件的级别;进入世纪,当软件的开发面对更加复杂的环境和更加灵活多变的需求时,人们开始将应用程序以服务的形式公布出来供别人使用,而完全不需要去考虑这些业务服务运行在哪一个架构体系上,这就是面向服务的体系结构。
相对于传统的代码重用,对象重用,和组件重用,面向服务体系结构更加着重于业务级的应用,即服务的重用。
2 面向过程的分析概述
“面向过程”是一种以事件为中心的编程思想。
就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
2.1面向过程的程序设计思想:程序=算法+数据结构。
编写一个程序,算法是核心,算法是千变万化的,但是重点掌握其中一些基本的典型的算法以及算法思考的方法从而能推及一些其他的算法。
2.1.1 算法:
算法就是为解题而编写程序的方法和步骤
(1) 解决问题的方法千变万化,也是思考的重点,需要掌握一些基本的方法及推导原理,具有推及其他方法的能力;
(2) 根据Qb的结构化特点,解决问题的基本步骤是顺序结构,即根据题目或问题要求顺序思考,在顺序解决问题过程中结合使用循环结构和条件(选择)结构,这可以看成是算法的程序结构;
(3) 具有将算法转换为程序模型的能力。
2.1.2 数据结构:
在程序结构和方法中需要使用不同的数据结构:变量数组记录等。
基本结构较简单,但是要具有根据问题,使用不同数据结构将解决问题的算法模型转换为程序模型的能力。
比如一个单个的量我们设计一个不同类型的变量,具有一定联系和顺序的变量我们设计成一维数组,具有表结构我们可以设计成二位数组,或是具有两个相关的属性也使用二维数组,而三个属性或是多个二维数组构成三维数组。
一般程序分为三大块,输入数据部分、处理数据部分,输出数据部分。
每一块可以进行细分,采取模块化的设计思想。
其中处理数据部分是核心。
以上的解决问题的算法主要指处理数据部分。
3有关面向对象
“面向对象”(Object Oriented,简称OO)是一种以事物为中心的编程思想。
在面向对象分析设计方法中,基本的构成是类和对象。
对象是封装了描述其属性的数据(对象的状态)以及可以对这些数据实施的操作(方法、行为),对象之间通过发送消息相互协作。
类是一组相似对象的描述,描述了该类对象所具有的共同特征。
面向对象的程序设计又提供了信息隐蔽、继承、多态和动态绑定等机制。
3.1 面向对象的方法学
3.1.1 软件建模方法碰到的问题和分析
在计算机知识的学习和使用过程中,有很多接触到面向对象的概念,其中最主要的是面向对象的开发语言,使用类的概念对对象进行封装,元素或者实体用类来表示,定义类概念上的数据和操作方法。
面向对象对程序的结构,代码功能上的封装和安全性都有很大的提高。
但面向对象的概念,最为一种思想,其应用远不止是在计算机程序语言领域,其它的过程和领域中也有着比较广泛的应用。
应用于软件开发方法上,面向对象的思想同样有很多好处。
实际的软件应用开发中,互联网相关的开发是比较多的一类开发。
其中有的系统可以很复杂。
进行这类开发是,网页设计过程,经常需要对原有的代码进行编辑修改,但我们最多只能重复使用代码,把原有相近的代码复制一份,用到新的开发工作中去,而不能直接重复的使用原有的组件。
而使用原来的代码有时会牵涉到对复制的代码进行改动,造成代码冗余的同时,可能因为对原来的代码模块不够熟悉,复制代码上的修改不够全面等原因,带来新的代码质量问题,采用面向对象的方法,通过构建和测试基本的对象,可以建立一个经过严格测试的代码库和可靠的组件,从而无需在以后的使用中对每个组件重新测试,而仅需对组件的整体进行测试。
这种方法有助于加快开发的进度,提高代码的质量。
面向对象的软件开发方法是解决软件设计过程中所出现问题的基础性的解决方案,它可以使我们无需做重复的工作,让我们的工作变得更有效率。
即进行可重复使用性设计,软件的总体框架中可以设计在一起用同一个功能模块实现的不同部分也可以通过面向对象的设计,和模块的复用来实现重复利用,减少开得重复工作,提高开发效率。
比如设计可重复使用的代码,一项功能可以有一段相对独立的代码来完成。
如果这项功能在系统中多个位置调用到,这段代码就可以重复利用。
60年代末开始,计算机软件开发领域,出现了“软件危机”,其主要表现是软件质量变差、成本及开发进度变得难以控制,软件产品的维护工作也变得很麻烦。
这些变化是随着计算机应用的规模不断变大,领域范围不断广泛,软件应用不断复杂产生的,这一危机的根本原因在于结构化的方法强烈依赖于系统逻辑模型的完整性描述,传统的软件开发模式方法是由最简单和一般的情况出发,建立在系统逻辑模型完整性描述和系统是静态不会变动的基础之上,这样,传统的方法就难以做到适应系统的动态变化与扩展,使系统开发质量和效率都不高、而且容易产生开发到中间的系统由于碰到难以解决的问题而使前面的工作回滚,浪费资源甚至有时被迫取消系统的开发。
开发的周期很长,费用也是很高,传统结构化设计方法中主要是是自顶而下的瀑布模式的开发方法,在其设计中,使数据结构的设计仅服从于当前功能实现的要求,为以后的扩充和重用设置了巨大的障碍。
我们都知道,就软件开发而言,面向对象技术,简称的确带来革命性的变化,因为面向对象技术是一种完全崭新的软件开发和程序设计技术,其所开发的程序是面向对象程序,直接描述客观世界的对象及其相互关系。
随着技术的飞速发展及计算机大规模的应用和普及,软件的应用范围越来越广,规模也是越来越大,要解决的问题越来越复杂,人们对软件的要求也越来越高,包括纯粹软件功能上的,同时还有软件易用方面上的,既要求实现一项功能,又要使得这项功能在使用上方便好用。
传统的软件开发技术根本无法满足现实需要,只能通过引入像面向对象的思想和分析方法以及使用后来的开发方法来实现这样的软件开发。
在开发过程中,传统的程序开发方法使用的是面向过程、按顺序进行的机制,其缺点是程序员始终要关心什么时候发生什么事情,要求程序员对开发的很对细节都很清楚,使得开发的设计工作和开发的具体实现没有很好的分离,应用程序的界面都需要程序员编写语句来实现,对于图形界面的应用程序,只有在程序运行时才能看到效果,一旦不满意,还需要修改程序,因而使得开发工作非常繁琐。
3.1.2 建模问题的分解和面向对象的方法学
面向对象设计方法的主要特点是封装性、继承性和多态性。
封装是对对象内部的结构而言的,一个对象,在本文后面的部分会具体介绍面向对象开发方法中对象的感念。
这里可以简单的把对象理解为构成系统的一个实体元素,该实体元素对应着系统中的某一部分元素,有着自身的一些属性和在这些属性上的一系列方法和行为。
面向对象的开发方法同样是以封装的思想对系统作分解。
一个复杂的系统在高的设计层次上可以看作是由几个元素组成。
系统实现的所有功能都是由这些组成系统的元素来实现的。
这些元素有自身的特征和他们的相互作用关系和行为,这些就构成了整个系统。
面向对象框架是构成一类特定领域软件可复用设计的一组相互协作的类。
框架将设计分割成一系列的抽象类和具体类,并定义它们各自的责任,用它们之间的协作关系以及控制流程来规定应用程序的体系结构。
框架预定义了这些设计参数,以便于应用程序设计者能集中精力于程序本身。
框架记录了该特定领域的共同的设计决策,因此,框架更强调设计复用,尽管框架包含具体的立即可用的子类。
应用程序的大部分设计和代码将来自于它所使用的框架或受其影响。
使用面向对象的分析方法和分层次的分析设计手段,系统就可以划分为相对独立的很多
模块,每个模块有着自己的设计和实现要求,大部分的开发人员都可以把注意力集中在模块的开发工作上去,有一部分工作人员负责最后模块的组织和集成。
这样复杂的系统就可以分解成相对规模较小,结构简单的模块系统,如果有必要,可以在应用这样的方法对模块系统进行分解,使整个系统的结构清晰,而开发工作的进度也容易管理。
3.2 面向对象的思想
3.2.1 基本思想和对象的概念
面向对象的思想是把系统的关系看成是由组成系统的实体对象以及它们之间的关系组成。
面向对象是自结构化方法以来对系统开发过程的最重要的变革,在世纪年代,它代替了结构化方法而成为软件开发的主要方法。
这种开发策略基于下面的概念,即系统可以由一系列称作对象的可重用组件来构建。
对象是面向对象系统的基本思维单位,与结构化方法里分离数据和功能不同,对象包含了它们两者,即面向对象的方法中没有把数据和数据上的方法操作分离开来,相反是把二者结合起来看。
对象的思想是具有一定的属性,在软件系统的设计中表现为数据和行为,即软件开发中定义在这些数据上的操作。
它的实质是从系统组成的角度对系统进行分析,利用对象的单位作为基本构造单元,使开发中,设计出的软件系统能够变得模块化、可复用性能好、易于维护,降低开发维护费用,优化软件结构和提高软件质量。
面向对象方法的基本思想是,从现实世界中客观存在的事物,即可以映射成软件开发中的对象的系统元素,出发来构造软件系统,并在系统中尽可能运用人类的自然思维方式。
开发一个软件是为了解决某些问题。
这些问题所涉及的业务范围称作该软件的问题域。
面向对象方法强调直接以问题领域,即现实应用领域,中的事物为中心,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。
这可以使系统直接地映射问题应用领域,保持问题域中事物及其相互关系的本来面貌。
现实的世界中,任何一个东西我们都可以看作是一个对象。
一辆汽车可以是,一扇门可以看作是对象。
汽车本身有颜色,大小,品牌,位置,运动与否,运动的方向,运动的速度等属性。
再看一扇门,门有大小,安装在那个房间,门的形状和其它样式,门的状态是开,关了没锁上,还是锁上等属性。
软件系统的开发都是针对于一个具体的现实应用问题而言的,只是有些应用情况比较复杂,对应的现实应用实体可能会很抽象,但不管是对应的现实应用的实体是不是具体的,这些实体都可以上述的汽车和门一样看作是对象。
也就是说,我们要开发的一个系统可以看成是要用计算机管理一个现实的对象。
现实的对象到计算机软件开发过程中所讲的对象还经过了一个抽象和简化的过程。
把一辆汽车放在计算机面前,计算机是很难直接去管理它,所以计算机要用自己可以识别的方式去表示这辆汽车,这个过程也就是把现实对象抽象成计算机软件概念上对象的过程。
同时,这个过程也牵涉到对现实对象属性信息的简化。
现实中的汽车其本身的属性是不可列举的,我们用再多的信息去记录一辆汽车,只要不是把这辆车拿去收藏,就很难根据记录信息去完全重现一辆完全没差别的汽车。
从另外一个角度讲,在软件开发的过程中,软件系统的产品并不需要掌握现实对象的所有信息,也不能去掌握所有的信息。
用计算机技术去完全模拟出来一个真人的结构和行为,这些的工作量可能让现在计算能力最强大的机器去做也很难完成。
而如果我们用一个软件来为汽车指路,告诉它在那个路口怎么走,最后到达目的地。
这个应用里,汽车的信息之需要知道汽车的位置,也许一些与道路相关的信息,比如某段特殊的道路是否允许这个类型的汽车通过。
而对于汽车的颜色,汽车的新旧程度,汽车的购买时间的等信息在这个软件应用中是用不到的,所以在把汽车抽象到软件开发过程中时,后面的信息就可以省略来简化对象。
这样我们可以对软件开发过程中的对象有大体上的了解,和现实中的对象实体类似,软件的对象可以是对应着现实中的某个对象,也可以对应着软件过程
中抽象的一些内容,这些内容可以用对待现实中对象实体的方法相同对待。
从实际的应用领域抽象和简化后得到软件应用开发中的对象。
这些对象包含了软件系统所需要的各方面属性,同时在这些属性上的方法也包含在对象体中。
3.2.2 面向对象的结构和对象定义
面向对象的结构有模块化的特点。
框架通过封装多变的实现细节于固定的接口之后,提高了软件的模块性。
框架通过设计和实现的变化带来的影响进行局部化来改善应用程序的质量,这有助于理解和维护已有的软件,面向对象中的对象组建可以复用。
框架提供的固定接口被定义成为对象相互关系和行为概念上的组件,并可被用来创造新的应用程序,这样就提高了可复用性。
框架的可复用性利用了有经验的开发者在该特定领域中的专业知识和开发努力,避免了后继开发人员针对该领域中的同一问题和需求做重复的劳动。
框架组件的复用能大幅度地提高后继开发人员的产量,同时还能够改善软件的质量、性能和可靠性。
面向对象的结构有可扩展的特征,框架通过提供显式的钩子方法,允许应用程序来扩展其固定接口,这样就提高了框架的扩展性。
钩子方法系统地为框架的固定接口和由于不同的需求而产生的应用程序行为之间进行减少藕合。
框架的这种扩展性对于保证及时地定制新的应用程序服务和特征是十分必要的。
面向对象的设计。
面向对象的设计是对一个具体的实现应用面向对象方法,其中重要的一个步骤是对象的定义和对象的表示和实现开发做出系统的体系结构图。
要求首先对系统的流程和运行方式有比较清楚的了解。
把系统表示成不同的元素对象和这些对象之间的行为和相互作用。
定义元素对象之间的联系行为,一个对象在外面看来的样子,以及外界可以对之进行的操作。
同时联系行为包括对象之间的作用行为集合。
什么时候,什么条件下对象对另外的对象发出特定请求。
这样,完成了系统对象的定义,系统地开发工作就成为很多个对象的开发工作了。
如果定义好的对象还是很复杂,对象的定义可以在对定义好的对象继续进行,直到对象的复杂程度较小,对象可以用较简单和明显的开发方法来实现为止。
这样就进入对象的实现和开发过程中了。
对象的定义给出了对象的接口和对象的行为,在对象的开发中要做的工作就是实现对象的定义。
根据对象的定义设计出对象的属性,然后通过对这些属性的操作来实现对象定义要求的方法。
这些完成之后就可以通过一些模拟测试,检查对象自身开发中的质量和实现进度控制。
3.3 面向对象的开发
3.3.1 面向对象的相关概念
面向对象方法从内部结构上模拟客观世界。
对象是客观世界对象的直接映射符合人们的思维方式,在面向对象的开发模型中分析、设计和编程阶段是重叠的核心概念“对象”在开发的各个阶段均被使用,相对结构化方法来说可以减少工作量和映射误差。
面向对象方法中对象不仅包括数据,还包括对数据的操作方法对象之间的通讯是通过发送消息来完成的,由于采用了继承的概念,有利于软件重用所建模型的稳定性比结构化方法高。
它更接近人们的思维习惯,所以容易让人们接受。
面向对象的软件开发方法利用这种在思维上和人们习惯的相近的特点,是对系统的分析和设计更容易理解,和对系统的结构设计和模块划分变得容易和自然。
面向对象的软件开发方法通过对实际应用系统的对象表示,然后再对用对象表示的系统进行实现,来完成软件开发的设计和实现过程。
该方法中涉及到的内容包括,用对象化在软件设计中表示应用系统,对实际系统进行抽象,用对象和对象间的静态相互关系表示系统的框架,用对象间的动作和行为来表示系统的行为。
系统的对象表示,一个实际的应用系统,通过计算机软件方式的抽象和简化之后,映射到一个软件范围下的对象上面。
这一过程是软件开发中的系统的对象表示。
这一概念是把系统作为整体来进行对象表示的,我们要开发的一个系统,可以看成是一个对象,用对象的概念表示,它有自身的关于系统应用的属性,和相应的这些属性上的操作。
这些操作和方法可。