`
isiqi
  • 浏览: 16649500 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

CORBA IDL 部分语法

阅读更多

CORBA IDL 部分语法

关键词CORBA ,IDL

IDL语法

 octet 88位数保证传递过程中不变(char不是)

IDL提供两个模板类型:sequence(序列)和string(字符串)。象数组一样,要用typedef指定sequencestring类型的名字

一个序列是一个可变长度成员清单,成员可以为任何IDL类型。它象一维数组,但长度是不定的。它可以是有界的也可以是无界的,要看序列类型定义时指定的最大长度。例如,下面定义一个有界序列类型:

typedef sequence

这个类型的实例是一个长度小于等10的字节序列。

下一行定义了一个无界限的字节序列类型:

typedef sequence <octet>SomeBytes; </octet>

这个类型的实例可以是任意长度的字节序列。

string是一个字符序列。象序列一样,它可以是有界的:

typedef string<15> Moniker;

或无界的:

typedef string Description;

当定义一个有界字符串类型时,记住任何null结束符不算在串长度之内。使用string面不要用字符数组。字符数组中未初始化的成员在翻译过程中可能引起问题。

结构类型

IDL文件也可以定义结构类型,用关键字struct, unionenum

下边有一个结构类型定义的例子:

struct StructName {

char charMember;

unsigned short AnotherMember;

};

注意:这里没有typedef。对structtypedef是不好的习惯,因为它会定义两个类型名字。

enum(枚举)类型定义示例:

enum Pet {cat, dog, fish, bird, rat, horse, gerbil};

IDL中的union必须是可区分(discriminated)的。即,用一个标记字段(tag field)说明联合的哪些成员是当前被赋值的:

union Reference switch (short) {

case 1 : { Title: string; Author: string; }

case 2: URL: string;

case 3: TopicID: long;

};

常量

IDL文件可以定义常量,这些常量可用于界面和类型的定义。用关键字const定义常量:

const unsigned long LengthOfNameString = 15;

IDL文件可以定义类型为long, unsigned long, unsigned short,char boolean,float,double,string的常量。注意,IDL不支持octet型的常量。

整数常量可以用10816进制形式说明。界面

IDL文件中的界面描述了CORBA对象提供的功能。它封装客户使用界面所需的全部信息。每个界面对应CORBA服务器上的一个类,其定义近似于类的定义:

interface Example1 {

readonly attribute string Name;

attribute long Value;

long AddToValue(in long Summand, out long Result);

};

界面用关键字interface定义。在界面定义内部是一个属性方法的清单。所有的属性和方法都是公开的(public)。这里没有私有(private)或保护(protected)的概念,因为这些应该在实现部分处理而不应在对象的公开界面里。

属性

界面没有成员变量。属性(Attributes)象Cbuilderproperty(这种说法并不暗示值的存储方法相同)而不象成员变量。用关键字attribute定义。

如果不允许客户写属性,定义时要加readonly前缀。

Readonly attribute float Balance;

注意:尽管attribute的行为表现得象properties,但它们并不是用Cbuilderproperties(不可移植)实现的。相反,属性(attributes)被编译成与属性同名的getter(及可选的setter)方法。

方法

方法定义必须包括返回值类型。

另外,它们必须在每个参数中用关键字in,out,inout提供用法说明,每个参数都必须命名。

通常,方法调用在服务器对象处理调用时是阻塞的(blocked)。然而,IDL语法允许一个方法申明为oneway,如果调用者确实不需要等待响应的话。

Oneway void SendInformation(long Value);

重复的方法名是非法的,因为CORBA是可用于支持方法重载的编程语言的。

注释:

界面中可以加注释,用和C++相同的//

// this is a comment

类型定义

界面可以包括类型定义:

interface Example2 {

struct Example2Struct {

string Name;

long Value;

};

// …其它定义部分

};

在同一界面中的定义可以用名字(Example2Struct)引用这些类型,但该界面外的定义必须使用范围限定符(Example2::Example2Struct)。

异常

除了attributes, methods, types, 界面还可以包括用户定义异常处理:

interface ExceptionExample {

exception ValueOutOfBounds {

long value;

void SetValue(in long Value)

raises (ValueOutOfBounds);

}

}

SetValue方法指出它可能抛出ValueOutOfBounds异常。这个例子显示一个成员的一个异常,它可以帮助调试。然而,界面也可以包括无成员包括的花括号{}里的异常。

上下文(Contexts

方法可以附带context子句。客户可以维护一个或多个CORBA上下文对象,它提供标识符(indentifier)到字符串(string)值的映射。一个IDL方法可以用关键字context申明对特定标识符的映射必须提供给它的客户:

interface ContextExample {

long SomeMethod(in long Value, in char Letter)

raises (/* */)

context(value1, value2);

};

};

ContextExample的调用者必须传送一个context对象作为参数。

模块(Modules

IDL文件将一些定义结合成模块。模块的概念和名字空间(namespace)是一样的:它允许定义组合成逻辑单元并预防命名空间冲突。一个模块定义一个名字空间,就象这样:

module SyntaxExamples {

interface Example1 {

// definitions here

};

interface Example2 {

// definitions here

};

};

模块外的定义访问模块内的定义必须加范围界定符(SyntaxExamples::Example1)。

继承(Inheritance)

正如C++类,IDL界面可以作为其它类的后代而建立。子代界面继承祖先界面的属性和方法:

interface Ancestor{

//definitions here

};

interface Desendant:Ancestor {

// more definitions here

};

注意:因为没有界面相关的实现部分,衍生界面重载相应类方法时不得再在成员函数中列出。

界面支持多继承,但所有祖先界面都不能有包含相同名字的定义。

所有的IDL界面都是隐含继承了CORBA界面Object。这意味着一个类型为Object的参数可以接受任何CORBA对象。

提前引用(Forward references

如果两个界面互相引用,IDL文件必须一个包含对其中一个的提前引用,即一个界面可以引用IDL文件中其后部分的定义。如下所示:

interface Example2; // forwar reference

interface Example1 {

//definitions

readonly attribute Example2 TheOtherOne;

};

interface Example2 {

//definitions

Example1 ReturnTheOtherOne();

};

分享到:
评论

相关推荐

    IDL语法.pdf

    ### IDL语法详解 #### 一、IDL简介 IDL(Interface Definition Language)是一种用于定义分布式系统中对象接口的语言。IDL使开发人员能够在不同操作系统、编程语言之间定义接口规范,从而实现跨平台通信。CORBA...

    idl.rar_corba

    IDL文件是用文本格式编写的,其语法类似于C++或Java,用来描述服务接口、数据类型和操作。这些接口定义了客户端和服务端交互的合同,使得开发者能够独立于具体的实现来编写客户端和服务器端的代码。 下面我们将深入...

    论文研究-IDL3.0编译器符合性测试研究和设计.pdf

    编译器需要正确解释IDL语法和语义,并生成对应的客户端存根(stub)和服务器骨架(skeleton)。符合性测试确保编译器能够准确地解析IDL定义,并生成符合标准的存根和骨架代码。 3. IDL3.0编译器符合性测试方法的...

    eclipse的idl编译器插件

    5. **生成Stub和Skeleton**:插件能够自动生成客户端和服务端的Stub和Skeleton代码,这是实现CORBA通信的关键部分。 6. **集成构建**:插件与Eclipse的构建系统无缝集成,可以自动编译IDL文件并更新项目的类路径。 7...

    cb编的corba实例

    “idl”虽然在标签中没有直接提及,但它是实现CORBA应用的关键部分,用于定义服务接口,然后可以被编译为不同目标语言(如C++)的代码。 “中间件”是CORBA的另一个关键词,它是指位于操作系统和应用程序之间的软件...

    IDL接口定义语言[定义].pdf

    9. OMG IDL 的语法规则:OMG IDL 的语法规则类似于 C++ 或 Java 中关于接口或对象的定义,OMG IDL 增加了一些构造方法支持 IDL 特有的方法调用机制。 10. IDL 的应用前景:IDL 已经为 C、C++、Java 等主要高级程序...

    [原创]Java平台上的CORBA开发

    - `IDL语法.pdf`详细解释了IDL语言的语法规则和使用技巧。 - `corba.zip`可能包含其他相关源代码、示例或者扩展阅读材料。 6. **实际应用**: - CORBA常用于大型企业级应用,如分布式数据库、网格计算和实时系统...

    CORBA Specification 2.6

    CORBA规范2.6版对IDL的语法和语义进行了详细的说明,包括数据类型、异常处理、模块定义等各个方面,确保了IDL的标准化和一致性。 ### 命名服务 命名服务是CORBA架构中的一个重要组成部分,它提供了一种定位网络中...

    介绍corba使用和java的集成

    Java IDL 允许开发者使用熟悉的 Java 语法来定义接口,并将这些接口转换为 CORBA 接口,从而使得 Java 应用能够与其他支持 CORBA 的应用进行通信。 2. **CORBA ORB for Java**:CORBA ORB 是实现 CORBA 规范的关键...

    CORBA.rar_CROBA_Java CORBA_corba_corba java

    - IDL简介:介绍IDL的语法,如何定义接口和服务。 - 创建ORB实例:演示如何在Java中初始化和使用ORB。 2. **Chapter03**:对象定位与引用 - IOR(Object Reference):解释IOR的概念,它是ORB用于标识远程对象...

    【推荐】CORBA示例代码

    IDL语法类似于C++或Java,用于定义对象的方法、参数和返回值类型。 3. **GIOP(General Inter-ORB Protocol)/IIOP(Internet Inter-ORB Protocol)**:GIOP是ORB之间的通用协议,而IIOP是GIOP在TCP/IP网络上的具体...

    Eclipse-IDL编译插件.zip

    - **语法高亮**:插件提供了对IDL语法的高亮显示,帮助开发者更好地识别代码结构。 - **自动完成**:具备代码自动补全功能,可以提高开发效率。 - **错误检测**:在编写过程中实时检查语法错误,便于及时修正。 ...

    idl.rar_idl基本输入

    在描述中提到,这个RAR压缩包包含的是IDL编译器的词法分析和语法分析部分的输入文件,这通常指的是源代码或配置文件,用于解析和理解IDL编写的接口定义。词法分析是编译器的第一步,它将源代码分解成一个个有意义的...

    IDL精髓.pdf

    这部分内容提供了IDL语言的核心构造的参考,并指导开发者如何使用这些关键字来构建分布式对象系统的接口。 第10章专注于IDL属性的应用和细节,展示了如何使用属性为IDL的关键字和其他构造添加注释。属性用于提供更...

    CORBA动态接口调用

    1. IDL(Interface Definition Language):IDL是面向对象的,类似于C++或Java的语法,用于定义CORBA接口。通过编译IDL文件,可以生成客户端和服务端所需的语言绑定,这些绑定包含了与ORB交互的API。 2. 动态接口库...

    corba技术中文版

    2. **接口定义语言(IDL)**:学习使用IDL来定义分布式对象的接口,它是一种中立于特定编程语言的语法,能被编译成多种目标语言的代码,如C++、Java等。 3. **对象服务**:书中会介绍CORBA提供的各种标准服务,如...

    CORBA.rar_corba

    3. **接口定义语言(IDL)**:IDL是一种与平台和语言无关的语法,用于定义分布式对象的接口。开发者使用IDL编写接口定义,然后通过编译器生成对应目标语言的接口代码。 4. **IR(Interface Repository)**:接口...

Global site tag (gtag.js) - Google Analytics