ITPub博客

首页 > 应用开发 > IT综合 > IDL语言介绍

IDL语言介绍

原创 IT综合 作者:SARA1800 时间:2007-10-28 08:52:10 0 删除 编辑

因为微软的VISIO图中,UML图中可以设置IDL数据类型,所以读了网络上一篇BLOG.下面是对该数据类型的一些简单FAQ.注意,下面有两个IDL概念!!而UML图中的明显是第二种,绿色部分.参考网址: http://asc.2dark.org/node/46http://hi.baidu.com/haoxing168/blog/item/a7c8347a48cb29ef2f73b336.html

_____________________________________________________香乡

1、IDL是什么?

美国RSI公司(现并入ittvis--编者注)的旗舰产品--IDL(Interactive Data Language)交互式数据语言是进行二维及多维数据可视化表现、分析及应用开发的理想软件工具。作为面向矩阵、语法简单的第四代可视化语言,IDL致力于科学数据的可视化和分析,是跨平台应用开发的最佳选择。早在1982年NASA的火星飞越航空器的开发就使用IDL软件,到现在IDL已经被列为国外许多大学的标准课程,IDL使科研人员无须编写传统程序就可直接研究数据

IDL(Interface Definition Language)即接口定义语言,是CORBA规范的一部分,是跨平台开发的基础。IDL提供一套通用的数据类型,并以这些数据类型来定义更为复杂的数据类型。可变化 IDL 基本类型 整数类型 OMG IDL 摒弃int 类型在不同平台上取值范围不同带来的多义性的问题。常数定义常数可以是整数、字符、浮点数、字符串、Boolean、octet 或枚举型,不能是 any 类型或用户定义的类型。OMG IDL数组类型IDL array 和 sequence,可以轻易地被映射到实现语言中。序列可以包含所有类型的元素,不管是基本类型还是用户定义的类型。

2、IDL语言是什么?

简单的说,IDL是VC、VB、JAVA、FORTRAN、MATLAB、OPENGL等语言的集成。 IDL语言与大型图形和GIS应用软件相距近,应用IDL可以快速的开发出功能强大的三维图形图像处理软件和三维GIS应用系统。

从本质上讲,OMG IDL接口定义语言不是作为程序设计语言体现在CORBA体系结构中的,而是用来描述产生对象调用请求的客户对象和服务对象之间的接口的语言。OMG IDL文件描述数据类型和方法框架,而服务对象则为一个指定的对象实现提供上述数据和方法。
  OMG IDL文件描述了服务器提供的服务功能,客户机可以根据该接口文件描述的方法向服务器提出业务请求。在大多数CORBA产品中都提供IDL到相关编程语言的编译器。程序设计人员只需将定义的接口文件输入编译器,设定编译选项后,就可以得到与程序设计语言相关的接口框架文件和辅助文件。

IDL文件应用过程如图1所示。

图1 OMG IDL文件编译过程

3、IDL语言能干什么?

由于其强大的功能和独特的特点,IDL语言可以应用于任何领域的三维数据可视化、数值计算、三维图形建模、科学数据读取等功能中。概括说来,在地球科学(包括气象、水文、海洋、土壤、地质、地下水等)、医学影像、图像处理、GIS系统、软件开发,大学教学,实验室,测试技术,天文,航空航天、信号处理,防御工程,数学统计及分析,环境工程等很多领域,IDL语言都可以得到广泛而又深远的应用。

采用OMG IDL这样的说明性语言,其目的在于克服特定编程语言在软件系统集成及互操作方面的限制,这正是CORBA的诱人之处,同样也体现出采用CORBA构造分布式应用程序在网络时代的强大生命力。OMG IDL已经为C、C++、Java等主要高级程序设计语言制定了IDL到高级编程语言的映射标准。项目开发人员可以根据需要选择自己最熟悉的编程语言来独立开发基于CORBA的应用,而对软件系统的互操作能力不产生影响。

4、IDL已干出了什么?

目前应用IDL语言,已经开发出了ENVI、IMAGIS、RiverTools、医学等成熟产品。具体的应用实例也非常多,如在2000年澳大利亚悉尼奥运会综合预报系统、美国国家环境卫星数据和信息服务中心的厄尔尼诺现象分析等工作中得到了成功的应用。作为面向矩阵、语法简单的第四代可视化语言,IDL致力于科学数据的可视化和分析,是跨平台应用开发的最佳选择。它集可视化、交互分析、大型商业开发为一体,为用户提供完善、灵活、有效地开发环境。

OMG IDL的语法规则
1. OMG IDL文件举例
  module Compute
  { typedef double radius;
  typedef long times;
  interface PI
  { double getResult( in radius aRadius, in times time); }
  }
  上述接口定义文件主要用于客户端向服务对象提出请求:计算π值。因此,模块中定义了一个方法getResult(),以圆的直径(aRadius)和迭代次数(times)作为该方法的输入参数。
2. OMG IDL词法规则
  OMG IDL采用ASCII字符集构成接口定义的所有标识符。标识符由字母、数字和下划线的任意组合构成,但第一个字符必须是ASCII字母。IDL认为大写字母和小写字母具有相同的含义,例如anExample和AnExample是相同的。
  与C++和Java类似,采用以“/*”开始,以“*/”结束来注释一段代码,以“//”开始注释从“//”开始直至行尾的所有内容。
  另外,IDL保留了47个关键字,程序设计人员不能将关键字用作变量或方法名。需要注意的是关键字的大小写,例如:
  typedef double context;
  //错误:定义的变量context是关键字
  typedef double CONTEXT;
  //错误:CONTEXT与关键字context冲突

3,接口(interface)
  接口作为服务对象功能的详细描述,封装了服务对象提供服务方法的全部信息,客户对象利用该接口获取服务对象的属性、访问服务对象中的方法。
  接口用关键字interface声明,其中包含的属性和方法对所有提出服务请求的客户对象是公开的,如下例:
  interface JobManager
  { readonly attribute string FirstName;
  attribute string status;
  string QueryJobStatus( in long Number, out string property); }

5、 IDL在数字信号与图像处理的优势: 1.高级的智能工具箱 iTools(intelligent tools)的出现是IDL6.0向易用性和易扩展性迈出的重要一步。iTools是由一批工具箱组成,其中包括iPlot、iSurface、iContour、iImage、iVolume等等。IDL使用者可以通过鼠标进行拖放即可完成数据的可视化以及分析工作。 2.极高的运算效率 IDL采用面向矩阵的技术,具有高效编程特点的同时,自动支持多CPUs机制,可以大大提高计算速度。另外,由于IDL对于数据类型的要求比较灵活,可以避免Matlab中强制64Bit参与计算的瓶颈,使得IDL更加适用于工程计算和相关软件的开发。 3.支持海量数据随着计算机应用水品的不断提高,人们数据量的要求也在不断提高。一些朋友反映说好像 IDL对于开辟矩阵的大小有些置疑,这里我需要补充一下。大部分朋友是受了硬件厂商的错觉,硬件厂商宣称自己的计算机能够有多大的内存,实际上是指内存的管理而不是说明能够一次开辟这么大的矩阵。并且,还有一些操作系统方面的限制。举例说明,Windows系列都是32位的操作系统,一次性最大开辟内存是2G,除了系统本身占用资源外,最多能够开到1.2-1.5G就非常不错了,因此,由此看来,IDL在利用内存上还是不错的。如果在64位的操作系统上,问题就会得到缓解。有人曾经在Linux上测试,利用IDL开辟4G的矩阵没有问题。由此完全客服了数据量的瓶颈限制和分块读取的麻烦。 4.灵活的外部语言接口做为高级的语言工具,IDL提供丰富而灵活的语言接口。可以与C、C++、Fortran、VB、 Java、VC等商业开发平台进行相互调用,尤其是IDL中Java Bridge技术,可以在IDL编程环境中直接创建和管理Jave的对象。与此同时,IDL还可以直接调用IMS以及Lapack等算法库,使得科学计算与分析更为方便快捷。同时,IDL还提供数据库的标准接口,可以对各种大型商业数据进行管理以及的高级应用开发。

IDL语言数据类型有什么?

(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关键字定义,在网络传输过程中不进行高低位转换的位元序列。 octet 是 8 位类型。因为保证了 octet 在地址空间之间传送时不会有任何表示更改,因此这就使它变成了一种非常重要的类型。这就表示您可以发送二进制数据,并且知道当将它打包时,它的形式仍然相同。其它每种 IDL 类型在传输时都有表示变化。例如,根据 IOR 代码集信息的指示,char 数组会经历代码集转换。而 octet 数组却不会。
  (6)any数据类型:引入该类型用于表示OMG IDL中任意数据类型。
(7) 常量
  OMG IDL用const关键字声明一个常量,用于模块(module)或接口(interface)中定义保持不变的量,如:
  const double PI = 3.1415926;
  在IDL中,可以定义long、unsigned long、unsigned short、char、boolean、float、double、string类型的常量。

(8)结构类型:
  typedef long GoodsNumber;
  struct
  { GoodsNumber number;
  string name;
  float price; }
(9)联合类型:
  union stockIn switch( short )
  { case 1: stocker : long;
  case 2: goodsName1 : string;
  case 3: goodsName2 : string; }
(10)枚举类型:
  enum GoodsStatus { GOODS_SALED, GOODS_INSTOCK};
(11) 数组类型
  OMG IDL的数组类型提供了多维定长、统一数据格式的数据存储方式——数组。每一维的长度必须在定义时给定,所有数据单元必须存储相同类型的元素。如下例定义一个长度为20×100的整数数组:
  typedef long aDimension[20][100];
(12)模板(template)类型
  OMG IDL提供两种类型的模板:
(13)序列(sequence)类型:
  用该方法定义长度可变的任意数值类型的存储序列,通常在定义时可以指定长度,也可以不指定,如:
  typedef sequence aSequence;
  //长度定义为80
  typedef sequence anotherSequence;
  //长度不定
字符串(string)序列:
  同样对于字符串序列类型,也有两种定义方式:
  typedef string <80> aName; //长度定义为80
  typedef string anotherName; //长度不定

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7534032/viewspace-979079/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    14
  • 访问量
    29135