5.IDL文法(1)
5.1 IDL
IDLは、CORBAの分散オブジェクトがどのようなインタフェースを提供するかを定義するための言語です。IDLは分散オブジェクトを実装するプログラミング言語とは独立した言語であり、さまざまなプログラミング言語とのマッピングが定義されています。それぞれの言語用のIDLコンパイラを用いてIDLをコンパイルすることにより、各言語で記述されたスタブやスケルトンなどのソースコードを生成することができます。
この章ではIDLの文法を説明します。以下に簡単なIDLの例を示します。
module Module1{ // モジュール宣言
interface Func1{ // インタフェース宣言
typedef long mytype; // 型宣言
exception myException{ // 例外宣言
string str;
};
mytype operation1(in string name) // オペレーション宣言
raises(MyException);
readonly attribute long data; // 属性宣言
};
};
IDLではモジュール、インタフェース、ユーザ定義型、例外、オペレーション、属性などを定義します。これらのIDLの要素をJavaの要素と対応をとると、以下の表のようになります。
|
IDL
|
JAVA
|
|
モジュール
|
パッケージ
|
|
インタフェース
|
クラス
|
|
オペレーション
|
メソッド
|
|
属性
|
インスタンス変数
|
5.2 予約語
IDLの予約語は以下の通りです。それぞれの使用法は各項目で説明します。
|
abstract
|
any
|
attribute
|
boolean
|
case
|
char
|
|
const
|
context
|
custom
|
default
|
double
|
exception
|
|
enum
|
factory
|
FALSE
|
fixed
|
float
|
in
|
|
inout
|
interface
|
local
|
long
|
module
|
native
|
|
Object
|
octet
|
oneway
|
out
|
private
|
public
|
|
raises
|
readonly
|
sequence
|
short
|
string
|
struct
|
|
supports
|
switch
|
TRUE
|
truncatable
|
typedef
|
unsigned
|
|
union
|
ValueBase
|
valuetype
|
void
|
wchar
|
wstring
|
5.3 データ型
IDLで利用できるデータ型には以下のようなものがあります。
|
基本データ型
|
整数型
|
long long |
固定長
|
64bit |
| long |
固定長
|
32bit |
| unsigned long |
固定長
|
32bit |
| unsigned long long |
固定長
|
64bit |
| short |
固定長
|
16bit |
| unsigned short |
固定長
|
16bit |
|
浮動小数点型
|
float |
固定長
|
IEEE単精度 |
| double |
固定長
|
IEEE倍精度 |
| long double |
固定長
|
IEEE倍精度拡張浮動小数点 |
|
文字型
|
char |
固定長
|
8bit。コード体系により変換される。 |
| wchar |
固定長
|
実装依存 |
|
固定小数点型
|
fixed |
固定長
|
|
|
オクテット型
|
octet |
固定長
|
8bit。コード体系に依存しない。 |
|
論理型
|
boolean |
固定長
|
|
|
文字列型
|
string |
可変長
|
\0で終了する文字配列。char型の配列に相当。 |
| wstring |
可変長
|
wchar型の配列に相当
|
|
列挙型
|
enum |
固定長
|
|
|
any型
|
any |
固定長
|
汎用的なデータ構造 |
|
構造体
|
struct |
固定/可変
|
|
|
共用体
|
union |
固定/可変
|
|
|
シーケンス型
|
sequence |
可変長
|
|
|
配列型
|
array |
固定/可変
|
|
|
value型
|
valuetype |
固定/可変
|
オブジェクトの値渡しに用いる |
IDLをコンパイルすると各種のプログラム言語に変換されるため、データ型もIDLのものから各言語のものに変換されなくてはいけません。このデータ型の変換規則は規格により定義されています。例としてC言語とJava言語へのマッピングの一部を示します。
| IDL |
C |
Java |
| long |
CORBA_long |
int |
| insigned long |
CORBA_unsigned_long |
int
|
| short |
CORBA_short |
short |
| unsigned short |
CORBA_unsigned_short |
short |
| float |
CORBA_float |
float |
| double |
CORBA_double |
double |
| char |
CORBA_char |
char |
| octet |
CORBA_octet |
byte |
| boolean |
CORBA_boolean |
boolean |
| string |
CORBA_string |
java.lang.String |
| enum |
CORBA_enum |
class |
| any |
CORBA_any |
org.omg.CORBA.Any |
| sequence |
struct |
class |
| struct |
struct |
class |
| union |
struct |
class
|
IDL string 型は8bitのIDL char型の配列に相当するため、Java String 型の文字列に日本語などが含まれていた場合、変換に失敗して例外が発生します。Java
で実装することを前提とするなら、文字列には IDL wstring 型を使用するのが良いでしょう。