ステートチャート・コード内への要件のコメントとしての組み込み

ステートチャートに特定の状態または遷移によって満たされる要件がある場合、こうした要件は、ステートチャート用に生成されるコード内にコメントとして組み込むことができます。

始める前に

このフィーチャーは、C、C++、または Java コードの場合に使用できます。
注: このフィーチャーは、フラットなステートチャート実装にのみ適用されます。

手順

ステートチャート・コード内に要件をコメントとして組み込むには、以下のようにします。

  1. ブラウザーで要素の下に要件を作成するか、「トレース」依存関係を作成するか、あるいはアンカーを使用して要件を要素に関連付けることで、要件を状態または遷移に関連付けます。
  2. 関係する構成の「フィーチャー」ウィンドウを開き、「設定」タブで「コードにコメントとして要件を組み込む」オプションが選択されていることを確認します。(これは、CG::Configuration::IncludeRequirementsAsComments プロパティーの値を制御します。)
  3. コードを生成します。

タスクの結果

これは、ステートチャートとそれに生成されるコードのサンプルであり、特定の状態に関連した要件に対するコメントが含まれています。

IOxfReactive::TakeEventStatus Printer::rootState_processEvent() {
    IOxfReactive::TakeEventStatus res = eventNotConsumed;
    switch(rootState_active) {
case Idle:
        {
            if(IS_EVENT_TYPE_OF(OMNullEventId))
                {
                    popNullTransition();
                    pushNullTransition();
                    rootState_subState = GettingPaper;
                    rootState_active = GettingPaper;
                    /*
                    state GettingPaper
                    Realizes requirement Printer must be able to load paper for printing #:
                    
                    */
                    
                    //#[ state ROOT.GettingPaper.(Entry) 
                    getPaper();
                    //#]
                    res = eventConsumed;
                }
            
        }
        break;
        case GettingPaper:
        {
            if(IS_EVENT_TYPE_OF(OMNullEventId))
                {
                    popNullTransition();
                    pushNullTransition();
                    rootState_subState = Printing;
                    rootState_active = Printing;
                    /*
                    state Printing
                    Realizes requirement Printer must be able to print the received data after paper is loaded #:
                    
                    */
                    
                    //#[ state ROOT.Printing.(Entry) 
                    print();
                    //#]
                    res = eventConsumed;
                }
            
        }
        break;
        case Printing:
        {
            if(IS_EVENT_TYPE_OF(OMNullEventId))
                {
                    popNullTransition();
                    pushNullTransition();
                    rootState_subState = Idle;
                    rootState_active = Idle;
                    res = eventConsumed;
                }
            
        }
        break;
        default:
            break;
    }
    return res;
}

フィードバック