接口

From Apache OpenOffice Wiki
Jump to: navigation, search




UNO 对象之间的通信基于对象接口。接口分对象外部接口和对象内部接口。


从对象外部看,接口提供对象的一种功能或某个特殊方面。通过发布一组有关对象某个特定方面的操作,接口提供对对象的访问,而无需给出对象的任何内部信息


接口是一个十分合乎自然的概念,日常生活中经常用到它。接口允许建立彼此匹配的对象,而无须了解对象的内部细节。与标准插座匹配的电源插头,或可以适合于各种尺寸的工作手套,就是一些简单示例。这些对象的正常工作是通过标准化配合作用时所要求的最低条件来实现的。


一个较为高级的示例是简单电视系统的“遥控功能”。遥控是电视系统的功能之一。可以用 XPowerXChannel 接口来说明遥控功能。下面的插图显示了一个具有这些接口的 RemoteControl 对象:

RemoteControl 服务


XPower 接口包含控制电源的函数 turnOn()turnOff(),而 XChannel 接口包含控制当前频道的函数 select()next()previous()。这些接口的用户不关心是使用电视机附带的原始遥控,还是某种通用遥控,只要遥控可以实现这些功能即可。只有当遥控无法实现接口承诺的某些功能时,用户才会不满意。


从对象内部或从 UNO 对象实现者的角度来看,接口是抽象规范。OpenOffice.org API 中所有接口的抽象规范都具有一个优点:用户和实现者可签订同意遵守接口规范的合同。一个严格按照规范使用 OpenOffice.org API 的程序将会始终有效,而对于实现者来说,只要遵守合同,就可以对其对象进行任何 操作。


UNO 使用 interface 类型来说明 UNO 对象的这些方面。按照约定,所有接口名称都以字母 X 开头,以将接口类型与其他类型区分开来。所有接口类型都必须继承 com.sun.star.uno.XInterface 根接口,可以直接继承,也可以按层次继承结构继承。专业 UNO - UNO 概念 - UNO 接口 中介绍了 XInterfaceinterface 类型定义多种方法(有时也称为操作),以提供对指定 UNO 对象的访问。


接口通过封装对象数据的专用方法(成员函数)来访问该对象的内部数据。方法通常具有一个参数 列表和一个返回值,而且可以定义异常以进行智能错误处理。


OpenOffice.org API 中的异常概念与 Java 或 C++ 中的异常概念类似。没有明确规范,所有操作都可抛出 RuntimeException,但必须指定其他所有异常。下面的 专业 UNO - UNO 概念 - 异常处理 一节中介绍了 UNO 异常。


请看以下两个示例,了解 UNOIDL 表示法中的接口定义。UNOIDL 接口与 Java 接口类似,方法看起来与 Java 方法签名类似。但是,请注意下面示例中方括号内的标志:

// base interface for all UNO interfaces 
  interface XInterface 
  { 
          any queryInterface( [in] type aType ); 
          [oneway] void acquire(); 
          [oneway] void release(); 
 
  };  
 
  // fragment of the Interface com.sun.star.io.XInputStream 
 
  interface XInputStream: com::sun::star::uno::XInterface 
  {  
      long readBytes( [out] sequence<byte> aData, 
                      [in] long nBytesToRead ) 
                  raises( com::sun::star::io::NotConnectedException, 
                          com::sun::star::io::BufferSizeExceededException, 
                          com::sun::star::io::IOException); 
      ... 
  };

[oneway] 标志表示如果基本方法调用系统不支持此功能,则可以以异步方式执行操作。例如,UNO 远程协议 (URP) 桥是一个支持单向调用的系统。


Documentation caution.png 尽管 UNO oneway 功能的规范和实现没有出现常规问题,但在几种 API 远程使用方案中,oneway 调用会导致 OpenOffice.org 中发生死锁。因此,请不要使用新的 OpenOffice.org UNO API 引入新的 oneway 方法。


还存在参数标记。每个参数定义都以方向标志 in 、 out 或 inout 开头,用来指定参数用途:

  • in 指定参数仅用作输入参数
  • out 指定参数仅用作输出参数
  • inout 指定数可以用作输入和输出参数


这些参数标记不在 API 参考中出现。方法细节中说明了一个参数实际上是 [out] 参数还是 [inout] 参数。


包含方法的接口形成服务规范的基础。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages