20

UML を使用して、人間のコーディングの介入なしに、サポートする実装言語、たとえば図を直接マシン コード (おそらく C や C++ などを介して) なしで、コンピューター システムを単独でプログラムすることができます。

4

13 に答える 13

24

私は一般的な傾向に逆らって、現在の UML で何ができるか、UML の将来のバージョン (または別のモデリング手法) がどうなるかを示す経験を共有します。

最初に少し歴史を。

昔、人々はコンピューターをアセンブリでプログラムしていました (ここまでさかのぼるわけではありません)。その後、C や Basic などの高水準言語が登場しました。アセンブリが得意なプログラマーは、プロセッサが実行できるすべてのことを (最適化された方法で) 高水準言語で完全に表現することはできないと主張しました。実際、彼らは正しかった。高水準言語では、プロセッサに発行される命令を完全に制御できなかったため、メモリとパフォーマンスの観点から最適化されていないものもありました。

問題は、高水準言語がはるかに抽象的な表現形式を提供したことです。そのため、開発者の生産性が大幅に向上したため、プロセッサのすべての側面を完全に制御できないことを人々はあまり気にしなくなりました (ムーアの法則も役立ちました)。

同様のラウンドがオブジェクト指向言語で発生し、マネージ言語でも発生しました。毎回、より高いレベルの抽象化が利用可能になり、開発者として使用するのがより効率的だったため、最終的に勝ちました。実際、コンパイラが改善され、最適化技術が向上するにつれて、より高いレベルの表現での非効率性は一般的に解消されます。

モデル駆動型開発は、より高度な表現です。C# や Java などで記述できるコードを完全に表現することはできません。特に箱から出してはいけません。ただし、アプリケーションの非常に重要な部分を UML モデルから直接生成することは可能です。

私はいくつかのかなり大規模なプロジェクトで、UML ベースのコード生成作業を主導しました。多くの場合、(実際の、エンタープライズ クラスの) アプリケーションのソース コード全体の 30% から 60% を生成できました。それは、特定のドメイン用のジェネレーターを作成する小さなチームの場合です。最終的には、業界全体が、モデルからより多くの実際のアプリケーションを生成するツールの背後にいることになります。

これは、最初のアセンブリ コードがオペコードを抽象化して以来、業界で何度も目にしてきた自然な進化の次のステップです (おそらくそれよりも前に何かがあったかもしれませんが、それは私の時代よりも前でした)。

于 2010-03-21T03:29:05.653 に答える
11

短い答え:いいえ。一部の UML モデリング ツールは、Java、C++、および他のプログラミング言語のコードを生成できます。ただし、生成されるのは通常、インターフェイスとクラスの関係です。これらのツールは、実装を提供する必要があるスタブを生成するため、人間の介入が必要です。

于 2010-03-21T03:16:20.857 に答える
5

UML モデリング図、特に UML 状態図をコードに変換するツールがいくつかあります。たとえば、私は 2000 年に UML ダイアグラムを C++ に変換する "Rhapsody" (I-Logix から) というツールを使用しました。このツールはステート マシンを直接実行でき、リモート マシン (この場合は vxworks を実行しているボード) でコードを実行することもできたので、クールでした。

しかし、一般的に言えば、UML はモデリング ツールとして使用するのが最適です。これを使用して、システムをモデル化し、設計書などに図を提供します。次に、その知識を使用して、組織的な方法でシステムを開発します。

于 2010-03-21T03:09:19.560 に答える
2

理論的には?はい - 莫大な数のステート マシン図を使用しすべてを骨の折れる詳細に指定し、次にステート マシン図をクラス図のメソッドに接続し、恐ろしく複雑なツールを実行してこれらすべてを生成することができます。

しかし、これはあなたがやりたいことではありません。ツールが記述したすべてを理解できるように、正しい種類の構文を使用する必要があるため、自分自身を表現する方法にこれ以上の自由はありません。それだけでなく、すべての図を作成するよりもはるかに短い時間で実際のコードを自分で書くことができます - そしてそれがあなたに与える唯一のことは、コードが仕様のカーボンコピーであることです. (仕様がコードを生成するため)。それは良いことかもしれませんが、実際のコードがないため、デバッグはダイアグラムのデバッグを意味し、ほぼ確実に不可能になります。

于 2010-03-21T03:17:40.917 に答える
1

はい、可能です。システムの動作の詳細を表現するためにアクション言語の使用に依存する ExecutableUML (および同じ方向に沿った新しい標準が来ています) のようなアプローチをチェックするだけです (反復子、条件、アクションの作成、読み取り、更新、および破棄)。

まったく別の議論は、これが価値があるということです。コードの 100% を生成できるように十分な精度と詳細でシステムをモデル化しても、必ずしも成果が得られるとは限りません。モデル駆動型開発では、パレートの原則 (または 80-20 ルール) に固執することを好みます。アプリケーション コードの 80% を生成するには、モデリング作業の 20% で十分です。

詳細な説明はこちら: http://modeling-languages.com/blog/content/pareto-principle-applied-mdd

于 2010-03-21T05:18:53.253 に答える
1

"Foundational UML" (fUML) として知られる UML 2.3 のサブセット用に、完全に OMG で標準化され、チューリング完全な実行セマンティクスが提供されるようになりました。参照実装と OMG 仕様へのポインターについては、こちらを参照してください。また、OMG 標準の UML アクション言語に関する作業も進行中です。

良くも悪くも、この作業が完了すると、fUML はプログラミング言語になります。

-- エド

于 2010-04-18T10:48:56.923 に答える
1

UML はステート マシンをモデル化できます。 したがって、チューリングマシンを表すことができます。十分に洗練されたコンパイラは、この表現を読み取って、チューリングマシン のバイナリ (実行可能) 表現を作成できます。

だから、私の答えはイエスです。

編集

私の答えは一部の人には不快に思われるので...この「十分に洗練されたコンパイラ」は完全に想像上のものであり、おそらく遠い将来のものであることを明確にしましょう...しかし、他の回答からは、生成できるプログラムがいくつかあります一部の定型コードまたはプログラム全体を生成して実行することさえできます。

これは、UML (またはそのサブセット) がプログラミング言語としての資格があることを証明していると思いますが、おそらく優れた言語ではありません。

于 2010-03-21T03:14:42.263 に答える
0

私は彼のコメントにとても影響を受けたので、 WeNeedAnswersへのいくつかのリンク:

それが始まりです。

于 2010-03-21T04:14:21.503 に答える
0

UML アクション セマンティクスは、オブジェクトの割り当て/破棄、属性とローカル変数の読み取り/書き込み、操作の呼び出し、例外のスローとキャッチ、関係のナビゲート、ブロック、ループ、条件付き動作などをサポートしています。

見る:

http://abstratt.com/blog/2008/11/02/what-c​​an-uml-do-for-you/

http://abstratt.com/blog/2008/11/07/executable-models-with-textuml-toolkit-12-m1/

「いいえ」と言う人へ: 問題はUMLに関するものであり、「使用する UML ツール」に関するものではありません。UML は巨大な言語であり、ツールはそのサブセットを実装しますが、これは多くの場合非常に小さいものです。

于 2010-04-12T21:14:09.457 に答える
0

クラス図は、使用している UML ツールに応じて、プログラミング言語にフォワード エンジニアリングできます。独自のビジネスロジックなどをコーディングする必要があると思います。

于 2010-03-21T03:10:27.000 に答える
0

そうではない。全くない。

決定 (if) を行ったり、ループを実行したりすることはできません。それは有限状態マシンよりもプログラミング言語ではありません。少なくともFSMは決定を下すことができます。UML には状態さえありません。

于 2010-03-21T03:14:52.823 に答える
0

簡単な答え: 現状では、コードの 100% を生成することはできません。

おそらくクラス図を介してシステムのクラス構造を生成し、おそらく相互作用図や状態図を介してメソッド本体の一部を生成できますが、それで十分だと思います。

于 2010-03-21T03:26:52.303 に答える