这就是我现在对关联、聚合和组合的理解。
协会
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的工具。将文件分类到类图中。类可视化工具,但我无法使此工具在类图中显示聚合或组合关系。这是工具的问题还是我不了解如何在代码中使用组合和聚合?当我使用上面的代码进行关联时,该工具为我提供了“依赖”关系的表示。(虚线)
是否显示合成/聚合取决于。您显示了聚合或组合元素成为一个部分,没有聚合/组合元素就不能生存。例如,在一个数据库中,当你删除一个重要语句的父语句时,你会在一篇作文中删除子语句。在另一个层次上(例如,当谈论从数据库实体派生的对象时),这可能变得不那么重要。最后,它取决于目标读者群体。离开聚合/合成只会减少你传达给读者的信息。
我不知道类可视化工具,但大多数UML工具只是将示例解释为依赖项(如果有的话)。它告诉我们:“两者之间有某种联系——你自己去想象。”。或者在导入后编辑生成的模型,使其更加正确。
UML与代码不在同一级别,因此代码和UML之间没有1-1转换。
有许多方法可以将代码反向工程到UML模型中,甚至有更多的方法可以在代码中实现UML模型。
因此,您必须理解UML概念本身,然后才考虑如何在代码中实现此类概念。
有许多关于UML的书籍和许多在线解释,但唯一真正的来源是UML规范
基于这个规范,我写了一篇文章,试图找出不同类型关联之间(有时是微妙的)差异:UML组合vs聚合vs关联
是的,你上面的代码是错误的,因为它没有显示关联/聚合/组合是如何编码的。事实上,您的第一个代码示例仅仅是UML依赖的情况,而不是关联的情况。关联总是在引用属性的帮助下编码/实现的,比如您的属性bar
,它引用了类型为Bar
的对象。所以,您的第二个和第三个例子是编码Foo
和Bar
之间的关联的案例。顺便说一句,UML将组合定义为一种特殊类型的聚合(具有排他的部分),聚合是一种与部分-整体关系的预期含义相关联的特殊类型。
请注意,虽然众所周知关联(不同形式的)是如何编码/实现的,并且这在许多应用程序开发框架中都得到了支持,例如在基于Ruby on Rails的活动记录范例的框架中,但在对象关系映射框架Java持久性注释(JPA)中也得到了支持,目前尚不清楚如何对聚合和合成进行编码。事实上,聚合的UML概念非常弱,它在代码方面没有任何含义。但是UML的组合概念也太弱,在编码中没有用处/意义。只有当我们通过要求组合的各个部分不能从其组合中分离出来(这一要求称为不可分割的部分)来加强它,正如我的SO答案和我的(获奖)CodeProject文章中所讨论的,我们才能从代码方面获得两种特殊含义:
所以你的问题“1)聚合和组合在类图中显示重要吗?”是:
a) 不,聚合在类图中不重要/不相关,只是将其显示为关联
b)只有当组合有不可分割的部分时,它才是重要的/相关的,可以在类图中建模/显示。
本部分试图从专题和业务流程的角度来剖析 Neutron 代码,以便理解如此设计的内涵。
我目前正在做一个项目,我们必须从UML图制作代码。我了解UML类图的解剖结构,但我无法理解什么
我试图为我的项目管理软件画一个类图,描述如下。它包含以下类别: 项目 - 软件 - 管理项目的人/她 - 从事项目工作的人员 以及以下关系/关联: > < li> 一个项目经理可能要管理多个项目,而一个项目只能由一个项目经理管理 项目经理可以将员工分配给他/她管理的项目 对于上面的关联,我创建了这个类图: < li >如何对第一个关联(在< code>ProjectManager和< code>P
本文向大家介绍Java Annotation注解相关原理代码总结,包括了Java Annotation注解相关原理代码总结的使用技巧和注意事项,需要的朋友参考一下 Java.lang 中自带的注解 @Override:表示当前的方法定义将覆盖基类的方法。如果你不小心拼写错误,或者方法签名被错误拼写的时候,编译器就会发出错误提示。 @Deprecated:如果使用该注解的元素被调用,编译器就会发出警
本文向大家介绍关于Ajax的原理以及代码封装详解,包括了关于Ajax的原理以及代码封装详解的使用技巧和注意事项,需要的朋友参考一下 前言 其实AJAX内部实现并不麻烦,主要通过一个叫XMLHttpRequest的对象,而这个对象在现有的浏览器均被支持。 可以说,它是整个AJAX实现的基础,是浏览器用于后台与服务器交换数据的对象,有了它,才有了AJAX,也便有了部分页面刷新的艺术! 本文主要给大家介
我必须将下面的Java代码转换成一个UML图,但是我不确定是否正确地完成了类之间的关联。请你告诉我UML图是否正确。