3

私が理解しているように、モデル駆動型開発 (MDD) では自動化が可能であり、変換を適用することで対応するモデルからプログラム/モデルが自動的に生成されます。

変換について私が知っているのは、変換が開発者のプラットフォーム固有の専門知識を保存する何らかの方法であるということだけです。

しかし、変換とは正確には何ですか?

4

3 に答える 3

6

(プログラム)変換は、与えられたプログラム表現インスタンスが別のインスタンスを計算する関数です。

プログラムの表現は任意にできますが、多くの場合、抽象構文木 (AST) またはグラフ (UML など) です。プログラム表現としてバイトコードを含めることもできます。数学関数と同様に、変換は「部分的」である場合があります (つまり、いくつかの [おそらく複雑な] 条件下でのみ機能します)。

個人的には、変換という用語関数自体を指し、変換という用語が、変換を適用して新しい表現を取得する行為または結果を指すのが好きです。

一般に、(グローバルな)プログラムの変換は、それが巨大であっても表現全体に影響を与える可能性がありますが、通常、個々の変換は小さな部分のみを変更し、プログラムの表現の大部分をそのままにします。抽象的には、プログラム表現インスタンス全体が変換によって処理され、別のまったく新しいプログラム表現インスタンスが生成されます。表現インスタンスは大きくなる傾向があるため、変換によって既存の表現インスタンスを変更するだけで実装されることがよくあります。このような「小さな」変換は、変更を加える表現の特定の部分に焦点を当てる追加のパラメーターを持っていると考えることができます。

数学関数と同様に、変換は「より大きな」変換を生成するために合成されます (条件も合成されるため、これも部分的です)。通常、1 つの変換で表現インスタンス全体を 1 ステップで処理することはできないため、プログラム表現全体を変換する一連の変換を記述します。それらを構成できるという事実により、集合的に目的を達成する多くの「小さな」変換を記述できるため、意味翻訳に一種のモジュール性が得られます。これが、人々がプログラム変換のアイデアを好む理由です。

数学関数と同様に、手続き型コードを記述することでこのような変換を実装できます。このようなコードは元のモデルの一部を検査し、実行時にモデルに変更を加えますが、これは一般的に扱いにくいものです。

したがって、そのような変換は、パターン条件のペアを含むルールとして、いわゆる「宣言型」形式で記述されることがよくあります。. 各ルールは、「左側のパターンが表示され、条件が一致する場合、右側のパターンに一致するようにプログラム表現を変更する」と解釈されます。パターン変数を使用すると、元のプログラム表現のチャンクを指定して、そのまま変換を通過させることができます (通常、他の変換によって処理されます)。これらの規則は「宣言的」と呼ばれますが (従来のコードとは似ていないため)、同等の機能を表しているだけであり、意図した意味では宣言的ではありません。ルールは、多くの場合、ソース表現とターゲット表現の表面的な構文でパターンが記述されているため、同等の手続き型コードよりもはるかに読みやすい傾向があります。

実際問題として、個々の変換は表現の特定の場所にのみ適用され、それらが適用される (「作成」) 順序が重要です。これを処理するために、(プログラム) 変換ツールは、多くの場合、焦点とルールの適用順序を制御する「メタプログラミング」の方法を提供します。

これらのアイデアは、いわゆる「モデル駆動型開発」に適用されます。これは、低レベル コードを生成するため、または低レベル コードを他の低レベル コードに変換するために、間違いなく高レベル モデルに適用される単なる変換です。これらのアイデアを使用して、リバース エンジニアリング ツールを構築することもできます。たとえば、低レベル コードを抽象モデルにマップすることができます。当社のDMS Software Reengineering Toolkitはプログラム変換ツールであり、手続き型変換とソースからソースへの書き換えの両方を備えており、これらすべての目的に使用されます。

于 2011-06-03T14:26:36.690 に答える
2

MDD の中核となる開発フローは、アプリケーション モデルから実行中の実現まで、その後のモデル変換を通じて行われます。これにより、モデルの再利用と異なるプラットフォームでのシステムの実行が可能になります。実際、実現レベルでは、実行中のソフトウェアはその実行を特定のプラットフォーム (特定のアプリケーション ドメイン用に定義) に依存しています。

モデルに加えて、モデル変換は MDD の他の重要な要素を表し、異なるモデル間のマッピングを定義できるようにします。変換はソース モデルとターゲット モデルの間で実行されますが、実際にはそれぞれのメタモデルで定義されます。

モデル変換は、次のように分類できます。 - モデルからモデルへの変換 - モデルからテキストへの変換 (ソフトウェア コード、ドキュメント、またはその他のテキスト アーティファクトの生成に使用)。

MDE は、変換ルールを指定するための最適化されたソリューションを設計者に提供するために、モデル変換を定義するための適切な概念言語 (QVT や ATL など) を提供します。明らかに、最終的にモデルはファイルとしてエンコードされるため、変換を定義するために通常の命令型プログラミング言語を使用することを考えることができます。ただし、これにより、モデリング フレームワーク全体の抽象化のレベルが低下し、通常、煩雑で保守不可能なソフトウェアが作成されることになります。

于 2013-01-28T16:33:33.387 に答える
0

モデル駆動型開発における変換は、モデルを処理するときに得られる出力です。この出力は、別のモデルまたはソース コードにすることができます。

MDA (モデル駆動型アーキテクチャ) アプローチでは、変換プロセスを通じて PIM (プラットフォーム非依存モデル) を PSM (プラットフォーム固有モデル) に変換できます。次に、その後の変換を介して、PSM をソース コードに変換できます。

ABSEなどの他のアプローチでは、モデルを直接ソース コードに変換します。ここで、ABSE モデルは最終的なソース コードを直接生成します。これは、そのテンプレートが (協調型ジェネレーターで) ミニプログラムとして機能するためです。それ以上の変換は必要ありません。他のほとんどの MDD アプローチと同様に、ABSE にはツール サポートが必要です。この場合、それはAtomWeaverです。

于 2011-06-03T13:50:00.487 に答える