我的程序很容易通过源代码运行,我可以通过搜索定义类的位置来检测简单的关系,例如实现或继承。但是,我对如何检测其他关系(例如某个类是否与另一个类有关联或聚合)的想法有点紧张。
到目前为止,我已尝试解析代码并查找调用其他方法的位置,但我不确定这些关系的确切代码定义。
很抱歉,如果我不清楚,如果您不明白我可以尝试解释一下,请在评论中告诉我。
答案 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,则禁止。因此,将其更改为两个相互共享聚合。
请记住,关联和共享聚合没有严格的定义,只有限制。