本部分授课目的组件技术的基本原理几种主要的组件技术COM/DCOM,CORBA,EJB,SOA,……其它相关技术教材和授课方式参考资料软件复用(SoftwareReuse)组件技术产生的宏观背景起源:1968年NATO(北大西洋公约组织)软件工程会议上McIlroy的论文“大量生产的软件构件”社会分工及软件产业的分工表现方面:1.时间维:使用以前的软件版本作为新版本的基础,加入新功能,适应新需求,即软件维护。2.平台维:以某平台上的软件为基础,修改其和运行平台相关的部分,使其运行于新平台,即软件移植。3.应用维:将某软件(或其中构件)用于其它应用系统中,新系统具有不同功能和用途,即真正的软件复用。(真正复用)软件复用的自然产生应用系统中通常包含三类成分:①通用基本构件:是特定于计算机系统的构成成分,如基本的数据结构、用户界面元素、领域无关的一般性功能等,它们可以存在于各种应用系统中;②领域共性构件:是应用系统所属领域的共性构成成分,它们存在于该领域的各个应用系统中;③应用专用构件:是每个应用系统的特有构成成分。应用系统开发中的重复劳动主要在于前两类构成成分的重复开发。软件复用是在软件开发中避免重复劳动的解决方案,其出发点是应用系统的开发不再采用一切“从零开始”的模式,而是以已有的工作为基础,充分利用过去应用系统开发中积累的知识和经验,如:需求分析结果、设计方案、源代码、测试计划及测试案例等,从而将开发的重点集中于应用的特有构成成分。软件复用的关键因素前提:必须有可以复用的对象;所复用的对象必须是有用的;复用者需要知道如何去使用被复用的对象。两个关键过程:可复用软件(构件)的开发(DevelopmentforReuse),基于可复用软件(构件)的应用系统构造(集成和组装)实现软件复用的关键技术因素主要包括:软件构件技术(SoftwareComponentTechnology)、领域工程(DomainEngineering)、软件构架(SoftwareArchitecture)、软件再工程(SoftwareReengineering)、开放系统(OpenSystem)、软件过程(SoftwareProcess)、CASE等。众多的非技术因素,如:机构组织如何适应复用的需求;管理方法如何适应复用的需求;开发人员知识的更新;创造性和工程化的关系;开发人员的心理障碍;知识产权问题;保守商业秘密的问题;复用前期投入的经济考虑;标准化问题等等。软件复用的分类依据对可复用信息进行复用的方式,可以将软件复用区分为黑盒复用和白盒复用。黑盒复用指对已有构件不需作任何修改,直接进行复用。这是理想的复用方式。白盒复用指已有构件并不能完全符合用户需求,需要根据用户需求进行适应性修改后才可使用。多数应用的组装过程中,构件的适应性修改是必须的。软件开发过程中的可复用成分整个开发过程的中间结果、过程本身及最终结果,均可复用代码级别代码拷贝、粘贴,子程序和函数库,类,类库(不强调关系),开源代码等设计级别类层次(类库,强调类之间的关系)、设计模式(设计思想)、设计框架(设计结果)软件体系结构风格(软件体系结构:构件,连接件,风格)、架构(软件体系结构)(DesignPatterns,Frameworks,ArchitectureStyle,Component,Connector)分析级别分析模式需求级别用例(usecases模式)测试环节测试用例子系统级别(组件)一个独立或相对独立的系统或子系统,体现为组件形式.体系结构中的构件可以是组件,但组件不一定是构件,构件可以是程序模块,组件强调标准的组成形式软件集成(SoftwareIntegration)数据集成、应用系统(程序)集成实施软件复用的一种手段组件技术是其基础已经成为软件生产的一种主要方式组件技术产生的微观背景从微观角度,组件技术是在不同的需求背景下产生的.不同的需求背景,产生了不同的组件技术,这些不同的组件技术有共性,也有各自所强调的目标。随后给出的只是几个方面的问题,并不完整、全面,组件技术是为了解决这些问题而产生的。(一)软件的构成形式问题早期的软件体现为:独立的整体性系统(铁桶式程序),一般是由同一团队、同一种编程语言开发的,在同一机器运行。这样形式的软件,面临的主要问题是:不易于维护。为了适应变化的需求,发布前集成了广泛的应用特性(考虑完整),升级难,不易复用(部分功能无法提供给其它软件系统)直接后果是:延迟新方法、新技术的应用.模块A模块B模块C模块D编译后以整体形式发布给用户版本升级时,用户需要重新安装新版本,完整取代原有版本例如:模块B变动即使很好地采用了结构化方法,也难以解决版本升级等问题;开发周期长,维护费用高,扩展功能风险大等等。虽然,现在很少有这样的程序了,但体现在一个子系统的设计、实现过程中,仍是比较普遍现象.问题一的解决思路及关键模块A模块B模块C模块D四个模块分别编译,相对独立地交给用户;模块之间的调用仍然存在;版本更新时,用户只需获得某一新版本的模块。模块B‘同一计算机系统内,有两个系统S1和S2都使用模块B,版本更新后,S1可使用B’提供的功能,s2可以继续使用B原有的功能。可行性的关键是:能够动态组装(二)网络资源的合理利用问题新技术的产生和发展(冲击)软件开发方式必须改变硬件性能价格比的提高(软件成本压力)网络计算技术(分布式计算技术)Internet的突起及基于Web的软件应用需求群体生产力的提高越来越多的可用资源资源共享问题二的解决思路及关键模块A模块B模块C模块DWebWebWebWeb组成一个系统的不同模块,可以在网络的不同计算机系统系统中,对系统的用户来说,他不需要关心组成该系统的各模块的位置,对于任何一个模块来说,也不需要知道它所“调用”的模块位置,被调用模块也不需要知道调用者位置。调用了谁,被谁调用均不需要知道(位置透明)可行性的关键是:“资源”的存在形式、访问方法(三)面向对象范型自身问题面向对象范型的不足ClinetObjectServerObjectrequestresponseClinet的实现紧紧依赖于Server的实现使用与实现的分离体现在一个类的实现中,当然,也可以进一步体现在一个包(子系统)中。问题三的解决思路及关键使用和实现的进一步分离(下面仅仅是一种方案)ClinetObjectCommonObjectrequestresponseServerObjectreqquestresponse所有对象均把请求提交给Common对象,Common对象负责查找能完成请求的Server对象,并把请求转交给Server对象,Server对象完成后的结果通过Common对象转交给Client对象。能实现请求的Server可以有多个,Client对Server的使用与Server的实现分离。关键:CommonObject的设计及利用与可复用的软件模块比较•模块,设计时概念•构件,Component,与组件的英文单词相同,但我们把它作为软件体系结构的组成部分,是设计时概念.国内有些院校、期刊文章把我们所说的组件称为构件,注意按照上下文进行界定。•组件,运行时概念二进制形式的组件能有效的嵌入其它开发商的组件、应用系统中精品课件!精品课件!主要组件技术•MicrosoftCOM/DCOM,COM+•OMGCORBA•SUNJavaBeans;EJBMicrosoft.NETSOA(WebServices)