1

(通常のプログラミング言語とは対照的に) UML がチューリング完全でないことはよく知られている事実です。しかし、UML は従来の言語よりも柔軟性が高いように思えます。C++ (fe) のような言語で記述でき、同時に UML で記述できない問題を想像することはできません。それどころか、UML には存在するが C++ (Java、Delphi、VB など...) では信頼できない構造を想像する方がはるかに簡単です。本当に釣れない。

4

3 に答える 3

3

Action Semantics パッケージが追加されて以来、UML はチューリング完全な言語であると言えます (これは UML 1.5 バージョンで発生しました)。

現在、UML には、クラス メソッドの動作を正確に定義できる命令型アクション言語 (OCL と混同しないでください) が含まれています。この命令型アクション言語には、if 条件、イテレータなど、どのプログラミング言語でも期待される典型的な代入セットが含まれています。

このアクション言語は、実行可能な UML アプローチの一般的なコンポーネントの 1 つですが、現在は UML 標準自体の一部になっています。

于 2010-10-23T14:42:53.397 に答える
1

名前が示すように、UML はモデリング言語です。ソフトウェアを設計するための方法論として適用できる場合もあります。

むかしむかし、自動コード生成の方法を考えていた彼らは、CASE ツールと呼ばれていました。言語から多くの定型コードを削除したものの、コード ジェネレーターを効果的に機能させることはできませんでした。この拡張は、ソフトウェアの設計とプログラミングの経験を拡張する方法を提供するため、UML の鍵となりました。

UML が「チューリング完全」であるかどうかはわかりませんが、そうであることを願っています。コンピューターに問題を画像形式で説明し、コンピューターにすべての厄介なプログラミングを実行させることで解決策を考え出すのは素晴らしいことではないでしょうか。あなた。

UML は、コード内で実行するためのメタ言語です。アーティファクト、それらがどのように関連/相互作用するか、およびそれらが何をするかについて説明します。

UML が追加され、新しいデザイン アーティファクトが年々追加されています。まだチューリングが完了していないのであれば、そうできない理由がわかりません。

しかし、言語が同じ解決策を表現して解決できる場合、言語が「チューリング等価」であるという何かをどこかで読んだと思います。

UML は設計言語であり、コードは UML 設計に基づく実装言語であるため、UML とコード (c#、java など) はチューリング同等物であると言えます。それらがチューリング等価であると合意された場合、UML はチューリング完全でなければなりません。

于 2010-10-25T03:04:00.013 に答える
1

興味深い質問です。いくつかの点が思い浮かびますが、おそらくそれ以上のものがあります。かなり長くなってすみません。

UML では記述できず、たとえば C++ で記述できるものは何ですか?

まず、「UML」の意味を定義する必要があります。一般に、人々は「コア」要素 (クラス図、状態図、アクティビティ図など) と OCL (制約言語) を意味する傾向があります。

これらの要素を考えると、命令型アルゴリズムを指定することはできません。具体的には、割り当てが必要なもの。ただし、非常に近づけることはできます。ステップと決定ロジックは、アクティビティ図などを使用して表現でき、各ステップの機能は OCL の事前条件と事後条件として定義されます。ただし、動作を完全に指定することはできません。整数の値をインクリメントすることを目的とするアトミック ステップの例を考えてみましょう。入力は整数Xです。出力は事後条件によって記述されますX == X@pre+1。ただし、UML には実際にステップを実装するものは何もありません。

現在、UML の使用法を上記に対応するように拡張することは完全に考えられます。UML アクション セマンティクスは、アクションの指定を可能にするために正確に開発されました。そうすることで、言語は計算的に完全になります。問題は単に実用的なものです。

  1. セマンティクスについて、普遍的に合意され、採用されている構文はありません。
  2. 実装数が非常に少ない

C++ などでは実装できない UML で記述できるものは何ですか?

本質的に何もありません。ただし、実際には次の 2 つの制限があります。

  1. UML の「仕様」は通常、不正確、あいまい、および/または不完全です。たとえば、アクティビティ図では、パスがぶら下がったままになることがよくあります。C++ で直接表現できますか? はい。それはコンパイルされますか?いいえ。
  2. UML 構造体から命令型のスタック ベース言語へのマッピングの一部は、自明ではありません。状態モデルはその一例です。よく知られたパターンがありますが、マッピングは非常に複雑です。これは、階層的および/または並行動作に特に当てはまります。アクティビティ図では、2 つのアクティビティが並行して発生し、同期してから次のステップに進むことを簡単に表現できます。これはもちろん C++ で実行できますが、スレッド ライブラリなどを使用する必要があります。

ただし、それは可能です。実際、これは実行可能 UML ツールが行うことです。モデル コンパイラは、実行可能 UML モデルを取得し、それを 100% 機能する命令コードに変換します。

h番目。

于 2010-10-22T14:39:21.503 に答える