CORBA IDL 部分語法

2021-04-13 13:05:40 字數 3538 閱讀 4185

corba

,idl

idl語法

octet 8位8位數保證傳遞過程中不變(char不是)

idl提供兩個模板型別:sequence(序列)和string(字串)。象陣列一樣,要用typedef指定sequence和string型別的名字

乙個序列是乙個可變長度成員清單,成員可以為任何idl型別。它象一維陣列,但長度是不定的。它可以是有界的也可以是無界的,要看序列型別定義時指定的最大長度。例如,下面定義乙個有界序列型別:

typedef sequence ;

這個型別的例項是乙個長度小於等10的位元組序列。

下一行定義了乙個無界限的位元組序列型別:

typedef sequence

somebytes;

這個型別的例項可以是任意長度的位元組序列。

string

是乙個字串行。象序列一樣,它可以是有界的:

typedef string<15> moniker;

或無界的:

typedef string description;

當定義乙個有界字串型別時,記住任何null結束符不算在串長度之內。使用string面不要用字元陣列。字元陣列中未初始化的成員在翻譯過程中可能引起問題。

結構型別

idl檔案也可以定義結構型別,用關鍵字struct, union和enum。

下邊有乙個結構型別定義的例子:

struct structname ;

注意:這裡沒有typedef。對struct用typedef是不好的習慣,因為它會定義兩個型別名字。

enum

(列舉)型別定義示例:

enum pet ;

idl中的union必須是可區分(discriminated)的。即,用乙個標記字段(tag field)說明聯合的哪些成員是當前被賦值的:

union reference switch (short)

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型的常量。

整數常量可以用10、8、16進製制形式說明。介面

idl檔案中的介面描述了corba物件提供的功能。它封裝客戶使用介面所需的全部資訊。每個介面對應corba伺服器上的乙個類,其定義近似於類的定義:

inte***ce example1 ;

介面用關鍵字inte***ce定義。在介面定義內部是乙個屬性和

方法的清單。所有的屬性和方法都是公開的(public)。這裡沒有私有(private)或保護(protected)的概念,因為這些應該在實現部分處理而不應在物件的公開介面裡。

屬性 介面沒有成員變數。屬性(attributes)象cbuilder的property(這種說法並不暗示值的儲存方法相同)而不象成員變數。用關鍵字attribute定義。

如果不允許客戶寫屬性,定義時要加readonly字首。

readonly attribute float balance;

注意:儘管attribute的行為表現得象properties,但它們並不是用cbuilder的properties(不可移植)實現的。相反,屬性(attributes)被編譯成與屬性同名的getter(及可選的setter)方法。

方法 方法定義必須包括返回值型別。

另外,它們必須在每個引數中用關鍵字in,out,inout提供用法說明,每個引數都必須命名。

通常,方法呼叫在伺服器物件處理呼叫時是阻塞的(blocked)。然而,idl語法允許乙個方法申明為oneway,如果呼叫者確實不需要等待響應的話。

oneway void sendinformation(long value);

重複的方法名是非法的,因為corba是可用於支援方法過載的程式語言的。

注釋:

介面中可以加注釋,用和c++相同的//。

// this is a comment

型別定義

介面可以包括型別定義:

inte***ce example2 ;

// …其它定義部分

}; 在同一介面中的定義可以用名字(example2struct)引用這些型別,但該介面外的定義必須使用範圍限定符(example2::example2struct)。

異常 除了attributes, methods, types, 介面還可以包括使用者定義異常處理:

inte***ce exceptionexample

} setvalue

方法指出它可能丟擲valueoutofbounds異常。這個例子顯示乙個成員的乙個異常,它可以幫助除錯。然而,介面也可以包括無成員包括的花括號{}裡的異常。

上下文(contexts)

方法可以附帶context子句。客戶可以維護乙個或多個corba上下文物件,它提供識別符號(indentifier)到字串(string)值的對映。乙個idl方法可以用關鍵字context申明對特定識別符號的對映必須提供給它的客戶:

inte***ce contextexample ;

}; contextexample

的呼叫者必須傳送乙個context物件作為引數。

模組(modules)

idl檔案將一些定義結合成模組。模組的概念和名字空間(namespace)是一樣的:它允許定義組合成邏輯單元並預防命名空間衝突。乙個模組定義乙個名字空間,就象這樣:

module syntaxexamples ;

inte***ce example2 ;

}; 模組外的定義訪問模組內的定義必須加範圍界定符(syntaxexamples::example1)。

繼承(inheritance)

正如c++類,idl介面可以作為其它類的後代而建立。子代介面繼承祖先介面的屬性和方法:

inte***ce ancestor;

inte***ce desendant:ancestor ;

注意:因為沒有介面相關的實現部分,衍生介面過載相應類方法時不得再在成員函式中列出。

介面支援多繼承,但所有祖先介面都不能有包含相同名字的定義。

所有的idl介面都是隱含繼承了corba介面object。這意味著乙個型別為object的引數可以接受任何corba物件。

提前引用(forward references)

如果兩個介面互相引用,idl檔案必須乙個包含對其中乙個的提前引用,即乙個介面可以引用idl檔案中其後部分的定義。如下所示:

inte***ce example2; // forwar reference

inte***ce example1 ;

inte***ce example2 ;

markdown部分語法

markdown標題 使用 和和 標記一級和二級標題 使用 標記標題,最多有六級標題 回車在任意的文字後加上兩個或者兩個以上的空格 段落正常書寫格式 字型格式 斜體文字 斜體文字 俺也是斜體文字 俺也是斜體文字 粗體文字 粗體文字 粗體文字 粗體文字 粗體加斜體文字 粗體加斜體文字 分割線 可以用三...

Oracle 部分語法

1.純文字標籤 cdata eg 符號 會被當做文字直接解析,即會把 裡的內容直接拼接在sql裡 2.日期轉字元 to char 日期格式的字段,要轉換成的格式 eg select to char sysdate,fmyyyy 年 mm 月 dd 日 from dual 2021年01月19日 3....

Halcon部分語法 3

四季豆又要學習啦!1 等號 2 不等號 3 注釋符號 4 字串賦值 str halcon 5 等於比較符號 if x 10 6 與運算 if a 1 and a 30 7 或運算 if a 1 or a 30 8 求反 if not a 10 9 for迴圈 for i 0 to numballs ...