您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 投融资/租赁 > 组件技术(汇总)第一版
1.组件技术产生的原因1)体现为独立的整体系统,同一团队,同一语言,同一机器,开发过程分析、设计、实现发布前集成了广泛的应用特性,特性不能独立的被删除、升级和替换。难以被复用,版本升级繁琐,必须整体升级2)新技术的冲击3)面向对象范型不足使用和实现进一步分离COM组件规范的内容用新版本的组件直接替换旧版本的组件有什么影响?(有答案)可参考不变性什么叫客户桩?(有答案)2.组件技术的优点提高开发速度降低开发成本提高软件质量增加软件的灵活性降低软件的维护费用3.COM组件的目标易于动态组装组件实现与语言无关可以以二进制发布支持向前兼容DCOM支持分布式计算接口的定义及作用接口是有序排列的一组函数指针,可以简单理解为一组函数,每一个接口相当于该组件对外的一个窗口4.COM接口有哪些规定1)IUknown:所有组件都有一个称为IUknown的接口,该接口中依次给出的三个函数是:QueryInterface(对组件的接口进行查询,若存在某个接口,客户可以获得该接口中的服务),QueryInterface(intinterfaceID,void**pValue)第一个参数为接口ID,第二个存放返回值(支持接口约定的实体)AddRef,Release(通过计数器共同完成引用计数功能[为何用计数器?组件使用时需载入内存,又可以被多个客户使用,无论哪个用户把它载入内存,为了知道何时可以从内存中卸载,需要一个计数器来记录组件的使用情况,实际可以为每个接口安排一个计数器,当一个组件所有接口计数器都为0,就可以卸载了])。一个组件可以同时被多个客户所使用,卸载时需要确定没有人使用,即计数器为0时2)其他接口:一个组件的其他接口可以看作IUknown接口的子接口,即其它任何一个接口的前三个函数与IUknown接口中的三个函数相同。客户获得一个接口后,可以查询其它接口是否存在。每个接口能够进行引用计数。3)不变性:一旦公开了某一个接口,该接口将永远不能发生改变。包括函数在接口中的顺序。改变接口部分的唯一方式是:为组件增加新的接口。目的是兼容。版本升级不影响老客户。每一个接口有唯一的接口标识(ID)。5.编写COM组件的步骤(利用DLL?)1)定义接口,在接口中声明组件中需要使用的方法和变量,声明方法使用虚函数声明,定义的接口都要继承IUknown。2)定义实现接口方法的抽象类。实例化类之后,才会对已经实例化的类对象分配内存空间。对类中接口的引用,可以通过对象指向接口的指针来调用。3)以动态链接库DLL的形式,定义指向是实例化类对象的指针,并可以向调用它的接口返回标识,生成模块,定义文件,并在客户可以获取某个组件接口之前,将DLL装载到过程空间中并创建此组件。4)创建类厂。在类厂中使用CreateInstance方法连接到动态链接库接口,并用指针指向这个接口。用DLLGetClassObject函数创建类厂,并根据类厂的接口标识返回类厂指针。5)实例化类厂。使用CoCreateInstance实例化类厂,即生成一个实例类厂的对象,这个对象是可以被用户调用的。6.类厂(IClassFactory)接口的作用笔记版:提供了一种灵活的控制组件创建的方法,这种方法中组件由特定的类厂创建:通过CreateInstance(intinterfaceID,void**pValue),而特定的类厂实现了类厂接口,给出了CreateInstance的具体实现,客户使用接口指针,可决定用特定的工厂来产生特定的组件,将不同组件的实例化延迟。资料版:CoCreateInstance函数是创建组件的时候使用最多的一种方法,但是它的灵活性不能够满足所有组件的需求,它没有给客户提供一种能够控制组件创建过程的方法,在建立好一个组件之后,无法控制将组件装载或检查客户是否具有权限。因此需要引入类工厂以获得更高的灵活性。CoCreatInstance实际上并没有直接创建组件,用CoCreateInstance创建的组件实际上是通过IClassFactory创建的,类厂唯一的功能就是创建其他组件。客户可以通过类厂所支持的接口来对类厂创建组件的过程加以控制。创建组件的标准接口就是IClassFactory。客户可以通过类厂组件创建其他组件,使用类厂来创建组件可以给客户提供一种能够控制组件创建过程的方法,并且在建立好一个组件之后可控制将组件装载到内存中何处或者检查客户是否有权限7.使用动态链接库做组件的一般过程1)编写头文件,定义各种业务接口以及接口标识符,其他的接口需要继承IUnknown接口,包括类厂接口及ID。这个文件需要客户知道(客户知道组件的接口)2)实现定义好的业务接口,可以用一个类来实现所有接口,也可以每个类实现一个接口,后者使用一个类聚合了每个接口的实现类,考虑到组件的自身复用问题,可以预留一个IUnknown组件类型指针,指针是0时代表一般客户程序,非0代表另一个复用自己的组件。也可以用已有组件代码直接拿过来实现复用。3)实现类厂接口,实现CreateInstance方法,这个方法用来产生组件实例4)编写DLL,导出函数GetClassObject用来返回工厂实例(指针)DllMain可以显示如组件名称等信息。可能会用到注册表函数来注册组件等。5)导出函数的设计简述利用动态链接库实现COM组件的一般过程:1)定义各业务接口,各接口都能继承IUnknown接口2)为每个组件和接口分配一个唯一的标识符3)实现各业务接口的功能4)定义类厂接口并分配唯一标识符(此接口继承自IClassFactory接口)5)实现类厂接口以实现动态生成组件6)编写DLL,在DLL函数中有注册组件到注册表的函数,取消注册的函数,与类厂相连的函数。COM组件如何区分不同组件实例利用IUnknown接口的值,用QueryInterface查询IUnknown接口,然后比较pIUnk(pIUnk分别为指向不同组件IUnknown接口指针)若相同则是同一组件,若不同则是不同组件9.COM组件与模块的区别模块:设计时的结构化分组件:运行时的二进制代码COM组件是运行时的二进制代码,其一旦公布,其中已定义和实现的接口就不能修改,模块可随时改动8.IDL生成语言映射接口生成stub桩代码生成服务器框架skeleton(不完全实现接口)IDL编译器作用1)生成与编程语言相关的文件(IDL文件,接口仓库)2)生成客户桩文件stub,头文件head,服务器框架文件skeleton定义了某类对象的特征和行为,包括服务器能在这类对象上施加的操作如何在IDL工作基础上实现一个CORBA组件Stub和skeleton生成原理,作用,理解10.对客户桩的理解客户stub是IDL接口的假实现,只是单纯的使用这种假实现,IDL接口的完整实现是由CORBA服务器实现的。Stub提供了在客户机应用程序中使用桩类型激发时所需要的定义和其他与CORBA供应商有关的信息。是程序激发请求时使用的一套例程,它把一个对象类型的IDL操作定义映射到激发请求时要用的一套与编程语言相关的例程Skeleton:1)框架包含把对象上的操作映射到合适的实现和方法上的必要信息。2)框架把BOA的调用映射到所请求操作的特定实现的方法3)提供BOA与完成在某个对象上各种操作的方法间的连接4)通常由OMGIDL定义生成激发方式(有答案)CORBA的静态激发(桩类型激发)(服务器(S),客户端(C)的每个交互都是基于C发送一个请求或S响应一个请求。发送请求的过程称为“激发”)1)用IDL定义接口(.idl文件)2)将接口定义生成一个或多个客户桩(用IDL编译器)3)把客户桩连接到客户机应用程序4)得到请求所需对象的引用5)从客户机程序中调用声明的客户桩6)如果有结果,处理并使用它们7)释放不再需要的对象占用的存储区特征:支持同步和单向通信形式,不支持异步使用例程调用,只能用于客户桩编译时就已完全可知的接口比动态激发快。客户如何使用一个COBRA对象所提供的服务(有答案)构造CORBA客户机的一般过程(有答案)11.构造CORBA服务器一般过程1)决定实现所支持的激活策略2)生成服务器框架3)把框架和服务器应用程序及对象适配器连接起来4)编写服务器初始化代码5)编写代码通知BOA实现已经被激活6)编写代码创建消息分发循环7)编写方法支持框架中的实现,上下文,异常8)编写代码冻结实现9)编写关闭服务器代码10)如果同时也是客户机,参照客户机过程什么是EJB类、EJB对象、Bean类、消息拦截(有答案)结合EJB容器谈谈对中间件的认识中间件是位于平台(硬件和操作系统)和应用之间的通信服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,它们可以有符合接口和协议规范的多种实现,中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。中间件是处于应用程序及其所在系统内部工作方式之间的软件。12.EJB容器完成的一般性功能(作用)EJB容器加载EJB组件并管理其运行,可以创建EJBObject类根据接口自动生成,实现方法由容器提供商决定,规范只规定容器生成这个对象与相应的桩容器还创建Home类,实现EJB提供定义的Home接口,并产生Home桩类供客户端与Home对话EJBObject对象的作用?EJBObject对象接受客户端的请求,并把这个请求传给Bean实例,可以把EJBObject对象看成是Bean类的代理对象请求代理ORB(有答案)构造EJB组件一般过程EJB部署描述文件作用(有答案)会话Bean,有状态会话Bean部署时,EJB做的事情(创建这两个bean的过程,有答案)每种bean的运行机理(怎么区分EJB,有答案)13.创建EJB1)编写提供业务方法的类:bean类2)编写两个接口:home接口,组件业务接口3)创建一个名为ejb-jar.xml4)把bean接口和部署描述文件放到ejb-jar文件中14.Xml1)自我介绍2)申请服务3)定义变量15.(容器)回调函数(还有代码)组件提供容器调用函数会出现一个特殊时刻,bean不知道,容器调用了bean的一个容器回调方法时它才知道。回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用,为此要做三件事:(1)声明;(2)定义;(3)设定触发条件。就是在你的回调函数中把你的回调函数名称转化为地址作为一个参数,以便DLL调用。容器回调出自两个接口中的方法。XHome{create()}//home接口,作用:提供了创建、删除和定位Bean的实例SessionBean接口回调函数及其作用对中间件的理解(有答案)中间件是处于应用程序及其所在系统的内部工作方式之间的软件。它提供了与具体业务无关的功能,如EJB容器提供了远程访问、事务处理,与数据库中的数据同步等功能。所以中间件是用统一的形式实现与业务无关的功能,从而简化了编程。中间件独立于操作系统和软硬件平台及软件,与具体的编程语言无关。
本文标题:组件技术(汇总)第一版
链接地址:https://www.777doc.com/doc-2057704 .html