13.1.17 インタフェースの実装

OMG IDLの操作は、C++のメンバー関数にマッピングされます。

メンバー関数の名前が操作の名前になります。操作は、インタフェース・クラスとスタブ・クラスの両方でメンバー関数として定義します。インタフェース・クラスは仮想クラスです。一方、スタブ・クラスは仮想クラスを継承し、クライアント・アプリケーション・スタブのメンバー関数のコードを格納します。オブジェクト・インタフェースで操作が呼び出されると、対応するスタブのメンバー関数に格納されているコードが実行されます。

たとえば、次のOMG IDL定義を考えます:

// OMG IDL
module INVENT
    {
    interface Order
       {
       . . .
       ItemList modifyOrder (in ItemList ModifyList);
       };
};

この定義は、次のようにC++にマッピングされます:

// C++
class INVENT
    {
    . . .
class Order : public virtual CORBA::Object
   {
   . . .
   virtual ItemList * modifyOrder (
       const ItemList & ModifyList) = 0;
   };
};
class Stub_Order : public Order
    {
    . . .
    ItemList * modifyOrder (
        const ItemList & ModifyList);
};

生成されたクライアント・アプリケーション・スタブには、スタブ・クラスに対して生成された次のコードが格納されます:

// ROUTINE NAME:   INVENT::Stub_Order::modifyOrder
//
// FUNCTIONAL DESCRIPTION:
//
// Client application stub routine for operation
// modifyOrder.
// (Interface : Order)

INVENT::ItemList * INVENT::Stub_Order::modifyOrder (
      const INVENT::ItemList & ModifyList)
{
. . .
}