2010-10-22 57 views
1

It'a一個衆所周知的事實是UML沒有圖靈完整(相對於通常的編程語言),一個天真的questioin。但在我看來,UML比傳統語言更靈活。我無法想象通過C++(f.e)等語言可以描述的問題,但同時無法通過UML來描述。恰恰相反,我更容易想到UML中存在的構造,但在C++(Java,Delphi,VB等等)中是不可靠的。 您能幫我理解這一刻嗎?我真的抓不住它。關於UML和圖靈完全

+0

我很好奇有一個UML構造的例子,你不能用這些圖靈語言中的一種來實現...... – jv42 2010-10-22 11:18:12

+0

嘿,el dorado如果你的皮膚被標記爲被接受,它會給予回答好的措施。 – 2010-10-25 22:34:49

+0

感謝大家的回答。我會試着想一想:)我希望這個討論不僅對我有用而且有趣,對其他人也是如此。 – 2010-10-26 09:31:36

回答

3

我認爲UML是自動添加Action語義包(這發生在UML 1.5版本)以來的一種圖靈完備語言。

現在,UML包含一個命令式動作語言(不要與OCL混淆),它允許精確定義類方法的行爲。這種命令性的動作語言包括典型的任務集,如果條件,迭代器,......你對任何編程語言的期望。

這個動作語言的可執行UML方法流行的組件之一,但顧名思義UML是一種建模語言現在it's UML標準本身

1

有趣的問題。想到幾點,儘管可能還有更多。道歉很長。

可以用例如描述什麼你無法用UML描述C++嗎?

首先,你必須定義你所說的「UML」的意思。通常,人們傾向於指「核心」元素 - 類圖,狀態圖,活動圖等等 - 加上OCL(約束語言)。

鑑於這些元素,您不能指定命令式算法。特別是,任何需要分配的東西。然而,你可以非常接近:步驟和判定邏輯可以用例如活動圖以及在OCL中定義爲前後條件的每個步驟的功能。但是,你從來沒有完全明白行爲。以一個原子步驟爲例,其目的是增加一個整數的值。輸入是一個整數 - 例如X。輸出由後條件X == [email protected]+1描述。但是,在UML中沒有任何東西實際上實現了這一步。

現在是完全可以想象延長UML的使用,以解決以上。 UML動作語義的開發恰恰是爲了規定行動。這樣做會使語言在計算上完整。這些問題僅僅是實際的:

  1. 有沒有普遍認同和採用的語義語法;
  2. 很少有實現

你可以用UML不能在如實施描述什麼C++?

在本質上沒有什麼。但是有兩個實際的限制:

  1. UML「規範」通常不精確,模棱兩可和/或不完整。例如,活動圖通常會讓路徑搖擺不定。它可以直接用C++表示嗎?是。它會編譯?編號爲
  2. 一些UML結構到命令式,基於堆棧的語言的映射是非平凡的。狀態模型就是一個例子:儘管存在衆所周知的模式,但映射相當複雜。對於分層和/或併發行爲尤其如此。在一個活動圖中,很容易表達兩個活動並行發生,然後在進入下一步之前進行同步。這當然可以用C++來完成,但需要使用例如線程庫。

然而可以完成。事實上,這正是可執行UML工具的作用:模型編譯器採用可執行的UML模型並將其轉換爲100%功能強制性代碼。

hth。

+0

非常感謝您的回答,對我來說這變得更加清晰一些,如果您不介意的話,還有一個問題,您寫道:」UML中沒有任何內容可以實現該步驟「(增量)。在C(fe)中執行這一步? – 2010-10-26 09:25:28

+0

在我看來,它可能是那個我不明白的重要時刻:)在此先感謝 – 2010-10-26 09:27:00

+0

C中的「實現」應該是賦值'x = x ++'UML沒有動作語義)不支持賦值;更一般地,它不支持任何改變狀態的操作(例如,創建/刪除對象,更新對象屬性的值),所以沒有辦法表達'x = x ++'in沒有Action語義的UML。 – sfinnie 2010-10-26 10:13:03

1

的一部分。它有時可以用作設計軟件的方法。

曾幾何時,他們夢想着自動代碼生成的方式,他們被稱爲CASE工具。他們沒有讓代碼生成器有效地工作,雖然他們從語言中刪除了大量的鍋爐代碼。這種增強成爲UML的關鍵,因爲它提供了一種增強設計和編程軟件體驗的方式。

我不知道UML是否是「圖靈完成」,我希望是這樣,用圖像格式向計算機描述問題並讓計算機完成所有這些工作,艱難的令人討厭的編程爲你。

UML是在代碼中執行的元語言。它描述了人造物,它們如何相互關聯/相互作用以及它們的作用。

正在添加UML,新的設計文物逐年增加,如果它還沒有圖靈完成我不明白爲什麼它不可能。

但是我認爲在某個地方我讀了一些關於「Turing Equivalent」的語言,如果它們都可以表達和解決相同的解決方案。因爲UML是設計語言,而代碼是基於UML設計的實現語言,所以我會說UML和代碼(C#,Java等)是Turing Equivalent。如果他們同意Turing Equivalent,那麼UML必須是Turing Complete。

+0

有趣的答案,我喜歡。 – 2010-10-25 22:48:17