2014-11-04 58 views
0

我的程序很容易通過源代碼運行,並且我可以檢測簡單的關係,如實現或繼承,只需通過搜索類的定義位置來進行擴展。然而,我對如何檢測其他關係的想法有點卡住,比如一個類與另一個類是否有關聯或聚合。從java源代碼中檢測UML關係

到目前爲止,我已經嘗試解析代碼並尋找其他方法被調用的位置,但我不確定這些關係的確切代碼定義。

對不起,如果我不清楚我可以嘗試和解釋,如果你不明白只是讓我知道在評論中更好地解釋。

回答

0

問題是沒有任何嚴格的定義如何翻譯關聯,依賴和聚合中的Java類關係。您應該自己設置規則,只能根據UML標準進行檢查。

我會建議如下:

UML      Java 
Dependency A->B   Class A mentions class B 
Association A->B   Class A has reference {that can have reference} (it is recursive!} to class B 
Composition A->B   Class A has array or collection of B or of references to B AND 
(black diamond)    no other classes have instances of B or references to them, 
          either single or collective (arrays, collections) 
Shared aggregation A->B Class A has array or collection of B or of references to B AND 
(empty diamond)    at least one other class has an instance of B or references to such, 
          either single or collective (arrays, collections) 

如果按照過去的規律,你會得到雙面共享聚集A-B,它是禁止。因此,將其更改爲兩個共享的聚合。

請記住,關聯和共享聚合沒有嚴格的定義,只有限制。

1

聚合和組成兩者看起來像Java中的成員變量

例如,

class MyClass { 
    private HerClass h; 
} 

MyClass HAS-A HerClass成員 - 所以這是組成或可能的聚合。你可以根據MyClass是否創建HerClass來區分它 - 這可能是合成的。

關聯基於依賴關係。你爲什麼不使用導入來找出哪些類是依賴的?或者你可以掃描代碼中任何類型名稱的使用 - 提到類型名稱的那一刻,就有一個「使用」關聯。