IDL 是接口描述语言(Interface description language,缩写IDL),是CORBA规范的一部分,是跨平台开发的基础。IDL是用来描述软件组件接口的一种计算机语言。IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流;比如,一个组件用C++写成,另一个组件用Java写成。OMG IDL文件描述了服务器提供的服务功能,客户机可以根据该接口文件描述的方法向服务器提出业务请求。在大多数CORBA产品中都提供IDL到相关编程语言的编译器。程序设计人员只需将定义的接口文件输入编译器,设定编译选项后,就可以得到与程序设计语言相关的接口框架文件和辅助文件。
在语法规则方面,类似于C++或Java中关于接口或对象的定义,OMG IDL增加了一些构造方法支持IDL特有的方法调用机制。OMG IDL只是一种说明性的语言,支持C++语法中的常量、类型和方法的声明。采用OMG IDL这样的说明性语言,其目的在于克服特定编程语言在软件系统集成及互操作方面的限制,这正是CORBA的诱人之处,同样也体现出采用CORBA构造分 布式应用程序在网络时代的强大生命力。OMG IDL已经为C、C++、Java等主要高级程序设计语言制定了IDL到高级编程语言的映射标准。项目开发人员可以根据需要选择自己最熟悉的编程语言来独 立开发基于CORBA的应用,而对软件系统的互操作能力不产生影响。
(1)基本数据类型:OMG IDL基本数据类型包括short、long和相应的无符号(unsigned)类型,表示的字长分别为16、32位。
(2)浮点数类型:OMG IDL浮点数类型包括float、double和long double类型。其中float表示单精度浮点数,double表示双精度浮点数,long double表示扩展的双精度浮点数。
(3)字符和超大字符类型:OMG IDL定义字符类型char为面向字节的码集中编码的单字节字符; 定义类型wchar为从任意字符集中编码的超大字符。
(4)逻辑类型:用boolean关键字定义的一个变量,取值只有true和false。
(5)八进制类型:用octet关键字定义,在网络传输过程中不进行高低位转换的位元序列。
(6)any数据类型:引入该类型用于表示OMG IDL中任意数据类型。
3. 常量
OMG IDL用const关键字声明一个常量,用于模块(module)或接口(interface)中定义保持不变的量,如:
const double PI = 3.1415926;
在IDL中,可以定义long、unsigned long、unsigned short、char、boolean、float、double、string类型的常量。
4. 构造数据类型
类似于C和C++的语法规则,OMG IDL中构造数据类型包括结构、联合、枚举等形式。如下例:
(1)结构类型:
typedef long GoodsNumber;
struct
{ GoodsNumber number;
string name;
float price; }
(2)联合类型:
union stockIn switch( short )
{ case 1: stocker : long;
case 2: goodsName1 : string;
case 3: goodsName2 : string; }
(3)枚举类型:
enum GoodsStatus { GOODS_SALED, GOODS_INSTOCK};
5. 数组类型
OMG IDL的数组类型提供了多维定长、统一数据格式的数据存储方式——数组。每一维的长度必须在定义时给定,所有数据单元必须存储相同类型的元素。如下例定义一个长度为20×100的整数数组:
typedef long aDimension[20][100];
6.模板(template)类型
OMG IDL提供两种类型的模板:
(1) 序列(sequence)类型:
用该方法定义长度可变的任意数值类型的存储序列,通常在定义时可以指定长度,也可以不指定,如:
typedef sequence <long,80> aSequence;
//长度定义为80
typedef sequence <long> anotherSequence;
//长度不定
(2) 字符串(string)序列:
同样对于字符串序列类型,也有两种定义方式:
typedef string <80> aName; //长度定义为80
typedef string anotherName; //长度不定
7.接口(interface)
在前几讲中,均提到了CORBA接口,接口作为服务对象功能的详细描述,封装了服务对象提供服务方法的全部信息源码天空,客户对象利用该接口获取服务对象的属性、访问服务对象中的方法。
接口用关键字interface声明,其中包含的属性和方法对所有提出服务请求的客户对象是公开的,如下例:
interface JobManager
{ readonly attribute string FirstName;
attribute string status;
string QueryJobStatus( in long Number, out string property); }
8.Example
<span style="font-size:12px;">module CorbaAlgorithm{
typedef double d;
interface Algorithm{
string GetName();
d Add(in d x,in d y);
d Sub(in d x,in d y);
d Mul(in d x,in d y);
d Div(in d x,in d y);
};
};</span>