25.5 abstractインタフェース
abstractインタフェースは,オブジェクトを値渡しするのか参照渡しするのかを実行時に選択できるインタフェースです。
abstractインタフェースはIDLインタフェースとは次の点で異なります。
-
実際のパラメタ型は,オブジェクトがリファレンスによって渡されるか,valuetypeが渡されるかを決めます。このパラメタ型は二つのルールに基づいて決められます。パラメタ型が通常のインタフェース型,またはサブタイプの場合,インタフェース型がabstractインタフェース型のシグニチャのサブタイプの場合,およびオブジェクトがすでにVisiBroker ORBに登録されている場合は,オブジェクトリファレンスとして処理されます。また,パラメタ型がオブジェクトリファレンスとして渡すことはできませんが,値として渡せる場合は,値として処理されます。値として渡すのに失敗すると,BAD_PARAM例外が発生します。
-
abstractインタフェースはCORBA::Object(C++)またはorg.omg.CORBA.Object(Java)から暗黙的に派生しません。それは,abstractインタフェースがオブジェクトリファレンスかvaluetypeのどちらかを表すためです。valuetypeは,必ずしも共通オブジェクトリファレンスオペレーションをサポートする必要はありません。abstractインタフェースのオブジェクトリファレンス型へのナロウに成功したら,CORBA::Object(C++)またはorg.omg.CORBA.Object(Java)のオペレーションを呼び出せます。
-
abstractインタフェースはほかのabstractインタフェースだけから継承できます。
-
valuetypeは,複数のabstractインタフェースをサポートできます。
例えば,次のabstractインタフェースについて次に示します。
- IDLサンプル25-2 abstractインタフェースIDL
abstract interface ai{ }; interface itp : ai{ }; valuetype vtp supports ai{ }; interface x { void m(ai aitp); }; valuetype y { void op(ai aitp); };
メソッドmの引数では
-
itpは常に,オブジェクトリファレンスとして渡されます。
-
vtpは値として渡されます。