分布式对象技术

 

以面向对象技术为主要特征的分布式计算技术从90年代初开始,经过多年的发展,现已经进入了成熟时期,一般将其称为分布式对象技术。分布式对象技术主要是在分布式异构环境下建立应用系统框架和对象构件,在此框架的支撑下,开发者可以将软件功能包装为更易管理和使用的对象,这些对象可以跨越不同的软、硬件平台进行互操作

    (1)分布式对象技术的特点

    分布式对象技术将分布在网络上的全部资源都按照对象的概念来组织,每个对象都有明晰的访问接口,这些对象可存在于网络的任何地方,通过方法调用的形式访问。一般来说,创建和维护分布式对象实体的应用称为服务器,按照接口访问该对象的应用称为客户。分布式对象技术的最大特点是具有分布的透明性,这种透明性体现在客户访问某个对象时,它不需要知道该对象在网络中的具体位置,以及运行在何种操作系统上,更不需要知道该对象使用何种程序设计语言和编译器所创建。

    分布式对象技术的实质性进步在于使面向对象技术能够在异构的网络环境中得以全面、彻底和方便地实施,从而能够有效地控制系统的开发、管理和维护的复杂性。

    (2)分布式对象技术对传统面向对象技术的影响

    传统的面向对象技术强调在软件开发过程中面向客观世界或具体问题领域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物,其基本的特征主要表现在抽象性、封装性、继承性和多态性。抽象性就是忽略事物中与当前目标无关的非本质特性,而强调与当前目标有关的本质特性,发现事物的共性,并将具有共性的事物划为一类,得到一个抽象的概念。封装性就是把对象的属性和行为结合成一个独立的单位,并尽可能将对象的数据和实现服务的细节隐藏起来,客户只能通过对象的接口来访问的技术,封装是所有面向对象的系统所追求的一个主要目标。继承性表现了类与类之间的层次关系,通过在不同程度上运用抽象得到较一般的类和较特殊的类,特殊类拥有一般类的属性和行为,运用继承性对具有层次关系的类的属性和行为进行共享,可大大减少程序设计的复杂性,并提高软件的可维护性和可重用性。多态性是指同一名称的操作可以是不同的类的行为,可以使用相同的调用方式来调用这些不同功能的同名操作 (6)

    分布式对象技术继承了传统的面向对象思想,但与此同时,也带来了许多新的问题。一个常见的问题是,分布式对象技术可以直接使用传统的面向对象分析和面向对象设计方法,但却不能直接使用C++等传统的面向对象编程环境,这是因为,传统的对象与访问该对象的程序只能存在于同一进程中,并且只有相关程序设计语言的编译器才能创建并感知这些对象的存在,而外部进程无法了解和访问这些对象。因此,分布式对象技术的研究工作向传统的面向对象原理提出了各种挑战,对传统的面向对象技术产生了不同方面的影响。

    首先,是对封装性的影响。在分布式系统中,由于客户和服务器经常存在于不同的计算机中,因此客户很难了解服务器的实现细节,这也进一步体现了封装性的思想,它通过把客户和向客户提供服务的对象在物理上分开来阻止客户对对象数据的直接访问。但是在分布式系统中,实现服务的细节要比传统的面向对象技术复杂得多,其封装的内涵因此也更加丰富,它不仅要屏蔽实现服务的细节,更重要的是,它还需要屏蔽“系统是分布的”这一特性,也就是说,分布式系统平台应该向上层的应用和用户屏蔽服务的实现细节,提供分布透明性。分布透明性是对传统的面向对象技术的封装特性在分布式环境中的延伸和发展,只有提供了分布透明性,才能达到面向对象技术所追求的一个主要目标,那就是尽可能地屏蔽实现服务的细节。

    其次,是对继承性的影响。分布式系统中实现对象继承的难度非常大,分布式系统中都不支持跨站点的继承性。例如,假设对象A是对象B的一个特例,而且两个对象将要分布在不同站点上,如果完全按照传统的面向对象的概念的话,对象A可以继承对象B的属性和行为,但是在实际的应用中,对象A要想在分布式环境下继承对象B的属性和行为是非常困难的。通过对继承性进行仔细研究后可以发现,产生问题的根源不在于继承性本身,而在于对象完成服务时所需的高代价连接,如果能够有效地避免在连接时所付出的代价,则分布式对象也可以实现继承性。经过分析研究,可以从接口继承出发,实现分布式对象的继承性,其主要思想是:系统首先根据接口的继承关系生成接口的继承关系图,当客户请求某一个接口中所描述的某个服务时,如果系统检查到与该服务所对应的对象实现不存在,可以根据接口的继承关系图,查找是否有其它能够提供该服务,并且相应的对象实现又存在的对象,如果有,则向客户返回该对象的信息,客户可以根据这些信息直接与目标对象建立连接。

    第三,是对对象引用方面的影响。对象引用不仅用来在系统中标识一个对象,客户还可以根据它所知道的对象引用来与相应的对象建立连接,从而访问该对象。在集中式的面向对象的语言中,由于所有的对象都存在同一个地址空间中,对象引用一般都用指向该对象所在的内存地址的指针来表示。在分布式系统中,由于对象可能分布在不同的节点上,所以不能用简单的内存地址指针来表示对象引用,需要由一个复杂的数据结构来表示,在设计这个数据结构时,要考虑系统分布带来的一些问题,如网络协议,网络地址和对象的迁移等。

    (3)分布式对象实现的机制

    分布式系统己经对传统的对象模型进行了扩展,因此,要实现分布式对象模型,必须引入新的机制。

    首先,引入了分布式调用的机制。客户的主要工作是通过调用对象接口中的操作来获得对象所提供的服务,在分布式系统中,由于对象往往存在于不同的地址空间中,所以无法象集中式系统那样通过过程调用来完成这项工作,通常采用把请求消息传递给对象来完成。同时在实现分布式调用的过程中,还必须考虑各种分布透明性的问题,一般来说,最需要提供的是位置透明性和访问透明性,有了这两种透明性后,客户就不必关心对象所在的位置,以及客户和目标对象所在系统的类型是否相同。针对上述情况,分布式系统引入了如下机制。

    远程过程调用RPC(Remote Procedure Call) RPC把本地过程调用的语义扩展到分布式环境,它利用底层的消息传输设施来为远程构造本地进程的抽象,通过消息传递,使应用像调用本地进程一样来调用远程过程,这样,用户在开发分布式应用时,便可以不关心“系统是分布的”这一事实。

    对象请求代理ORB (Object Request Broker)ORB是对象管理组织OMG(Object Management Group)CORBA中的规范,其作用是把客户发出的请求传给目标对象,并且把目标对象的执行结果返回给发出请求的客户。因此,ORB提供了客户和目标对象之间的交互透明性,其中就包含位置透明性和访问透明性。

    分布式虚拟存储器:该技术把虚拟存储器的概念扩展到分布式环境中,其核心思想是在分布式系统中建立跨越多个节点的虚拟地址空间,当访问一个对象时,首先确定该对象所在的位置,然后把它装入本地的地址空间,这样便可以使用标准的过程调用来处理分布式调用。

    上述几种分布式调用的机制适用于不同的情况,当单个客户端不断地访问某个特定对象,则比较适合使用分布式虚拟存储器:当一个对象被众多的其它对象所共享,则RPC方法更合适;与这两种方法相比,ORB的灵活性更高,因为它可以根据具体的环境对对象做出创建、激活等管理决策。 

  其次,引入了通用服务在分布式系统中的实现的方法。同一服务在不同的对象中可以具有不同的实现,这种具有多个实现的服务称为通用服务。支持通用服务的异构分布式系统可以为同一个服务提供多个不同的实现,这些实现提供等价的接口。客户只需发出请求,系统将根据目标对象所在系统不同而运行不同的代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值