从java源代码中检测UML关系

时间:2014-11-04 13:05:20

标签: java uml class-diagram

我的程序很容易通过源代码运行,我可以通过搜索定义类的位置来检测简单的关系,例如实现或继承。但是,我对如何检测其他关系(例如某个类是否与另一个类有关联或聚合)的想法有点紧张。

到目前为止,我已尝试解析代码并查找调用其他方法的位置,但我不确定这些关系的确切代码定义。

很抱歉,如果我不清楚,如果您不明白我可以尝试解释一下,请在评论中告诉我。

2 个答案:

答案 0 :(得分:1)

聚合和组合看起来都像Java中的成员变量

e.g。

class MyClass {
    private HerClass h;
}

MyClass HAS-A HerClass成员 - 这样的组成或可能的聚合。你可以根据MyClass是否创建HerClass来说明差异 - 这可能是组合。

关联基于依赖关系。为什么不使用导入来找出依赖的类?或者你可以在代码中扫描任何类型名称的使用 - 一旦提到类型名称,就会有“使用”关联。

答案 1 :(得分: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,则禁止。因此,将其更改为两个相互共享聚合。

请记住,关联和共享聚合没有严格的定义,只有限制。