2012-07-06 60 views
2

我有一個表示UI小部件的模板類。這個班被稱爲(令人驚訝的)Widget。該類定義了graphics_type(通過typedef或類似的),其可以是cairo_tHDCCDC*或類似的東西。換句話說,Widget定義了一種稱爲graphics_type的類型,它用於繪製東西。表示使用UML在C++模板類中定義的typedef

如何使用UML表示Widgetgraphics_type之間的關係?

紅利問題:這裏有沒有任何C++程序員在這些情況下發現UML有用?

+1

你問在UML類圖中如何表示'typedef'? – 2012-07-06 20:27:32

+0

不僅如此。這是一個定義爲類的公共接口的一部分的typedef。我如何表達兩者之間的關係? – 2012-07-06 20:53:19

+0

添加備註或評論。我看過有'typedef'類型的框''[<> | name]'的工具。我可能會使用「使用」關係和側面的「<>」註釋...你可以下載並安裝BoUML(AFAIK它處理'typedef's)並逆向工程一個小例子來看看它產生了什麼。 – 2012-07-06 20:56:42

回答

1

每個人對於UML的用處都有自己的答案。也許UML適合非常大的項目,但我無話可說。 在我的實踐中,我發現基於UML圖開發代碼是無效的,因爲C++中的類聲明本身非常豐富和清晰,特別是如果您在類體外定義方法。製作傳統的圖表需要同樣的時間,但沒有顯示出新的東西。

關於類關係圖的第二件事是,如果從現有代碼自動構建,它們非常好。例如,Doxygen可以做到這一點。優點是你不會花費額外的時間用於UML,並且可以輕鬆檢查當前的實現。另外,用這種圖在一張印刷的紙上手工修改是非常方便的重構。

+0

我使用UML作爲文檔工具。我不會從圖表中生成代碼。我不希望我的圖表包含結構的每一個細節,我發現Doxygen輸出是笨重的。相反,我的圖表是我的設計的簡明摘要,我可以在嘗試解釋提議的hiearchies時向同事展示。它不需要一個「非常大的」項目是有用的;它只需要非專業觀衆(其中包括我的一些同齡人)。如果您不使用UML生成代碼,那麼快速製作有用的圖很容易。 – 2012-11-26 19:17:20

+0

嗨@MikeC, 看來你的經驗與Doxygen是基於不好的例子。如果正確使用Doxygen只能顯示最重要的信息。即使在代碼結構中沒有很好地反映這種邏輯,您也可以輕鬆分離和鏈接文檔的某些部分。您可以省略不必要的細節等。 – Riga 2012-11-27 11:18:48

2

publib.boulder.ibm.com在許多主題上有很多文檔,包括UML上的很多文檔。他們對許多C++特定結構(包括typedef和其他)的規則幾乎與@David Rodriguez所說的一樣。

2

Sparx EA通過泛化將typedefs鏈接到別名類型。至少這是從源代碼導入時會發生的情況。如果原型是<<typedef>>,則C++生成模板將覆蓋Class。如果typedef的使用模板,EA插入:

typedef templateName<alias> alias; 

否則,將其插入:

typedef aliasedClass alias; 

我去尋找,因爲我想:

typedef aliasedClass* class_ptr; 

,我不知道如何用UML表示指針部分。我希望找到一些表達結構的標準方式,但沒有運氣。

選項1:創建一個模板,這只是一個指針製造商: 模板類_ptr {/ * TMTFWIW * /}

選項2:使用標籤在我的PIM到C++ PSM變換插入*

我想我會去#2。