ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)
Interstage

A.3 インタフェース宣言

インタフェース宣言では、インタフェースの実体を定義します。インタフェース宣言は、C++言語のクラス宣言と同様に他のインタフェース宣言を継承して、新しいインタフェース宣言を行うことができます。他のインタフェース宣言を継承すると、その継承したインタフェース宣言のオペレーション宣言や型宣言などを、あたかも自分で宣言したと同じに扱えるようになります。

インタフェースの継承では、新しいインタフェースを宣言する際に、他のインタフェース宣言を使用して、差分だけを定義できます。また、複数のインタフェースを継承することもできます。これを多重継承と呼びます。すべてのインタフェース定義は、明示的に記述しなくてもObjectインタフェースを継承します。このため、オブジェクト自身にインタフェース情報を問い合わせるメソッドget_interfaceDefなどのObjectインタフェースを使用できます。

以下に、インタフェース宣言の書式を示します。

interface インタフェース名 ;   // フォワード宣言

interface インタフェース名 [:継承するインタフェース] {  // ヘッダ
     オペレーション宣言 ;      // 本体
     属性宣言 ;
     定数宣言 ;
     型宣言 ;
     例外宣言 ;
};

[ ]内は省略可能です。


最初の書式(インタフェース名だけ)は、フォワード宣言です。インタフェースの実体を定義する前に、インタフェース名だけを定義するものです。

フォワード宣言により、相互参照するインタフェースを定義することが可能となります。フォワード宣言されたインタフェースは、それより後方でその実体を定義する必要があります。複数箇所で同じインタフェース名をフォワード宣言することもできます。

2行目以降の書式は、インタフェースの実体を宣言するものです。“継承するインタフェース”を指定すると、他のインタフェースを継承できます。継承するインタフェースの指定方法については、“A.3.1 インタフェースの継承”を参照してください。インタフェースは、1つまたは複数のオペレーション宣言、属性宣言、定数宣言、型宣言から構成され、空のインタフェース(何も宣言しない)とすることもできます。各宣言の詳細については、以降に説明します。
以下にインタフェース宣言の例を示します。この例では、インタフェースFunc2がインタフェースFunc1を継承する際の定義を示します。この場合、クライアントは、インタフェースFunc2のオブジェクトにOpenメソッドの呼出しができます。

module Module1 {
    typedef Object  otype;
    interface  Func1 {                             // インタフェース宣言
        exception  FuncException {                 // 例外宣言
            string  reason; 
        };
        Module1::otype  Open(in string name)       // オペレーション宣言
                raises(FuncException); 
        readonly attribute long  data;             // 属性宣言
        typedef Object  FuncObject;                // 型宣言
    };
    
    interface  Func2 : Func1 {                     // インタフェース宣言
        Module1::otype  Reopen(in string name);    // オペレーション宣言
        oneway void Close(in Module1::otype obj);  // オペレーション宣言
    };
};