2012-06-26 80 views
10

如何顯示在UML類圖中使用靜態方法?如何顯示靜態方法的用法UML類圖

class A{ 
    public static void test(){ 
    } 
} 

class B{ 
    public void b(){ 
    A.test(); 
    } 
} 

類圖會是什麼樣子,它表明了這種關係?如果有區別,UML 2.0將準備好。

回答

11

要顯示靜態方法,請在下劃線的靜態方法的名稱 - 查看here瞭解更多詳細信息。

至於導航的關係; class B取決於class A的存在。我們可以說,B類對類「使用依賴」 A

class B ----uses----> class A 

希望這有助於。

+0

您確定它是依賴關係而不是關聯嗎? – Nicolas

+0

關聯是由一個或多個實例鏈接的兩個(或多個)類型之間的關係。因此,對於ClassB與ClassA的關聯,它需要引用它,可能是通過屬性或字段。但由於在你的例子中情況並非如此,我會說你有一個依賴而不是一個關聯。我認爲這個[link](http://www.uml-diagrams.org/dependency.html)中的定義表明你有一個依賴關係。 – RobertMS

6

@RobertMS它的權利。

另一種選擇,它的使用定型

.............................................................. 
....+----------------------------------------------------+.... 
....|    StringUtilityClass     |.... 
....+----------------------------------------------------+.... 
....| [+] void: lowerCase()    <<non virtual>> |.... 
....| [+] void: upperCase()    <<non virtual>> |.... 
....| [+] String: toString()    <<override>> |.... 
....+----------------------------------------------------+.... 
....| [+] String: LowerCaseCopy(String Value) <<static>> |.... 
....| [+] String: UpperCaseCopy(String Value) <<static>> |.... 
....| [+] String: ReverseCopy(String Value) <<static>> |.... 
....+----------------------------------------------------+.... 
.............................................................. 

注意 一些編程語言的最佳實踐,特別是那些使用C區分大小寫的語法,利用靜態函數,並在離開駱駝小寫其餘的功能。

乾杯。

3

要顯示靜態方法和屬性強調它們在UML類圖:看UML Superstructure specificationUML Distilled第66頁或第7.3.19(功能):

靜態特徵下劃線。

要顯示類B和A(其中B僅使用A中的靜態方法)之間的關係,可以使用依賴關係而不是關聯。關聯總是實例之間類在每個端部,作爲在UML上層建築規範的7.3.3節(協會):

的關聯指定可鍵入的實例之間發生 的語義關係。

但類B在A類依賴,如在該規範的7.3.12節:

依賴關係是表示一個關係,即一個單一的或模型元素的一組 需要其他模型元素爲其規範或實現 。

這可能是值得澄清與刻板印象的依賴性的本質。你可能使用use原型,但這是非常普遍的,實際上包含實例之間的標準關聯(雖然你顯然通常使用關聯來顯式顯示它們)。正如Fowler在UML Distilled中所說,

許多UML關係意味着依賴關係。從訂單到客戶[在他的一個示例中...]的可導航協會 意味着訂單爲 ,依賴於客戶。

對於使用何種刻板印象似乎沒有標準。我已經使用usesStatically來明確依賴關係的性質;這是

B --usesStatically--> A

(或者,如果B類有一個實例作爲靜態字段,我會使用類似B--containsStatically--> A如果我代表乙明確的類圖,否則就必須B中類型A的帶下劃線的靜態屬性。)

+0

我以爲@ RobertMS的答案值得擴展,但已經把它作爲一個社區wiki的答案,因爲它只是解釋他的答案的一些細微差別(和更多'官方'參考的鏈接)。 –