課程目錄
 IDL通常用于遠(yuǎn)程調(diào)用軟件。 在這種情況下,一般是由遠(yuǎn)程客戶終端調(diào)用不同操作系統(tǒng)上的對象組件,并且這些對象組件可能是由不同計算機(jī)語言編寫的。IDL建立起了兩個不同操作系統(tǒng)間通信的橋梁。
從本質(zhì)上講,OMG IDL接口定義語言不是作為程序設(shè)計語言體現(xiàn)在CORBA體系結(jié)構(gòu)中的,而是用來描述產(chǎn)生對象調(diào)用請求的客戶對象和服務(wù)對象之間的接口的語言。OMG IDL文件描述數(shù)據(jù)類型和方法框架,而服務(wù)對象則為一個指定的對象實現(xiàn)提供上述數(shù)據(jù)和方法。 
OMG IDL文件描述了服務(wù)器提供的服務(wù)功能,客戶機(jī)可以根據(jù)該接口文件描述的方法向服務(wù)器提出業(yè)務(wù)請求。在大多數(shù)CORBA產(chǎn)品中都提供IDL到相關(guān)編程語言的編譯器。程序設(shè)計人員只需將定義的接口文件輸入編譯器,設(shè)定編譯選項后,就可以得到與程序設(shè)計語言相關(guān)的接口框架文件和輔助文件。IDL文件應(yīng)用過程。
IDL(Interface Definition Language)即接口定義語言,是CORBA規(guī)范的一部分,是跨平臺開發(fā)的基礎(chǔ)。IDL提供一套通用的數(shù)據(jù)類型,并以這些數(shù)據(jù)類型來定義更為復(fù)雜的數(shù)據(jù)類型。可變化 IDL 基本類型 整數(shù)類型 OMG IDL 摒棄int 類型在不同平臺上取值范圍不同帶來的多義性的問題。常數(shù)定義常數(shù)可以是整數(shù)、字符、浮點數(shù)、字符串、Boolean、octet 或枚舉型,不能是 any 類型或用戶定義的類型。OMG IDL數(shù)組類型IDL array 和 sequence,可以輕易地被映射到實現(xiàn)語言中。序列可以包含所有類型的元素,不管是基本類型還是用戶定義的類型。
 
從本質(zhì)上講,OMG IDL接口定義語言不是作為程序設(shè)計語言體現(xiàn)在CORBA體系結(jié)構(gòu)中的,而是用來描述產(chǎn)生對象調(diào)用請求的客戶對象和服務(wù)對象之間的接口的語言。OMG IDL文件描述數(shù)據(jù)類型和方法框架,而服務(wù)對象則為一個指定的對象實現(xiàn)提供上述數(shù)據(jù)和方法。 
  OMG IDL文件描述了服務(wù)器提供的服務(wù)功能,客戶機(jī)可以根據(jù)該接口文件描述的方法向服務(wù)器提出業(yè)務(wù)請求。在大多數(shù)CORBA產(chǎn)品中都提供IDL到相關(guān)編程語言的編譯器。程序設(shè)計人員只需將定義的接口文件輸入編譯器,設(shè)定編譯選項后,就可以得到與程序設(shè)計語言相關(guān)的接口框架文件和輔助文件。
 
IDL文件應(yīng)用過
 
 
 
 
 
 
圖1 OMG IDL文件編譯過程
 
 采用OMG IDL這樣的說明性語言,其目的在于克服特定編程語言在軟件系統(tǒng)集成及互操作方面的限制,這正是CORBA的誘人之處,同樣也體現(xiàn)出采用CORBA構(gòu)造分布式應(yīng)用程序在網(wǎng)絡(luò)時代的強(qiáng)大生命力。OMG IDL已經(jīng)為C、C++、Java等主要高級程序設(shè)計語言制定了IDL到高級編程語言的映射標(biāo)準(zhǔn)。項目開發(fā)人員可以根據(jù)需要選擇自己最熟悉的編程語言來獨立開發(fā)基于CORBA的應(yīng)用,而對軟件系統(tǒng)的互操作能力不產(chǎn)生影響。
 
 
OMG IDL的語法規(guī)則 
1. OMG IDL文件舉例 
  module Compute 
  { typedef double radius; 
  typedef long times; 
  interface PI 
  { double getResult( in radius aRadius, in times time); } 
  } 
  上述接口定義文件主要用于客戶端向服務(wù)對象提出請求:計算π值。因此,模塊中定義了一個方法getResult(),以圓的直徑(aRadius)和迭代次數(shù)(times)作為該方法的輸入?yún)?shù)。 
2. OMG IDL詞法規(guī)則 
  OMG IDL采用ASCII字符集構(gòu)成接口定義的所有標(biāo)識符。標(biāo)識符由字母、數(shù)字和下劃線的任意組合構(gòu)成,但第一個字符必須是ASCII字母。IDL認(rèn)為大寫字母和小寫字母具有相同的含義,例如anExample和AnExample是相同的。 
  與C++和Java類似,采用以“/*”開始,以“*/”結(jié)束來注釋一段代碼,以“//”開始注釋從“//”開始直至行尾的所有內(nèi)容。 
  另外,IDL保留了47個關(guān)鍵字,程序設(shè)計人員不能將關(guān)鍵字用作變量或方法名。需要注意的是關(guān)鍵字的大小寫,例如: 
  typedef double context; 
  //錯誤:定義的變量context是關(guān)鍵字 
  typedef double CONTEXT; 
  //錯誤:CONTEXT與關(guān)鍵字context沖突
 
3,接口(interface) 
  接口作為服務(wù)對象功能的詳細(xì)描述,封裝了服務(wù)對象提供服務(wù)方法的全部信息,客戶對象利用該接口獲取服務(wù)對象的屬性、訪問服務(wù)對象中的方法。 
  接口用關(guān)鍵字interface聲明,其中包含的屬性和方法對所有提出服務(wù)請求的客戶對象是公開的,如下例: 
  interface JobManager 
  { readonly attribute string FirstName; 
  attribute string status; 
  string QueryJobStatus( in long Number, out string property); }
 
IDL語言數(shù)據(jù)類型有什么?
 
(1)基本數(shù)據(jù)類型:OMG IDL基本數(shù)據(jù)類型包括short、long和相應(yīng)的無符號(unsigned)類型,表示的字長分別為16、32位。 
(2)浮點數(shù)類型:OMG IDL浮點數(shù)類型包括float、double和long double類型。其中float表示單精度浮點數(shù),double表示雙精度浮點數(shù),long double表示擴(kuò)展的雙精度浮點數(shù)。 
(3)字符和超大字符類型:OMG IDL定義字符類型char為面向字節(jié)的碼集中編碼的單字節(jié)字符; 定義類型wchar為從任意字符集中編碼的超大字符。 
(4)邏輯類型:用boolean關(guān)鍵字定義的一個變量,取值只有true和false。 
(5)八進(jìn)制類型:用octet關(guān)鍵字定義,在網(wǎng)絡(luò)傳輸過程中不進(jìn)行高低位轉(zhuǎn)換的位元序列。 octet 是 8 位類型。因為保證了 octet 在地址空間之間傳送時不會有任何表示更改,因此這就使它變成了一種非常重要的類型。這就表示您可以發(fā)送二進(jìn)制數(shù)據(jù),并且知道當(dāng)將它打包時,它的形式仍然相同。其它每種 IDL 類型在傳輸時都有表示變化。例如,根據(jù) IOR 代碼集信息的指示,char 數(shù)組會經(jīng)歷代碼集轉(zhuǎn)換。而 octet 數(shù)組卻不會。
 
(6)any數(shù)據(jù)類型:引入該類型用于表示OMG IDL中任意數(shù)據(jù)類型。 
(7) 常量 
  OMG IDL用const關(guān)鍵字聲明一個常量,用于模塊(module)或接口(interface)中定義保持不變的量,如: 
  const double PI = 3.1415926; 
  在IDL中,可以定義long、unsigned long、unsigned short、char、boolean、float、double、string類型的常量。
 
(8)結(jié)構(gòu)類型: 
  typedef long GoodsNumber; 
  struct 
  { GoodsNumber number; 
  string name; 
  float price; } 
(9)聯(lián)合類型: 
  union stockIn switch( short ) 
  { case 1: stocker : long; 
  case 2: goodsName1 : string; 
  case 3: goodsName2 : string; } 
(10)枚舉類型: 
  enum GoodsStatus { GOODS_SALED, GOODS_INSTOCK}; 
(11) 數(shù)組類型 
  OMG IDL的數(shù)組類型提供了多維定長、統(tǒng)一數(shù)據(jù)格式的數(shù)據(jù)存儲方式——數(shù)組。每一維的長度必須在定義時給定,所有數(shù)據(jù)單元必須存儲相同類型的元素。如下例定義一個長度為20×100的整數(shù)數(shù)組: 
  typedef long aDimension[20][100]; 
(12)模板(template)類型 
  OMG IDL提供兩種類型的模板: 
(13)序列(sequence)類型: 
  用該方法定義長度可變的任意數(shù)值類型的存儲序列,通常在定義時可以指定長度,也可以不指定,如: 
  typedef sequence aSequence; 
  //長度定義為80 
  typedef sequence anotherSequence; 
  //長度不定 字符串(string)序列: 
  同樣對于字符串序列類型,也有兩種定義方式: 
  typedef string <80> aName; //長度定義為80 
  typedef string anotherName; //長度不定
 

郵箱
huangbenjincv@163.com

灵川县| 宾阳县| 思茅市| 金秀| 如皋市| 平泉县| 云霄县| 柳江县| 额尔古纳市| 吕梁市| 濉溪县| 上饶市| 正蓝旗| 寿宁县| 上高县| 台东县| 武邑县| 大新县| 昌江| 察雅县| 布尔津县| 黔西| 新巴尔虎右旗| 吉林省| 莆田市| 泗阳县| 抚远县| 新巴尔虎右旗| 宜黄县| 屏东市| 垦利县| 泰和县| 宿州市| 乌拉特后旗| 海原县| 涞源县| 嵊州市| 阿克| 周宁县| 裕民县| 邓州市|