RiCGEN_BY_X() または CGEN_BY_X()

RiCGEN_BY_X() ステートメントは、イベントを生成して、インスタンスに送りますが、その際にイベントの送信側を識別します。

RiCGEN_BY_X() には、CGEN_BY_X() と同じ効果があります。いずれのステートメントも、グローバル関数内からイベントを送信する場合に役立ちます。

RiCGEN_BY_X() は、特定のオブジェクトをイベントの送信側を識別するので、RiCReactive_genBySender() フレームワーク・ルーチンを使用してイベントを送ります。

例えば、イベントの送信側を Room[2] として fault() イベントを Furnace[1] インスタンスに送るには、以下を使用します。

RiCGEN_BY_X(Furnace[1], fault(), Room[2], Room);

最後の引数 (この場合は Room) は、送信側のタイプを識別します。

GEN_BY_X は、メッセージを送信している AOMAnimationItem がわかっている特殊な場合にのみ使用します。IBM® Rational® Rhapsody® は支援なしで理由を判別できないからです。例えば、ある種の GUI クラス (GUI1 および GUI2) と物事を実行するある種のクラス (Huey および Louey) を持つアプリケーションを作成できます。 アニメーションで 4 つすべてのインスタンスが表示されるように、すべてのクラスを Rational Rhapsody で作成します。

一部の GUI をクラス GUI1 および GUI2 に関連付けます。 MFC ウィザードを使用するほうが Rational Rhapsody を使用するよりも GUI の作成が簡単であるので、このウィザードを使用します。GUI1 のコンストラクターは、いくつかのボタンがある形式無指定ダイアログを構成します。

それぞれのボタンを、イベントを生成するように構成します。 例:

void myDialog::OnButtonXPushed() {
   myHuey->GEN(E);
}

この構成は機能しますが、アニメーションではイベントの送信側はわかりません。代わりに、GEN_BY_GUI を以下のように使用します。

void myDialog::OnButtonXPushed() {
   myHuey->GEN_BY_GUI

アニメーション出力ウィンドウに以下のメッセージが表示されます。

event E generated by GUI

クラス myDialog に所属先の GUI1 のインスタンスを示すメソッド GUI1 *myOwner があった場合、以下のようにコーディングできます。

void myDialog::OnButtonXPushed() {
   myHuey->GEN_BY_X(E,myOwner);
}

この場合、アニメーション (出力ウィンドウ、イベント・キュー、およびシーケンス図) には、正しい GUI1 オブジェクトからのものであるとして E が表示されます。この方法は、特に GUI およびそのダイアログが、まだ作成されていない一部の実際のクラスを作成するテスト・ハーネスである場合に役立ちます。

RiCGEN_BY_X() の定義は以下のとおりです。

#define RiCGEN_BY_X(INSTANCE,EVENT,SENDER,theClass)        ¥
{                                                          \
   if ((INSTANCE) != NULL) {                               ¥
      RiCReactive * reactive = &((INSTANCE)->ric_reactive);¥
      RiCEvent * event = &(RiC_Create_##EVENT->ric_event); ¥
      RiCReactive_genBySender(reactive, event,             ¥
         aomX2Item(SENDER,aomc##theClass));                ¥
   }                                                       \
}

フィードバック