2010-04-21 211 views
3

簡短的問題。你如何將UML圖轉換成代碼?類圖是一個很明顯的例子,但其他類如活動,用例,序列,狀態,包等等呢?將UML轉換爲代碼

回答

3

哇,如果你在開始編碼之前就已經擁有了所有這些,這真的很酷;)這意味着某人在爲期望的軟件建模時做了一份體面的工作!

也就是說,UML的各種圖可以或多或少貼近代碼。這裏是我對它一般來說的感覺:

  • 類圖。在大多數情況下,與代碼一對一映射。仍然可以在分析過程中使用,以顯示不會一對一映射的概念,但這種情況非常罕見。
  • 包裝圖。在大多數情況下,也可以與代碼一對一映射。除了展示實際來源的包裝之外,我從未看過它的任何用法。
  • 序列圖。在大多數情況下,地圖也會相當接近代碼。除了順序圖中經常會避免的某些步驟,否則會變得很大。它仍然顯示直接或間接呼叫誰。
  • 狀態圖。這一個更抽象。它顯示程序中的元素的各種狀態(或程序本身),不能按原樣轉置;您首先需要決定如何存儲/建模狀態。例如。在java中顯示可能的thread state的狀態圖並不映射到代碼中真正直接可見的內容,但線程有一個狀態,如corresponding enum所示。
  • 活動圖。顯示算法/程序的各個步驟。儘管一些事情可以相當容易地進行轉置,例如循環,但其他一些(如並行活動)的實現在代碼中可能會有所不同。並行活動最明顯的實現是使用線程,但這可能是JMS,具體取決於圖的粒度。它仍然不會告訴你每一步的邏輯是什麼,所以最終有一些工作需要解釋和實施。
  • 用例。這是最重要的一個。它不能被轉換,你需要考慮如何實現用例,這個用例可以從很高層次到低層次。沒有它的公式。

結論:UML是一種用各種視角描述軟件的工具。某些方面可以在代碼中輕鬆轉換,其他方面更加抽象,並且可以以各種方式實現,具體取決於圖的粒度。

這是設計發展之間的區別:實行的是設計細化到一些真正的可執行文件(代碼),這可能需要更多或更少的工作依賴於現有設計的粒度。

這個夢當然是能夠生成UML的代碼,而反過來,但我們還沒有呢!它幾乎適用於類圖:)

2

我已經使用EclipseUML Omondo進行UML建模,並使用AndroMDA進行代碼生成。 您可以使用原型從Class,usecase和State圖生成代碼。您需要在分類器上添加原型,然後AndroMDA引擎讀取原型並生成代碼。 看看AndroMDA論壇的更多信息:http://forum.andromda.org/index.php