我的程序很容易通過源代碼運行,並且我可以檢測簡單的關係,如實現或繼承,只需通過搜索類的定義位置來進行擴展。然而,我對如何檢測其他關係的想法有點卡住,比如一個類與另一個類是否有關聯或聚合。從java源代碼中檢測UML關係
到目前爲止,我已經嘗試解析代碼並尋找其他方法被調用的位置,但我不確定這些關係的確切代碼定義。
對不起,如果我不清楚我可以嘗試和解釋,如果你不明白只是讓我知道在評論中更好地解釋。
我的程序很容易通過源代碼運行,並且我可以檢測簡單的關係,如實現或繼承,只需通過搜索類的定義位置來進行擴展。然而,我對如何檢測其他關係的想法有點卡住,比如一個類與另一個類是否有關聯或聚合。從java源代碼中檢測UML關係
到目前爲止,我已經嘗試解析代碼並尋找其他方法被調用的位置,但我不確定這些關係的確切代碼定義。
對不起,如果我不清楚我可以嘗試和解釋,如果你不明白只是讓我知道在評論中更好地解釋。
問題是沒有任何嚴格的定義如何翻譯關聯,依賴和聚合中的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,它是禁止。因此,將其更改爲兩個共享的聚合。
請記住,關聯和共享聚合沒有嚴格的定義,只有限制。
聚合和組成兩者看起來像Java中的成員變量
例如,
class MyClass {
private HerClass h;
}
MyClass HAS-A HerClass成員 - 所以這是組成或可能的聚合。你可以根據MyClass是否創建HerClass來區分它 - 這可能是合成的。
關聯基於依賴關係。你爲什麼不使用導入來找出哪些類是依賴的?或者你可以掃描代碼中任何類型名稱的使用 - 提到類型名稱的那一刻,就有一個「使用」關聯。