2013年IDL語言基礎(chǔ)教學(xué)視頻

  • 名稱:2013年IDL語言基礎(chǔ)教
  • 分類:程序設(shè)計(jì)  
  • 觀看人數(shù):加載中
  • 時(shí)間:2013/10/4 19:32:13
 IDL通常用于遠(yuǎn)程調(diào)用軟件。 在這種情況下,一般是由遠(yuǎn)程客戶終端調(diào)用不同操作系統(tǒng)上的對象組件,并且這些對象組件可能是由不同計(jì)算機(jī)語言編寫的。IDL建立起了兩個(gè)不同操作系統(tǒng)間通信的橋梁。
從本質(zhì)上講,OMG IDL接口定義語言不是作為程序設(shè)計(jì)語言體現(xiàn)在CORBA體系結(jié)構(gòu)中的,而是用來描述產(chǎn)生對象調(diào)用請求的客戶對象和服務(wù)對象之間的接口的語言。OMG IDL文件描述數(shù)據(jù)類型和方法框架,而服務(wù)對象則為一個(gè)指定的對象實(shí)現(xiàn)提供上述數(shù)據(jù)和方法。 
OMG IDL文件描述了服務(wù)器提供的服務(wù)功能,客戶機(jī)可以根據(jù)該接口文件描述的方法向服務(wù)器提出業(yè)務(wù)請求。在大多數(shù)CORBA產(chǎn)品中都提供IDL到相關(guān)編程語言的編譯器。程序設(shè)計(jì)人員只需將定義的接口文件輸入編譯器,設(shè)定編譯選項(xiàng)后,就可以得到與程序設(shè)計(jì)語言相關(guān)的接口框架文件和輔助文件。IDL文件應(yīng)用過程。
IDL(Interface Definition Language)即接口定義語言,是CORBA規(guī)范的一部分,是跨平臺(tái)開發(fā)的基礎(chǔ)。IDL提供一套通用的數(shù)據(jù)類型,并以這些數(shù)據(jù)類型來定義更為復(fù)雜的數(shù)據(jù)類型。可變化 IDL 基本類型 整數(shù)類型 OMG IDL 摒棄int 類型在不同平臺(tái)上取值范圍不同帶來的多義性的問題。常數(shù)定義常數(shù)可以是整數(shù)、字符、浮點(diǎn)數(shù)、字符串、Boolean、octet 或枚舉型,不能是 any 類型或用戶定義的類型。OMG IDL數(shù)組類型IDL array 和 sequence,可以輕易地被映射到實(shí)現(xiàn)語言中。序列可以包含所有類型的元素,不管是基本類型還是用戶定義的類型。
 
從本質(zhì)上講,OMG IDL接口定義語言不是作為程序設(shè)計(jì)語言體現(xiàn)在CORBA體系結(jié)構(gòu)中的,而是用來描述產(chǎn)生對象調(diào)用請求的客戶對象和服務(wù)對象之間的接口的語言。OMG IDL文件描述數(shù)據(jù)類型和方法框架,而服務(wù)對象則為一個(gè)指定的對象實(shí)現(xiàn)提供上述數(shù)據(jù)和方法。 
  OMG IDL文件描述了服務(wù)器提供的服務(wù)功能,客戶機(jī)可以根據(jù)該接口文件描述的方法向服務(wù)器提出業(yè)務(wù)請求。在大多數(shù)CORBA產(chǎn)品中都提供IDL到相關(guān)編程語言的編譯器。程序設(shè)計(jì)人員只需將定義的接口文件輸入編譯器,設(shè)定編譯選項(xiàng)后,就可以得到與程序設(shè)計(jì)語言相關(guān)的接口框架文件和輔助文件。
 
IDL文件應(yīng)用過
 
 
 
 
 
 
圖1 OMG IDL文件編譯過程
 
 采用OMG IDL這樣的說明性語言,其目的在于克服特定編程語言在軟件系統(tǒng)集成及互操作方面的限制,這正是CORBA的誘人之處,同樣也體現(xiàn)出采用CORBA構(gòu)造分布式應(yīng)用程序在網(wǎng)絡(luò)時(shí)代的強(qiáng)大生命力。OMG IDL已經(jīng)為C、C++、Java等主要高級(jí)程序設(shè)計(jì)語言制定了IDL到高級(jí)編程語言的映射標(biāo)準(zhǔn)。項(xiàng)目開發(fā)人員可以根據(jù)需要選擇自己最熟悉的編程語言來獨(dú)立開發(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ù)對象提出請求:計(jì)算π值。因此,模塊中定義了一個(gè)方法getResult(),以圓的直徑(aRadius)和迭代次數(shù)(times)作為該方法的輸入?yún)?shù)。 
2. OMG IDL詞法規(guī)則 
  OMG IDL采用ASCII字符集構(gòu)成接口定義的所有標(biāo)識(shí)符。標(biāo)識(shí)符由字母、數(shù)字和下劃線的任意組合構(gòu)成,但第一個(gè)字符必須是ASCII字母。IDL認(rèn)為大寫字母和小寫字母具有相同的含義,例如anExample和AnExample是相同的。 
  與C++和Java類似,采用以“/*”開始,以“*/”結(jié)束來注釋一段代碼,以“//”開始注釋從“//”開始直至行尾的所有內(nèi)容。 
  另外,IDL保留了47個(gè)關(guān)鍵字,程序設(shè)計(jì)人員不能將關(guān)鍵字用作變量或方法名。需要注意的是關(guān)鍵字的大小寫,例如: 
  typedef double context; 
  //錯(cuò)誤:定義的變量context是關(guān)鍵字 
  typedef double CONTEXT; 
  //錯(cuò)誤: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)的無符號(hào)(unsigned)類型,表示的字長分別為16、32位。 
(2)浮點(diǎn)數(shù)類型:OMG IDL浮點(diǎn)數(shù)類型包括float、double和long double類型。其中float表示單精度浮點(diǎn)數(shù),double表示雙精度浮點(diǎn)數(shù),long double表示擴(kuò)展的雙精度浮點(diǎn)數(shù)。 
(3)字符和超大字符類型:OMG IDL定義字符類型char為面向字節(jié)的碼集中編碼的單字節(jié)字符; 定義類型wchar為從任意字符集中編碼的超大字符。 
(4)邏輯類型:用boolean關(guān)鍵字定義的一個(gè)變量,取值只有true和false。 
(5)八進(jìn)制類型:用octet關(guān)鍵字定義,在網(wǎng)絡(luò)傳輸過程中不進(jìn)行高低位轉(zhuǎn)換的位元序列。 octet 是 8 位類型。因?yàn)楸WC了 octet 在地址空間之間傳送時(shí)不會(huì)有任何表示更改,因此這就使它變成了一種非常重要的類型。這就表示您可以發(fā)送二進(jìn)制數(shù)據(jù),并且知道當(dāng)將它打包時(shí),它的形式仍然相同。其它每種 IDL 類型在傳輸時(shí)都有表示變化。例如,根據(jù) IOR 代碼集信息的指示,char 數(shù)組會(huì)經(jīng)歷代碼集轉(zhuǎn)換。而 octet 數(shù)組卻不會(huì)。
 
(6)any數(shù)據(jù)類型:引入該類型用于表示OMG IDL中任意數(shù)據(jù)類型。 
(7) 常量 
  OMG IDL用const關(guān)鍵字聲明一個(gè)常量,用于模塊(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ù)存儲(chǔ)方式——數(shù)組。每一維的長度必須在定義時(shí)給定,所有數(shù)據(jù)單元必須存儲(chǔ)相同類型的元素。如下例定義一個(gè)長度為20×100的整數(shù)數(shù)組: 
  typedef long aDimension[20][100]; 
(12)模板(template)類型 
  OMG IDL提供兩種類型的模板: 
(13)序列(sequence)類型: 
  用該方法定義長度可變的任意數(shù)值類型的存儲(chǔ)序列,通常在定義時(shí)可以指定長度,也可以不指定,如: 
  typedef sequence aSequence; 
  //長度定義為80 
  typedef sequence anotherSequence; 
  //長度不定 字符串(string)序列: 
  同樣對于字符串序列類型,也有兩種定義方式: 
  typedef string <80> aName; //長度定義為80 
  typedef string anotherName; //長度不定
 
昌平区| 大荔县| 平潭县| 阿荣旗| 贺州市| 玉溪市| 恭城| 蛟河市| 綦江县| 甘南县| 富平县| 南澳县| 长海县| 呼和浩特市| 永福县| 广汉市| 平南县| 莎车县| 白水县| 天峨县| 如东县| 迁西县| 咸阳市| 盘山县| 漾濞| 罗甸县| 临西县| 常山县| 周至县| 宁阳县| 陕西省| 墨玉县| 波密县| 清河县| 五指山市| 汉中市| 南川市| 连江县| 阳西县| 毕节市| 金湖县|