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)
{
. . .
}