1

イベント相関子を書く予定です。システムの基本的な部分は、記録された状態とログ ファイルに基づいて障害の原因を認識する巨大な決定ツリーになります。主な懸念事項の 1 つは、そのツリーを維持しやすくすることでした。つまり、プログラマーが簡単に理解して編集できる形式で記述します。 .

7 レベルの入れ子になった if() は、「保守可能で理解しやすい」という私の考えではないため、マシンフレンドリー、ユーザー フレンドリー、および効率的なコスト。明白な答えは、実際のイベント コリレータが記述される C++ にコンパイル可能なドメイン固有の言語を使用することでした。明らかな問題は、その DSL がどのように見えるべきかということでした。

私が最も気に入った提案は、UML アクティビティ図を使用し、それを C++ にコンパイルすることでした。ダイアグラムは、意思決定プロセスによって到達した結論として、ほぼ厳密に意思決定で構成され、アクティビティはツリーのリーフのみで構成されます。本質的に、図は私のグラフィカル DSL であり、C++ で大量の if() にコンパイルする必要があります。すべての条件付き関数を手動で作成する必要はありますが、少なくとも条件間の相互接続はシステムによって処理される必要があります。

では、その図を作成するにはどのツールを使用すればよいでしょうか?

「独自のロール」はコスト効率の良い私の考えではないため、最終的には 1 つのデバイスに対して 1 つの単一の図を作成することを考えると (新しい障害モードが発見されると、永遠に編集される可能性が高いとしても)、私は持っていました。統一モデリング言語ツールのリスト を見てください。

「Languages generated」に「C++」がリストされているものを含め、これらのかなりの数がありますが、現実がそれほど良いものではないことはわかっています.クラス図。決定木を含むファイルが必要です。私が手で書く決定関数呼び出しで事前に満たされた条件を持つ一連の条件ステートメントと、特定の結論関数呼び出しとしての結果。

さて、私の質問は、どれがそれを行うことができ、使用がそれほど難しくなく、高価でもありません.無料のツールが好まれますが、手頃な価格の商用ツールも問題ありません.

または、それに失敗した場合-自作の「コンパイラ」で解析できる形式でそのダイアグラムを保存できるものと、そのコンパイラの作成にアプローチする方法。

もちろん、他の提案も大歓迎です。そのようなコードを生成できる昔ながらのフロー図のツールでしょうか? 必要なものを作成するための専用の DSL が既に存在するのではないでしょうか?

4

2 に答える 2

1

Enterprise Architectは、アクティビティ図を含む動作図からC++コードを生成できます。いくつかのエディションで提供されています。ビヘイビアーコード生成をサポートする最低版の価格は599ドルです。ユーザーガイドのセクションは次のとおりです。動作モデルから生成します。コード生成を超えて、EAはシミュレーション、トレーサビリティ、および他の多くの優れた機能を提供します。

代わりにステートチャートにロジックを実装できる場合は、無料のQMModelerを使用できます。C++コードを生成します。QPアクティブオブジェクトフレームワークで動作するように設計されていますが、QPに依存せずにQMを使用できます。(Enterprise Architectを使用して、ステートチャートからコードを生成することもできます。)

于 2013-01-11T15:31:20.513 に答える
1

この URL は、UML が「XMI フォーマット」として表現されていることを示しています。これは、UML を表現するための XML ベースの標準の一種です。

http://documentation.softwareag.com/webmethods/tamino/ins441/advconc/FromUMLtoXML.htm

この標準を使用する場合、データは他の CASE ツールとの互換性が高くなる可能性があります。

ほとんどの UML ツールには、モデルを XMI 形式にシリアル化する機能が用意されています。XMI は、CASE ツール間でメタデータを交換するための XML ベースの業界標準です。XMI は XML ベースであるため、XSLT スタイルシートを使用して XML スキーマなどの他の形式に変換できます。このようなスタイルシートの例は、http://www.aomodeling.org/にあります。

この XML は、Xerces や (Windows の場合) MSXML /XML DOM などの通常の C++ XML パーサーで解析できると思います。

于 2013-01-11T17:19:48.623 に答える