OMG IDL接口定义语言

上传人:ji****72 文档编号:37520836 上传时间:2018-04-17 格式:DOCX 页数:11 大小:48.13KB
返回 下载 相关 举报
OMG IDL接口定义语言_第1页
第1页 / 共11页
OMG IDL接口定义语言_第2页
第2页 / 共11页
OMG IDL接口定义语言_第3页
第3页 / 共11页
OMG IDL接口定义语言_第4页
第4页 / 共11页
OMG IDL接口定义语言_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《OMG IDL接口定义语言》由会员分享,可在线阅读,更多相关《OMG IDL接口定义语言(11页珍藏版)》请在金锄头文库上搜索。

1、developerWorks 中国Java technology文档库 OMG 接口定义语言定义分布式服务的能力定义分布式服务的能力 Dave Bartlett (), 顾问、作家和讲师 简介:简介: 一切都要从接口定义语言 (IDL) 开始。当我们采用 RPC 或 COM 技术以及 CORBA 技术来编写分布式系统时都需要它。在各种情况下,接口定义语言提供了将对象 的接口与其实现分离的能力。IDL 提供了抽象,它提供了将事务与其具体实现分离的概念。 它还为我们提供了一套通用的数据类型使得我们可以使用它们来定义更为复杂的类型。我 们将采用所有这些数据类型来定义分布式服务的功能。IDL 的另一个

2、好处是它剥离了编程 语言和硬件的依赖性。本文探讨了 OMG IDL 的内置类型和关键字。 发布日期:发布日期: 2000 年 9 月 01 日 级别:级别: 初级 访问情况访问情况 : 1696 次浏览 评论:评论: 0 (查看 | 添加评论 - 登录)平均分 (4 个评分)为本文评分IDL 是一种规范语言。它允许我们从实现中剥离对象的规范(如何与它交互)。这是一个 约定:“客户机女士,如果您要调用这个方法,请传送这些参数,然后我,服务器先生,将 把这个字符串数组返回给您。”使用这个接口的客户机程序员不知道接口背后的实现细节。 OMG IDL 看上去很像 C 语言。这就很容易将这两种语言以及它

3、们的关键字做比较。但是, 这种相似性只流于表面。每种语言的目的是完全不同的。我们在讨论这种语言时,您已经 记住 OMG IDL 的目的是定义接口和精简分布对象的过程。IDL 基本类型基本类型OMG 接口定义语言有一些看上去应该很熟悉的基本类型。以下就是这些内置类型的表: 表表 1. IDL 基本类型基本类型类型类型范围范围最小大小(以位为单位)最小大小(以位为单位)short-2 15到 2 15-116unsignedshort0 到 2 16-116long-2 31到 2 31-132unsignedlong0 到 2 32-132long long-2 63到 2 63-164unsi

4、gned longlong0 到 2 64-164floatIEEE 单精度32doubleIEEE 双精度64longdoubleIEEE 双字节扩展浮点数15 位指数,64 位带符号小数charISOLatin-18wchar从任何宽字符集编码宽字符,如 Unicode依赖于实现stringISO Latin-1,除了 ASCII NUL 以外可变化BooleanTRUE 或 FALSE未指定octet0 到 2558any自己描述的数据类型,可表示任何 IDL 类型可变化整数类型整数类型 OMG IDL 的整数类型非常简单。虽然它没有提供 int 类型,但它不会受到 int 在不同 平台

5、上的取值范围不同所带来的多义性的困扰。然而,IDL 确实提供几种整数类型,2 字 节 ( short )、4 字节( long ) 和 8 字节 ( long long )的整数类型。 所有这些整数类型都有相应的无符号数类型。这对于 Java 程序又产生了问题,因为 Java 编程语言不支持无符号数类型。尽管这不是 OMG IDL 的特性,它还是在 Java-to-IDL 的 映射中创建了一种独有的局面,我们将在下个月的专栏文章中讨论 Java-to-IDL 的映射。 但在此之前,您已经考虑如何将 IDL 中的 unsigned short 映射成一种 Java 类型。 使用 Java sho

6、rt 还是 Java int ?它们各自的利弊是什么?这些是语言映射的作者必 须努力解决的问题,并且这是一个很好的练习,可以帮助您为阅读下一篇专栏文章做好准 备。 浮点类型浮点类型 OMG IDL 浮点数类型 float 、 double 和 long double 遵循 IEEE 754-1985 二 进制浮点数算术的标准。目前, long double 用于巨大数字,您也许会发现您的特殊 语言映射还不支持这种类型。 char 和和 wchar 我们都使用相同的术语,字符集就是字母或其它构成单词的字符以及其它本机语言或计算 机语言的基本单元的集合。编码字符集(或代码集)是一组明确的规则,它建

7、立了字符集 和集合的每个字符与其位表示法之间的一一对应关系。 处理 char 时,必须记住 OMG IDL 必须分两个层次处理字符集。首先必须明确规定从哪 个字符集生成 IDL 定义。词法约定(表示 IDL 文件的关键字、注释和文字的字符记号)规定 ISO 8859.1 字符集表示 IDL 文件中的字符。是的,连 IDL 都必须有一个标准字符 集,它将构建在这个字符集上。ISO 464 定义了空字符(null)和其它图形字符。 接着,OMG 必须处理从一个计算机系统到另一个计算机系统之间的字符传输。这意味着 可能涉及到从一个字符代码集到另一个字符代码集的转换,这取决于语言绑定。在 上个月 的专

8、栏文章中,我们对 Orbacus Object Reference 执行了 IORDump 操作,并且发现了 以下信息:Native char codeset:“ISO 8859-1:1987; Latin Alphabet No. 1“Char conversion codesets:“X/Open UTF-8; UCS Transformation Format 8 (UTF-8)“ISO 646:1991 IRV (International Reference Version)“Native wchar codeset:“ISO/IEC 10646-1:1993; UTF-16,UCS

9、 Transformation Format 16-bit form“Wchar conversion codesets:“ISO/IEC 10646-1:1993; UCS-2, Level 1“ISO 8859-1:1987; Latin Alphabet No. 1“X/Open UTF-8; UCS Transformation Format 8 (UTF-8)“ISO 646:1991 IRV (International Reference Version)“可以看到,IOR 可以包含代码集信息,以在转换时协调首选代码集和可用代码集。 解决了所有问题后,您应该知道 OMG IDL

10、char 是一个 8 位变量,可以用两种方法表示 一个字符。首先,它可以从面向字节的代码集编码单字节字符,其次,当在数组中使用时, 它可以从多字节字符集(如 Unicode),编码任何多字节字符。 Wchar 只允许大于 8 个字节的代码集。规范不支持特殊的代码集。它允许每个客户机和 服务器使用本机的代码集,然后指定如何转换字符和字符串,以便在使用不同代码集的环 境之间进行传输。 Boolean 这里没有什么可以多说的 - Boolean 值只能是 TRUE 或 FALSE。 Octet octet 是 8 位类型。因为保证了 octet 在地址空间之间传送时不会有任何表示更改, 因此这就使它

11、变成了一种非常重要的类型。这就表示您可以发送二进制数据,并且知道当 将它打包时,它的形式仍然相同。其它每种 IDL 类型在传输时都有表示变化。例如,根据 IOR 代码集信息的指示, char 数组会经历代码集转换。而 octet 数组却不会。 any 类型类型 IDL any 是一种包含任何数据类型的结构。该类型可以是 char 或 long long 或string 或另一种 any ,或者是已经创建的一种类型,如 Address 。 any 容器由类 型码和值组成。类型码描述 any 的值部分中的内容是什么。 如果您拥有 C+ 经验,则可以将 any 看作是自我描述的数据类型,它类似于 v

12、oid* , 但更安全。如果有 Visual Basic 经验,可以将any 看作类似于 variant 。当我们讨论 IDL-to-Java 映射时, any 类型的结构和它如何对用户定义的类型产生作用将变得一目了 然。回页首回页首用户定义的类型用户定义的类型基本类型是必不可少的;它们为接口定义提供了构件块。OMG IDL 为您提供了定义您自己 的类型的能力,这可以帮助减少复杂程度并且让您可以根据基本类型组成更精巧的数据类 型。这些复杂的类型可以是枚举、结构和联合,或者您可以使用 typedef 来创建类型的 新名称。 命名的类型命名的类型 应该使用 typedef 创建新的类型名称,这将帮

13、助解释接口或保存输入。 例如,您也许想在方法 PresentWeather(., in floatPressure, .)中传送气压值。如果在该方法中使用 typedef float 语句,这将使该方法更具可读性。typedef float AtmosPressure;在 C+ 中, typedef 关键字表示 类型定义,实际上 别名也许是更为精确的术语。对 于 OMG IDL,也许是这样,也许不是,这取决于其所映射到的实现语言。CORBA 规范不 保证 short 的两种 typedef 是兼容的和可互换的。 在文体上,应注意不要为现有类型创建别名。您应该尝试创建不同概念的类型,它将为您 的

14、 IDL 添加可读性和可扩展性。最好是明确定义一次逻辑类型,然后在整个接口中不断使 用该定义。 枚举枚举 OMG IDL 枚举是将名称附加到数字的一种方法,从而读取代码的人就可以了解到更多的含 义。OMGIDL 版的枚举看上去象 C+ 版本的枚举。enum CloudCovercloudy, sunny;CloudCover 现在就成为可以在 IDL 中使用的一种新类型。由于在一个枚举中可以有最 多 2 32个标识,OMG IDL 保证枚举被映射到至少 32 位的类型。规范中没有规定标识的 有序数值,但它规定了将保持顺序。因此,不能假设 cloudy 永远拥有序数值 0 - 某些 语言映射可能

15、将 1 赋值给它。但可以确保 cloudy 小于 sunny 。 如果认为 IDL 的目的是定义跨各种系统的接口,那么不指定序数值是明智的。您只将值发 送到服务器。即,“cloudy“。在服务器空间中, cloudy 可以由 0、1 或如何实现语言规 定的值表示。某些实现语言不允许您控制序数值,而 C+允许。OMG IDL 不允许空的枚 举。 结构结构 struct 关键字提供了将一组变量集中到一个结构的方法。一旦创建了, struct 表示 可以在整个接口定义中被使用的 新类型。struct Date short month;short day;long year;定义 struct 时,要

16、确保所创建的类型是可读的。不要在不同的名称空间中创建几个不 同的同名结构,这只会使 IDL 的用户搞糊涂。 识别联合识别联合 OMG CORBA 规范将 IDL 联合描述成 C 联合类型和 switch 语句的混合物。IDL 识别联 合必须有一个类型标记字段用于确定在当前实例中使用哪个联合成员。像 C+一样,一次 只能有一个联合成员是活动的,并且可以从其识别名称来确定该成员。enum PressureScalecustomary,metric;union BarometricPressure switch (PressureScale) case customary :float Inches;case metric :default:short CCs;在以上示例中,如果识别名称是 metric,或者使用了不能识别的识别名称值,那么short CCs 就是活动的。如果识别名称是 customary,那么 float 成员 Inches 是活 动的。联合成员可

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号