«CORBAInterface» クラス間の関係は、関係のタイプおよび多重度に基づいて、生成された IDL 内の要素にマップされます。
«CORBAInterface» クラスから出る外向き、または対称的な関係の矢印は、もう 1 つの «CORBAInterface» クラスのみをターゲットとすることができます。«CORBAInterface» クラスへ向かう内向きの関係の矢印は、通常クラスまたは他の «CORBAInterface» クラスのいずれかから出すことができます。
«CORBAInterface» クラスからの、外向き、または対称的な関係は、以下のように、作成された IDL 内の アクセサー・メソッドまたはミューテーター・メソッド (get()、set()、add()、および clear() など) にマップされます。
例えば、インターフェース A 用に生成された次の IDL は、多重度が 1 であるインターフェース B への有向関係を持っています。
interface A {
//// User-implicit entries ////
B getItsB();
void setItsB(in B p_B);
};
例えば、次の IDL シーケンスは、インターフェース C 用に生成され、多重度が 2 であるインターフェース D への対称的な関係を持っています。
typedef sequence<C> CSeq;
CORBA::Class::IDLSequence プロパティーによって、以下のように、IDL シーケンス名の実装を指定することができます。
«CORBAInterface» は、もう 1 つの «CORBAInterface» からのみ継承できます。
2 つの «CORBAInterface» クラス間の継承は、対応 IDL インターフェース間の継承内に生成されます。例えば、«CORBAInterface» H が «CORBAInterface» G から継承される場合、H 用に、次の IDL コードが生成されます。
interface H : G {};
通常クラスと «CORBAInterface» 間の継承矢印は、インターフェースの実現 (実装) として解釈されます。この構造は、CORBA サーバーの実装に使用される標準的なアーキテクチャーです。
CORBA でオブジェクト・アダプターを実現するには、次の 2 つの方法があります。
CORBA::Class::DefaultImplementationMethod は、プロジェクトの実装メソッド (Inheritance または TIE) を指定します。すなわち、DefaultImplementationMethod が Inheritance に設定されている場合、CORBA インターフェースの実現すべてが、デフォルトにより、継承を使用して実装されます。
例えば、TAO および継承実装メソッドを使用する場合、次のコードが クラス J 用に生成され、«CORBAInterface» I から継承されています。
class J : virtual public IBOAImpl {
public :
// Constructors and destructors
J(const char* instanceName = "");
-J();
};
生成されたコードでは、実現クラス J は、TAO IDL コンパイラーによって生成される IBOAImpl クラスから継承されます。
デフォルトの実装メソッドをオーバーライドするには、特定のクラス用の CORBA::Class::TIERealizes または InheritanceRealizes プロパティーを、それによって実現される «CORBAInterface» クラスの名前に設定することで可能です。すなわち、継承をプロジェクトのデフォルト実装メソッドとして使用している場合でも、TIERealizes プロパティーを、それによって実現される «CORBAInterface» の名前に設定することによって、特定のクラスの実装メソッドとして TIE を使用し続けることができます。同じクラスのための TIERealizes および InheritanceRealizes プロパティーを、それによっていずれかのメソッドを使用して実現される «CORBAInterface» クラスの名前に設定することで、異なるメソッドを使用する、異なる «CORBAInterface» クラスを実現させることができます。