Java 理解代码中的UML关联
这就是我现在对关联、聚合和组合的理解 联想Java 理解代码中的UML关联,java,uml,associations,relationship,class-diagram,Java,Uml,Associations,Relationship,Class Diagram,这就是我现在对关联、聚合和组合的理解 联想 public class Foo { void Baz(Bar bar) { } }; 聚集 public class Foo { private Bar bar; Foo(Bar bar) { this.bar = bar; } } 构图 public class Foo { private Bar bar = new Bar(); } 我认为理解这些词的意思是没有意义
public class Foo {
void Baz(Bar bar) {
}
};
聚集
public class Foo {
private Bar bar;
Foo(Bar bar) {
this.bar = bar;
}
}
构图
public class Foo {
private Bar bar = new Bar();
}
我认为理解这些词的意思是没有意义的,除非我不能在实际代码中表示它。以上代码取自SO答案(如果以上代码错误,请告诉我)
我的问题很简单
1) 在类图中显示聚合和组合是否重要
2) 我使用了一个可以将java.class文件转换成类图的工具。但是我无法让这个工具在类图中显示聚合或组合关系。这是工具的问题还是我不了解如何在代码中使用组合和聚合?当我使用上面的代码进行关联时,该工具为我提供了“依赖”关系的表示。(虚线)是否显示合成/聚合取决于。您显示了聚合或组合元素成为一个部分,没有聚合/组合元素就不能生存。例如,在一个数据库中,当你删除一个重要语句的父语句时,你会在一篇作文中删除子语句。在另一个层次上(例如,当谈论从数据库实体派生的对象时),这可能变得不那么重要。最后,它取决于目标读者群体。离开聚合/合成只会减少你传达给读者的信息
我不知道类可视化工具,但大多数UML工具只是将示例解释为依赖项(如果有的话)。它告诉我们:“两者之间有某种联系——你自己去想象。”。或者在导入后编辑生成的模型,使其更加正确。是否显示合成/聚合取决于。您显示了聚合或组合元素成为一个部分,没有聚合/组合元素就不能生存。例如,在一个数据库中,当你删除一个重要语句的父语句时,你会在一篇作文中删除子语句。在另一个层次上(例如,当谈论从数据库实体派生的对象时),这可能变得不那么重要。最后,它取决于目标读者群体。离开聚合/合成只会减少你传达给读者的信息
我不知道类可视化工具,但大多数UML工具只是将示例解释为依赖项(如果有的话)。它告诉我们:“两者之间有某种联系——你自己去想象。”。或者在导入后编辑生成的模型,使其更加正确。UML与代码不在同一级别,因此代码和UML之间没有1-1转换 有许多方法可以将代码反向工程到UML模型中,甚至有更多的方法可以在代码中实现UML模型 因此,您必须理解UML概念本身,然后才考虑如何在代码中实现此类概念 有很多关于UML的书和很多解释可以在网上找到,但唯一真正的来源是
基于这个规范,我写了一篇文章试图找出不同类型的关联之间的差异:UML与代码不在同一级别,因此代码和UML之间没有1-1转换 有许多方法可以将代码反向工程到UML模型中,甚至有更多的方法可以在代码中实现UML模型 因此,您必须理解UML概念本身,然后才考虑如何在代码中实现此类概念 有很多关于UML的书和很多解释可以在网上找到,但唯一真正的来源是
基于这个规范,我写了一篇文章试图找出不同类型的关联之间的差异(有时很细微):是的,上面的代码是错误的,因为它没有显示关联/聚合/组合是如何编码的。事实上,您的第一个代码示例只是一个UML依赖关系,而不是一个关联。关联总是在引用属性的帮助下编码/实现的,例如您的属性
bar
,它引用类型为bar
的对象。因此,您的第二个和第三个示例是对Foo
和Bar
之间的关联进行编码的情况。顺便说一句,UML将组合定义为一种特殊类型的聚合(具有独占部分),将聚合定义为一种特殊类型的关联,与部分-整体关系的预期含义相关联
请注意,虽然众所周知关联(不同形式的)是如何编码/实现的,并且这在许多应用程序开发框架中都得到了支持,例如在基于Ruby on Rails的活动记录范例的框架中,但在对象关系映射框架Java持久性注释(JPA)中也得到了支持,目前尚不清楚如何对聚合和合成进行编码。事实上,聚合的UML概念非常弱,它在代码方面没有任何含义。但是UML的组合概念也太弱,在编码中没有用处/意义。只有当我们通过要求组成部分不能从其组合中分离(此要求称为不可分离部分)使其更强大时,正如我和我(获奖)中所讨论的,我们才能从代码方面获得两种特殊含义:
public class Foo {
void Baz(Bar bar) {
}
};
b) 作文是