已阅读5页,还剩53页未读, 继续免费阅读
(通信与信息系统专业论文)基于反射技术的中间件研究与应用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 反射中间件是当前中间件技术研究中值得注意的一个新方向。它克服了传统中 间件“黑箱”结构的缺陷,具有系统结构行为有序开放、可重配置等特点,能支 持针对不同应用类型进行定制,可较好地适应动态变化的分布式环境和应用需求, 已在移动计算、多媒体应用等多个领域展现出较好的应用前景。 论文对反射技术和中间件技术进行了广泛的研究。在分析当前已经广泛使用的 反射中间件框架的基础上,提出一种反射中闯件模型。该模型基于组件设计,整 个系统的灵活性更强,同时,采用多元层设计的结构,克服了当前反射中间件设 计中面临的结构过于简单的问题。 论文的研究工作还包括将反射中间件o p e n o r b 实际应用到一个v o l p 管理系 统当中。由于采用反射中间件,提高了系统的适应性,满足了不同用户的需求。 关键词:反射中间件模型组件管理系统 a b s t r a c t r c n e c t i v em i d d l e w a r ei san o t e w o r t h yn e wd i r e c t i o no fm i d d l e w a r er e s e a r c h i t e l i m i n a t e st h ed e f i c i e n c yo ft r a d i t i o n a lo b j e c t - o r i e n t e dm i d d l e w a r es y s t e m sb yo p e n i n g t h e i r “b l a c k - b o x ”s t r u c t u r ea n dp r o v i d i n gi n s p e c t i o na n da d a p t a t i o nc a p a b i l i t i e sf o r d e v e l o p e r sw i t hc o m p u t a t i o n a lr e f l e c t i o nt e c h n i q u e s r e f l e c t i v em i d d l e w a r es u p p o r t s t h ec u s t o m i z a t i o nf o rd i f f e r e n ta p p l i c a t i o nd o m a i n sa n dt h ea d a p t a t i o no fd i s t r i b u t e d a p p l i c a t i o n st od y n a m i c a l l ye v o l v i n ge n v i r o n m e n t sa n du s e rr e q u i r e m e n t s i t ss t r e n g t h h a sa l r e a d yb e e ns h o w ni nt h ea r e a ss u c ha sm o b i l ec o m p u t i n g , m u l t i m e d i aa p p l i c a t i o n s , e t c t h i sp a p e rh a sa ne x t e n s i v er e s e a r c ht ot h er e f l e c t i o na n dm i d d l e w a r et e c h n o l o g y b a s e0 1 1t h es t u d yo ft h es t r u c t u r eo fs o m eu s e f u lr e f l e c t i v em i d d l e w a r e ,w ep r o p o s ea r e f l e c t i v em i d d l e w a r em o d e l t h ed e s i g no ft h em o d e li sb a s eo nc o m p o n e n t , l e a d st o f l e x i b l em i d d e w a r es y s t e m a tt h es a m et i m e ,f o ra d a p t i n gm u l t i p l em e t a - l e v e l s t r u c t u r e s ,t h em o d e lc a ns o l v et h ep r o b l e mo fp o o rs i m p l es t r u c t u r e i nr e f l e c t i v e m i d d l e w a r ed e s i g n a t i o n t h ew o r ko ft h ep a p e ra l s oi n c l u d e sa p p l y i n gar e f l e c t i v em i d d l e w a r e - o p e n o r b i nav o l pm a n a g e m e n ts y s t e m b e j t a u s eo fa d a p t i n gr e f l e c t i v em i d d l e w a r e ,w ec a n w i d e l yi m p r o v et h ea d a p t a b i l i t yo fs y s t e ma n dm e e tt h en e e d so fd i f f e r e n tu s e r s k e y w o r d :r e f l e c t i o nm i d d l e w a r e m o d e lc o m p o n e n tm a n a g e m e n ts y s t e m 创新性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果:也不包含为获得西安电子科技大学或 其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做 的任何贡献均己在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:蛔递日期:! 旦兰亟 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生 在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕业 离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大学。学 校有权保留送交论文的复印件,允许查阅和借阅论文:学校可以公布论文的全部 或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。( 保密的论文在 解密后遵守此规定1 本学位论文属于保密在年解密后适用本授权书。 本人签名: 口二t 导师签名:丞i ! !日期:趔 玺! 目目 第一章绪论 第一章绪论 1 1 引言 随着网络技术的发展,企业应用不断扩展到各种网络环境中。面对分布式应用 复杂而又具有共性的问题,中间件应运而生。中间件是指网络环境下位于操作系 统( 系统软件) 和应用软件之间的一种分布式软件,它为用户提供了一种高层次的、 独立于平台的编程模型,隐藏复杂的底层细节,把应用开发者从复杂的网络环境 中解放出来,专注于业务逻辑的开发。目前越来越多的应用系统使用了中间件技 术。 然而,随着网络、多媒体、无线通信、嵌入式计算等技术的发展,当前的分布 式系统运行环境从传统的封闭、静态的主机或局域网,转移到开放、动态、多变 的网络环境。作为不同于传统计算机的硬件平台,这种网络环境具有无统一控制 的“真”分布性,节点的高度自治性,节点链接的开放性和动态性,人、设备和 软件的多重异构性,实体行为的不可预测性,运行环境的潜在不安全性,使用方 式的个性化和灵活性,网络连接环境的多样性等特点1 1 1 。 在这种开放、动态、多变的运行环境下,中间件技术面临着新的挑战;如何应 对当前分布式系统的另一个内在特征动态性,即新一代的中间件设施必须适 应变化的运行环境和不同的客户需求。一般认为,可配置和运行时可重配置是实 现动态性的关键因素。 传统中间件主要侧重于解决异构和分布式情况下的复杂问题,在这种思想指导 下,系统的实现细节通过抽象的方式隐藏起来,形成一个典型的黑箱结构。黑箱 抽象虽然在很大程度上提高了程序的可移植性和可重用性,但是缺乏必要的灵活 性和适应性,无法满足不同应用环境的需求。 为了解决这一问题,基于开放实现思想的反射( r e f l e c t i o n ) 技术被引入到中间件 的设计中来。这里反射特指系统可根据特定参数推理的能力,以及将推理结果作 用于自身的能力。反射技术是实现开放系统的可行技术【2 】,它有助于访问( 或调整) 系统的内部结构和实现,实现中间件系统结构和功能方面的动态可配置。许多专 家认为,反射中间件将成为下一代中间件的代表1 3 j 。 1 2 反射中间件的发展与现状 反射的概念最早是出现在人工智能领域的,然后被引入到计算机领域【4 l 。受到 人工智能领域反射性研究成果与经验的启发,b s m i t h 提出将反射性引入编程语 言嘲,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概 2 基于反射技术的中间件研究和应用 念的提出很快引发了计算机科学领域关于应用反射性的研究,最早被引入到程序 语言的设计领域里,并在l i s p 语言里得到运用。此外,反射机制也被应用到了操 作系统和分布式系统中。 随着反射性在计算机科学各个领域里的广泛运用,人们也在尝试将反射性应用 到中间件技术中。1 9 9 7 年,l e d o u x 尝试了将反射性引入中间件以调整远程调用, 同时s i n g h a i 在解决c o r b a 的容错与实时化问题时引入反射性。在m i d d l e w a r e9 8 会议上,g s b l a i r 系统化地阐述了将反射性引入中间件的必要性和可行性。随后, 反射性作为下一代中间件的主要特征之一得到了越来越多的重视与研究。 对于中间件中的反射技术的应用研究虽然起步时间不长,但已引起了各国研究 者的广泛重视。在m i d d l e w a r e 2 0 0 0 国际研讨会上,专门就此进行了专题讨论,反 射技术在移动计算、无线网络、实时、多媒体环境中的运用得到了特别的关注。 在m i d d l e w a r e 2 0 0 6 国际研讨会上,也重点强调了反射中间件在更好地适应动态变 化环境,改善服务质量( o o s ) ,提高服务质量等方面的作用。 目前己存在较多的反射中间件系统,大多集中在c o r b a 、c o m 、r m i 等主流 中间件,如o p e n c o r b a ,o u a r t e r w a r e ,d y n a m i c t a o 和f l e x i n e t 属于反射式 c o r b a ,m c h a r m 属于反射式r m i ,o p e n o r b 属于反射式c o m 。这些中间件系 统都是在传统面向对象中间件技术上,主要是因为传统中间件平台有着成熟的技 术、广泛的应用,在其上开发新型反射中间件系统,对传统平台有着良好的继承 性,也有利于使用其中已有的功能技术。 1 3 论文所作的工作 本文的课题来源于实验室的科研项目和普罗通信公司的伊项目。 在反射中间件系统的设计中,元层和基层是最基本的两个层次。目前的反射中 间件系统较多的还是通过单一元层实体视图来表述基层,而对于一些大型复杂分 布式系统而言,若清晰、完整地表示出其内部各方面结构行为需通过多方面、多 层次的元层视图来展示;且对于不同的应用者而言,其所需了解的中间件系统信 息是有限且有所选择的,中间件系统仅需向其展示所关注的部分即可。本文在分 析现有反射中间件技术的基础上,将系统内部信息表达成多层次、多视图的元层, 并采用组件技术,提出一个多元层的反射中间件模型。论文的研究工作还包括将 反射中间件o p e n o r b 实际应用到一个v o i p 管理系统当中。由于采用反射中间件, 提高了系统的适应性,满足了不同用户的需求。 本文所作的主要工作有: 1 )深入研究反射技术的基本原理: 2 ) 研究现有反射中间件技术的实现原理和架构; 第一章绪论 3 3 ) 结合组件技术,提出一个多元层的反射中间件模型; 4 ) 将反射中间件o p e n o r b 应用到v o l p 管理系统方案中。 1 4 论文内容安排 第一章绪论,介绍反射中间件提出的背景和意义以及反射中间件的发展现状, 概述了本文的工作和内容安排。 第二章介绍了反射的基本概念、原理以及反射技术当前的应用。 第三章介绍中间件和反射中间件,分析现有代表性的反射中同件实现机制。 第四章结合组件技术,提出一个多元层的反射中间件模型。 第五章将反射中间件应用到v o i p 管理系统方案中。 第六章对本文所做研究工作的总结,并提出进一步的改进方案。 第二章反射技术概述 5 第二章反射技术概述 传统的设计方法中,通常会采用黑箱抽象的方法来为用户屏蔽系统的复杂性, 这样虽然给用户带来很大的便利,但是因为设计者无法知道用户的具体需求,所 以也就无法提供一个最适合用户的模块实现策略,采用混合编码和冗余编码虽然 在一定程度上解决了这一问题,但是同时也使系统变得更为复杂和难以理解。 开放实现方法的出现解决了这一问题。开放实现方法实际上是对黑箱抽象方法 的改进,它允许由用户去选择或修改其模块的实现策略,通过适度的内部开放, 在保持黑箱抽象的不透明性和客户所需的性能要求之间取得平衡。 反射技术就是在开放实现基础上发展起来的一种技术,它很大程度上提升了系 统的开放性和灵活性。目前反射技术已经有了长足的发展,在很多领域和方面已 经得到了应用,同时也出现了很多种不同的反射编程语言。 2 1 1 黑箱抽象 2 1 传统的设计方法 软件设计在传统上遵循“黑箱”( b l a c k - b o x ) 抽象的原则,即一个模块应该向客 户呈现其功能而隐藏其自身实现。这一点已成为处理计算机领域中许多重要问题, 如可移植性、可重用性等的基本对策和理念唧。 工程中最基本问题是对系统复杂性的控制。系统有时过于复杂,使我们无法也 没有必要去了解系统所有细节。作为工程人员在设计实现一个复杂系统时,一般 使用抽象( a b s t r a c t ) f f l l 分解( d e m p o ) 的方法将系统分成较小的模块,然后有选择 的去分析设计某一个模块的细节部分。抽象和分解是抽象的概念,无法明确的给 出分解和抽象的方法。怎样将系统分成各个部分,并且为这些部分提供明确的接 口界面,这就需要一定的原则来指导系统的分解和界面的确定。 黑箱抽象就是这样一种原则,使用黑箱抽象原则将系统分为若干个功能模块, 每个模块只将功能接口暴露给用户而屏蔽其内部实现。在系统设计中,这种传统 形式的抽象体现为三个主要组件:黑箱、接口和用户程序,如图2 1 所示。黑箱实 现某种抽象,并在一个接口上提供功能或服务给用户程序。接口将用户程序与实 现相分离;用户程序仅能使用接口呈现的机制,去操作和控制抽象的黑箱i l o 】 6 基于反射技术的中间件研究和应用 用户程序 接口 黑箱 图2 1 传统的黑箱抽象模型 这里展示出了黑箱抽象的两个重要特性:第一,分离( s e p a r a t i o n ) 将抽象的使用 与它的实现细节分隔开来,允许客户使用一个抽象而无需了解其下的细节;第二, 泛化( g e n e r a l i z a t i o n ) 将抽象本身与某个具体实现区分开来,所以可以改变实现而不 必改动抽象( 因此也无需改动依照这个抽象编码的客户) 。通过以这种方式运用分离 和泛化,可以对系统模块化,并重用各组件。 这样的设计简化了用户代码,因为用户只需要使用模块提供的接口,而不用关 心功能的内部实现细节;同时也通过减少模块和用户程序的关联性,保证模块的 移植性和重用性。 但是在某些情况下,黑箱抽象并不能很好的达到它的目的。因为如果功能模块 的设计者不知道用户是怎样使用该模块的,那就无法提供一个最适合用户的模块 实现策略,因为通常只有用户才知道怎样实现功能模块才能更好的适应他的应用。 所以设计者只能考虑最一般的情况,按相对通用的策略去设计模块,然后将这种 策略固化在模块实现中。黑箱抽象强迫模块的使用者接受设计者指定的默认策略, 然而当用户无法接受模块的部分默认策略,又希望使用该模块的部分功能时,就 会产生冲突。这时用户就希望通过某种策略对模块进行调整。 2 1 2 改进方法 为了解决这个问题,客户程序的编写者不得不采用一些折中的方法。有两种形 式:一种方法是冗余编 玛( h e m a t o m a so fd u p l i c a t i o n ) ,一种是混和编码( c o d i n g _ ( a ) ( b ) 第二章反射技术概述 7 图2 2 冗余绩码和混和编码 1 1 冗余编码 代码冗余( 图2 2 a ) 是在黑箱之上,利用所提供的开放接口,重新实现满足自己 需要的功能。但是对应用程序而言,这是一种代码的冗余,因为用户实现库中可 能重写了大量底层库中己经实现的代码。而且这种方案也仅仅解决了针对这个具 体应用的冲突问题对于其它的应用也许还要开发其它的功能库。 劲混和编码 混和编码( 图2 2 b ) 方式的且的是获取更好的性能,需要在代码编写上采用技巧 性较高的特殊方法。采用这种方法有赖于对底层系统实现和上层应用的较深认识。 但是,混和代码通常比较晦涩难懂,因为系统自身的操作和如何使用下层结构之 间没有清楚的分开,而是混和在一起,使得代码难于移植和维护。 2 2 开放实现 虽然黑箱抽象有很多很好的特性,如可降低开发成本、局部修改性好等,它屏 蔽了内部实现细节,为用户提供了清晰的使用界面。但是基于黑箱抽象设计的模 块一般是面向广泛用户需求,并以典型的方法实现功能,由于模块实现策略是固 定的,这样的实现策略可能不能满足特定用户的需求。 研究发现,将所有的实现细节隐藏在模块接口后边是很不现实的,其中有些细 节是关键性实现策略,它会影响最终的实现性能,所以模块的实现细节应该向客 户开放,使客户也可以控制这些细节。如果能够让用户去控制模块的实现策略, 那么一个模块就会更具重用性。现在越来越多的系统在设计时,倾向于让客户自 己能够选择模块实现策略,以满足自己的需要。这种方法就是文中要讨论的开放 实现( o p e ni m p l e m e n t a t i o n ) 。 所谓开放实现( o p e ni m p l e m e n t a t i o n ) 是指将系统的内部实现开放出来,向用户 提供有约束的访问,以检查和控制系统的内部实现l ”。 2 2 1 开放实现的抽象模型 开放实现实际上是在黑箱抽象基础上的改进。黑箱抽象隐藏了所有的内部实现 细节,而开放实现则允许由用户去选择或修改其模块的实现策略。但是开放实现 并非意味着将所有的内部细节全部暴露给用户,因为这样将无法提供给用户一个 有效的友好的使用界面。通过适度的内部开放,开放实现在保持黑箱抽象的不透 明性和客户所需的性能要求之间取得平衡。 基于这个要求,开放实现要提供两类界面接口:基接口( b a s e i n t e r f a c e ) 和元接 口( m e t a i n t e r f a c e ) 。如同图2 3 所示: 8 基于反射技术的中间件研究和应用 图2 3 开放实现抽象模型 基接口就是模块的功能界面,用户通过基界面使用模块功能;元界面也就是模 块的开放界面,用户可以通过元界面调整基界面所隐藏的细节实现。 如果定义s 为实现策略集,c 为用户行为配置文件,那么开放实现模块将c 映 射到s ,也就是对一个特定用户的行为配置文件c 选择相应的实现策略s ,如图 2 4 所示。 基接口 寺一 客户配置文件接口 模块实现选择接口 新策略接口 图2 4 开放实现策略模型 上图中,基接1 3 实际上是模块的黑箱接口,用户通过该界面使用模块功能,通 过配置文件接1 3 提供自身的行为信息,通过实现选择接1 3 选择相应的实现策略, 通过新策略接口提供新的实现策略。 2 2 2 开放实现的目标 开放实现的目标是使客户编程人员能够1 7 i : 当缺省的实现满足需要的时候,就以常规方式使用模块的基本功能; 如果需要,可以控制模块以确定实现的策略; 通过相互分离的方法处理功能和实现策略 可以看出,开放实现并非完全抛弃黑箱实现,而是保留了黑箱实现的优势。开 放实现既要保证对大多数用户提供典型的实现策略,也要保证对特定的用户提供 第二章反射技术概述 9 特定的策略。 2 3 反射技术 反射的概念最初由s m i t h 在1 9 8 2 年提出i 引。从那以后,在计算机科学界,引发 了大量的关于反射应用的研究。最初,相关工作局限在编程语言设计这个领域, 特别是在l i s p 和面向对象这两个方面。这些工作的成果集合在c o m m o ni j s po b j e c t s y s t e m ( c l o s ) 的设计中。有些研究人员已经考虑到了反射在并发对象语言、基于 逻辑的语言和基于规则的语言中的影响。近年来,反射的运用己扩展到窗口系统、 操作系统和分布式系统等领域。 2 3 1 反射的定义 随着反射应用的多样化,术语“反射”一词,难以给出其精确定义,一般说来, 反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某 种机制来实现对自己行为的描述( s e l f - r e p r e s e n t a t i o n ) 和监测( e x a m i n a t i o n ) ,并能 根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义i 切。 计算机科学领域的反射不单单指反射本身,还包括对反射结果所采取的措施。 所有采用反射机制的系统( 即反射系统) 都希望使系统的实现更开放。可以说, 实现了反射机制的系统都具有开放性,但具有开放性的系统并不一定采用了反射 机制,开放性是反射系统的必要条件。 一般来说,反射系统除了满足开放性条件外还必须满足原因连接 ( c a u s a l l y - c o n n e c t e d ) 。所谓原因连接是指对反射系统自描述的改变能够立即反映 到系统底层的实际状态和行为上的情况,反之亦然。开放性和原因连接是反射系 统的两大基本要素。显然,它们也是反射中间件的基本属性。 2 3 2 反射的目的 引入反射的目的主要是提供一套有原则的对系统后台实现策略进行访问的方 法,以实现对开放系统的检查( i n s p e c i i o n ) 和调整( a d a p t a t i o n ) 1 1 4 1 。 检查 反射可以被用于对开放系统的内部行为进行检查。通过暴露后台实现,可以直 接插入模块来检查系统的行为。这样的方法也可以用于实现性能监测、服务质量 ( o o s ) 监测和记账系统等。 调整 反射也可以用于对开放系统内部行为进行调整。这种调整要么是修改系统已有 的某些特性的解释( 通过修改和替换) 或者增加删除某些特性。前者的例子有;修改 1 0 基于反射技术的中闻件研究和应用 消息传输的方式以便优化无线连接情况下的性能,或者在系统资源不足的情况下 降低视频服务的服务质量等。后者的例子包括:在一个运行的计算过程中通过插 入过滤对象减少通讯流的带宽需求。 2 3 3 反射的特性 采用反射技术,反射系统的设计和应用程序的开发都得益于反射的基本特性: 透明性( t r a n s p a r e n c y ) 、关注分离( s e p a r a t i o no fc o n c e r n sk 可见性( v i s i b i l i t y ) 、反射 粒度( r e f l e c t i o ng r a n u l a r i t y ) 等。 1 ) 透明往 透明性,是指反射系统在逻辑上可以看作是一种多层结构( 反射塔) ,每一层的 实体相对其上层的实体而言是独立的。这样就可以透明地对低层进行检查和调整。 当将元层与基层集成时,对基层代码的改动程度,可以衡量这个反射系统的透明 度【1 1 1 。 2 1 关注分离 反射塔的不同层关注系统的不同方面,即基层执行系统的功能,其它层扩展( 由 其下分层组成的1 系统的不同非功能性方面,比如:容错、并发、持久性等。这样, 利用反射就可以容易地扩展一个计算系统。将系统的不同方面( 功能性属性或各种 非功能性属性1 委派给不同的分层,就称为关注分离f 1 2 1 。 可见性 可见性表示元计算的范围,郎哪些基层实体或基层实体的哪些方面涉及到了元 计算。 舢反射粒度 反射粒度指一个反射系统中,被不同元实体具体化的基层实体最小的方面。通 常的粒度层次是;类、对象、方法、方法调用等。如果反射粒度是在方法这个层 次,则同一对象的两个方法可以被两个不同的元实体具体化,从而表现出两种不 同的元行为。小的反射粒度使软件系统有更好的灵活性和模块性,但元实体的数 量也会激增。 2 3 4 反射的分类 反射可以从三个不同的角度进行分类n 5 1 。 1 1 过程性和声明性反射 根据反射的使用方式,可以分为过程性反射( p r o c e d u r a lr e f l e c t i o n ) 和声明性反射 ( d e c l a r a t i v er e f l e c t i o n ) 。 过程性反射中,系统的自表示是由实现这个系统的程序提供的,或者说系统的 第二章反射技术概述 1 1 自表示是通过用户程序的逻辑表现出来的。所以过程性反射的自表示通常是用与 编写用户程序相同的语言编写的。在这种情况下,应用程序和元程序是用同一种 计算模型编写的,比如在具有反射性面向对象语一言中,调用( i n v o c a t i o n ) 。继承 ( i n h e r i t a n c e ) 等面向对象的概念在元层和应用程序层都有使用。其最大的优点为因 果相关是自动包含在应用程序的实现里的,是通过程序代码体现出来的。 声明性反射中,系统的自表示不是通过系统的实现体现出来的。自表示是通过 对系统行为状态的描述集体现出来的。这种方法更为抽象,考虑更多的是应该获 取哪些系统实现,而不是如何去获取。它的缺点是因果相关比较难以获得。过程 性和声明性的反射是可以混和使用的。 2 1 解释型和编译型反射 根据反射使用的环境,可以分为解释型反射( i n t e r p r e t e dr e f l e c t i o n ) 和编译型反 射( d y n a m i cc o m p l i e dr e f l e c t i o n ) 。早期,这种分类主要是针对编程语言的。 在解释型的反射中,反射是通过解释进程的自然特性表现出来的。解释器构造 程序的行为信息,充分提供了有关程序的各种信息。通过提供对这些自表示信息 的访问,就可以实现反射,使得编程者可以检查、调整计算进程的内部自表示。 例如j 瓜,a 等。 对于编译型反射,自表示信息是在编译时构造的,但是编译完成后这些信息就 被丢弃了( 除了调试信息) ,这就使得编译环境下很难构造反射。现在,编译器可以 构造完整的自表示信息,并且可以提供运行时访问。有一些语言提供编译时反射, 但是不允许在运行时访问、修改元信息。例如o p e nc + + ,m p c + + ,i g u a n a 。 3 1 结构性和行为性反射 根据反射控制的不同方面,可以分为结构反射( s t r u c t u r a lr e f l e c t i o n ) 和行为反射 ( b e h a v i o r a lr e f l e c t i o n ) 。这两种类型并不互斥,可以同时存在。需要说明的是这种 分类也是针对编程语言的。 结构反射是指语言对正在执行的程序和它的抽象数据类型进行完全的具体化 的能力。结构性反射允许检查和调整计算系统的代码。最初的函数语i - - i ( t i s p ) 和 逻辑语言( p r o l o g ) 都有一些声明性的语句去改动程序的表达,这主要基于语言的解 释性特性。 行为反射是指提供了对其语义和用于执行当前程序的数据的完全具体化。行为 反射允许检查和调整一个系统运行时的行为。通常对编程人员屏蔽的方面被开放 了出来,例如,方法分配机制、对象存储机制等。行为反射不同于结构反射的地 方在于只能增加或改动代码段,而不能改动执行引擎。 基于反射技术的中间件研究和应用 2 3 5 反射的缺点 反射在开放性和灵活性方面有不可比拟的优越性,但是也有一定的缺陷。 1 性能 反射不可避免的会增加额外的系统开销。需要用额外的代码对系统行为进行精 确的解释( 因为这些行为是会变化的) 。而这种解释代码在黑箱实现中是不需要的, 因此需要在系统性能和灵活性之间进行平衡。 2 安全性 其次是完整性和安全性问题。在程序员通过开放实现的元界面去访问系统的内 部实现时,必须保证系统的完整性。一方面,对系统自表示的充分访问是很重要 的,但是另一方面,不受限的访问却是很危险的。所以必须在对自表示的完全访 问和有限访问之间取得平衡。 3 复杂性 许多应用更严重的一个问题是使用反射会模糊程序内部实际要发生的事情。程 序人员希望在源代码中看到程序的逻辑,但反射等绕过了源代码的技术会带来维 护问题。所以要只在真正可以增加灵活性的地方才使用反射。 2 3 6 反射编程语言 反射是从编程语言领域发展起来的,3 - l i s p 和c l o s 是反射语言的典型例子, j a v a 语言也提供了对反射特性的支持,下面介绍这几种语言,重点介绍j a v a 语言 的反射机制。 2 3 6 13 - l i s p 和反射塔 采用反射设计的第一个系统是3 - l i s p 。3 - l i s p 中,程序可以访问它的解释器的 数据结构,由此来实现反射连接。s m i t h 在引人反射塔的概念的时候,是将它作为 语言实现扩展性的一种结构。它将这种结构建模为无限层的解释器构成的塔,每 一个解释器同时也是由其上层的解释器所解释的一个程序,用户的程序运行在塔 的最低层。也可以这样说,位于第0 层的用户程序由一个解释器运行,而这个解 释器是一个位于第1 层的程序,这个在第1 层的程序依次是由位于第2 层的程序 解释的,等等。这样就形成了解释器构成的塔。如果我们把一个程序考虑为位于 第n 层的一个函数,它事实上也是一个由第a + l 层解释的数据结构。这里的关键一 点在于,在这个反射结构中所给定的一个函数,不仅表现为一个函数,而且是一 个可以被检查和操作从而改变其行为的数据结构。这些特性导致了一种容易扩展 的语言,因为语言实现所用的结构可以被编程人员访问。 这个概念模型的无限递归,在3 - l i s p 的实现中是这样处理的:即仅在需要的时 候才创建相应解释器。 第二章反射技术概述 2 3 6 2c l o s 和元对象协议 一方面c l o s 是基于通用函数、多重方法、方法组合等设施的面向对象的编程 语言;另一方面它是一个反射语言,它提供了一些机制,可以使编程人员访问语 言的实现,检查内部结构和改动对象系统的行为。通过访问语言的实现,编程人 员可以调整它的组件,以适应特定的应用领域或硬件平台,或建立语言级的扩展。 与3 - l i s p 的反射塔不同,c l o s 中的反射机制是元对象协议( m e t ao b j e c t p r o t o c o l 或m o p ) 。m o p 将对象系统实现的结构定义为元对象,用元对象来表示构 造a d s 自身的类、对象、通用函数、方法等等。因此,c l 0 s 的内部行为( 如为 一个对象的存储槽分配空间、计算类的层次关系或查询存储槽的值等) 都定义为 对元对象的方法调用。而c l o s 程序可以检查和调整元对象。元层的表示是一种 面向对象的表示,因此对元层的改动也通过面向对象的机制进行,如继承、特殊 化等。可以说m o p 是反射和面向对象编程的集成。 2 3 6 3j a v a 与反射技术 j a v a 提供一种通过反射动态链接程序组件的方法。它允许程序创建和控制任何 类的对象( 根据安全性限制) ,而无需提前硬编码目标类。 2 3 6 3 1j a v a 反射机制的实现原理 j a v a 反射是结构型反射,其反射基于j a v a 虚拟机( j v m ) 的动态装载机制。j a v a 在使用到某个类时,才由j v m 将其装入。 1 装入类 诸如c 和c + + 这些编译成本机代码的语台通常在编译完源代码之后需要链接 这个步骤。这一链接过程将来自独立编译好的各个源文件的代码和共享库代码合 并起来,从而形成了一个可执行程序。而使用j a v a 语言,由编译器生成的类在被 装入到j v m 之前通常保持原状。链接类不是一个独立步骤,它是在j v m 将这些 类装入到内存时所执行作业的一部分。在最初装入类时这一步会增加一些开销。 但也为j a v a 应用程序提供了高度灵活性。 2 装入器 j a v a 类的装入过程如下图所示,装载器在装入j a v a 类时会根据需要装入引导 类、扩展类装入器、系统类装入器、自定义装入器。 1 4 基于反射技术的中间件研究和应用 图2 5j a v a 类的装入过程 每个构造好的类在某种意义上是由装入它的类装入器所“拥有”。类装入器通 常保留它们所装入类的映射,当使用某个类时,就能通过名称找到该类。每个类 装入器还保留对父类装入器的引用,这样就定义了类装入器树,树根为引导程序 装入器。能装入独立的类集合这一灵活性是j a v a 平台的个重要特性。 这里,j a v a 平台灵活性在某种程度上是以启动应用程序时较高的开销作为代价 的。在j v m 可以开始执行甚至最简单的应用程序代码之前,它都必须装入数百个 独立的类。相对于频繁使用的小程序,这个启动成本通常使j a v a 平台更适合于长 时间运行的服务器类型的应用程序。 2 3 6 3 2j a v a 反射实现方法 使用反射的起点总是j a v a 1 a n g c l a s s 实例。c l a s s 对象提供获取接入类元数据信 息的所有反射a p i 。这类元数据包括关于类自身的信息,如包和类的父类以及该类 实麓的接口。它还包括该类定义的构造函数、字段和方法的详细信息。一个典型 的反射例子;在j a v a 中可使用类名直接生成类,这实际上首先通过装入器,若该 类未装入,则装入该类。反射使执行代码能够访问内部类信息。这可能是构建灵 活代码的极佳工具,可以不使用类之间任何源代码链接就能够在运行时将代码挂 接在一起。 使用反射a p i ,可以完成以下工作: 判断对象类型 获取类的构造函数、字段、方法、父类 查找接口中的定义的常量( c o n s t a n t s ) 和方法 创建一个只有在运行时才知道类型的实例 在运行时,根据名字获取、设置对象的字段值 在运行时,根据名字获取、执行一个对象的方法 根据类型名创建一个在运行时才知大小的指定类型的数组 第二章反射技术概述 对于构造函数、字段和方法。j a v a 1 a n g c l a s s 提供四种独立的反射调用,以不 同的方式来获得信息。调用都遵循一种标准格式。实际上就是在类型未知的情况 下,获取指定的方法和字段进行操作。它是在运行时访问有关j a v a 类信息的一种 方法。它能用于访问类实例中的字段和方法,提供了在运行时将类动态地链接在 一起的方法,而无需类之间的源代码链接。 2 4 面向对象的反射系统 大多数反射语言和系统的研究都采用了面向对象的计算模型。反射技术使得在 隐藏不必要暴露的实现细节和不损失移植性的前提下开放语言的实现成为可能; 而面向对象技术使得语言实现和行为的最终模型可以被局部的增量调整。通过与 面向对象技术的结合,反射系统可以实现扩展性、增量性、易用性。 2 4 1 面向对象系统中的反射技术 就如在传统o o p ( o b j e c t - o r i e n t e d - p r o g r a m ) 中对象代表了现实世界中的实体一 样,对象本身也可用其它对象来表现,后者又称为元对象( m e t a - o b j e c t ) 。元对象的 计算( 又称为元计算,m e t a - c o m p u t a t i o n ) 用于观测和修改它们的指示物( 即所代表的 对象) 。元计算常常是通过捕获他们的指示物来计算,由元对象执行;换句话说, 指示物的行为被元对象所捕获,后者执行元计算,这样就替换或封装了指示物的 行为。当然,元对象自身也可由其它对象来表现,即它们是二重元对象 ( m e t a m e t a - o b j e c t ) 的指示物,以此类推。这样,一个反射系统可以是一种多层结 构,形成一个反射塔( r e f l e c t i v et o w e r ) 。在基层的对象称为基对象( b a s e - o b j e c t s ) ,它 们对应用领域中的实体进行计算:在其它层,即元层( m e t a - l e v e l ) 的对象,对其相邻 低层( 指示物层) 的对象执行计算1 1 5 j 。 基对象与元对象之间不一定是一一对应的关联:几个元对象可以共享同一个指 示物;单个元对象也可有几个指示物。反射塔的相邻层之间的界面通常称为元对 象协议( m e t a - o b j e c t - p r o t o c o l 或m o p ) 。 每一次反射计算可以分为两个逻辑部分:计算流上下文切换和元行为。计算从 基层的计算流开始;当基层实体执行某个行为时,该行为被元实体捕获,于是这 时计算流上升到元层,称为上移操作( s h i f t - u pa c t i o n ) :然后元实体执行完元计算, 当它允许基层实体执行时,计算流返回基层,称为下移操作。 在所有反射模型中,一个基本概念就是具体化( r e i f i c a t i o n ) 。为了对相邻底层的 计算执行计算,每一层维护一组支持这个计算的数据结构,即前述的因果相连的 自表示,而创建这种自表示将原本隐式的方面显示化的过程就称为具体化。当然, 相邻底层的哪些方面被具体化,取决于反射模型( 如,结构、状态和行为、通讯等) 。 1 6 基于反射技术的中间件研究和应用 在任一种情况下,包含自表示的数据结构与系统被具体化的哪些方面是因果相连 的。在相邻层之间保持这种因果相连关系是反射基础设施( r e f l e c t i v ei n f r a s t r u c t u r e ) 所具有的职责,而元对象的设计者和编程人员并不知道如何实现因果相连关系等 细节。 具体化( r e i f i c a t i o n ) 使内部自表示的某些方面显露出来,提供给应用程序使用。 这个过程可以存在于应用程序到元层、元层到二重元层,依次类推。相反的过程 是吸收过程( a b s o r p t i o n ) ,它将元系统的某些方面改变或隐藏起来。开放实现中的基 界面和相应的基程序、元界面和相应的元程序,与反射中反射塔的基层和基对象、 元层和元对象有所不同。 基界面和元界面讨论的是采用开放实现的模块提供给用户的两种界面。基界面 反映的是模块的功能,而元界面用于检查和调整模块的内部实现。这个模块的概 念可大可小,既可以是编程语言、操作系统,中间件系统等。也可以是程序中一 个小的编程模块。在这些模块之上的应用程序也相应分为两部分:调用模块基界 面的部分称为基程序,丽调用元界面的程序部分称为元程序。 反射塔、基层、基对象、元层、元对象、元计算等,主要用于描述反射计算。 在基层的基对象,对应用领域中的实体进行计算;在元层的元对象,对基层的基 对象执行计算。通过系统的基界面,应用程序可以构造基对象,使它们协同工作 以解决应用领域中的问题;通过系统的元界面,应用程序可以检查和改动元层的 元对象,调整系统的实现以满足应用的特定要求。所以,元界面并非元对象的界 面。比如,一个元对象本身采用了开放实现的思想,那么他提供给客户的既有基 界面,也有元界面。 2 4 2 系统的反射模型 不同的反射系统之间最明显的区别是系统的反射计算模型。根据元对象与基对 象的关系,反射模型分为:元类模型( m e t a c l a s s m o d e l ) 、元对象模型( m e m o b j e c t e d ) 、 元通讯模型( m e t a - c o m m u n i c a t i o nm o d e l ) 、元组模型( m e r e g r o u p - m o d e l ) 。 2 4 2 1 元类模型 类描述了对象的结构和行为。在元类模型中,反射塔是通过实例化关系实现的。 具体化基对象的元对象是它的类,而具体化元对象的二重元对象是它的元类 “n e t a d 勰s ,也即元对象的类) 等等,如图2 6 所示。类很适于控制和改动结构信息, 因为它本来就包含这些信息。这种模型的问题在于很难单独指定某一个实体的元 行为,因为同一个类的所有实体有同一个元对象,所以所有实体共享同样的元行 为。 第二章反射技术概述 1 7 阿丽网 i ! 竺i o f - 图2 6 元类模型 2 4 2 2 元对象模型 这种模型中的元对象,是一个特殊类m e t a - o b j e a 或其子类的实例,如图2 7 所示。反射塔是由调用关系实现的。每个元对象截取( 上移操作) 送往其指示物的消 息,对这些消息执行元计算,然后才将它们交付( 下移操作) 给指示物。 图2 7 元对象模型 原则上,每个元对象可与多个指示物相联,每个指示物也可有多个元对象。但 是考虑到效率,在大多数实现中,元对象与对象是一一对应的。通常元对象作为 基对象的一个实例变量而与基对象相关联。通过开发元对象的新的类,就可以定 义新的元行为,这样就可以针对每个对象定制其元行为。元对象模型是应用最广 泛的模型,其应用不局限于编程语言,还涉及操作系统( 如a p e r t 0 s ) 、分布式系统 r 如c o d a ) 等。 2 4 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46420-2025磷灰石和锆石铀、钍、氦同位素测定与年龄计算方法
- 沈阳音乐学院《现代测试实验》2024-2025学年第一学期期末试卷
- 检验科临床检验技术规范
- 贵州食品工程职业学院《战略管理1》2024-2025学年第一学期期末试卷
- 2025-2026学年上海大学附中高二生物第一学期期末复习检测试题含解析
- 检验科疾病贫血检测指南
- 2026届江苏省南京江浦高级中学数学高二上期末监测模拟试题含解析
- 慢性阻塞性肺病急性加重期急救教程
- 血小板减少症护理流程
- 肺癌手术后的护理管理方案
- 延髓梗死课件
- 大跨度钢结构滑移施工技术
- 建筑工程技术生涯发展展示
- 2025-2026学年人教版数学七年级上册暑期计算题自学练习(含解析)
- 河南公墓管理办法
- ANSI∕NEMA2502020EnclosuresElectricalEquipment1000VoltsMaximum(电气设备外壳(最大1000伏))
- 2025年上海应用技术大学c语言试题及答案
- DB42-T 2391-2025 全域国土综合整治项目实施方案编制指南
- 无讼学院实习律师培训结业考试题目含答案
- DG-TJ08-2021-2025 干混砌筑砂浆抗压强度现场检测技术标准
- 养老院护理员培训课件
评论
0/150
提交评论