Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解代码中的UML关联_Java_Uml_Associations_Relationship_Class Diagram - Fatal编程技术网

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的组合概念也太弱,在编码中没有用处/意义。只有当我们通过要求组成部分不能从其组合中分离(此要求称为不可分离部分)使其更强大时,正如我和我(获奖)中所讨论的,我们才能从代码方面获得两种特殊含义:

  • 在这种更强的组合形式中,组件及其组合之间存在生命周期依赖关系,这意味着组件应该在其组合被销毁时销毁
  • 组件可以相对于其组合进行命名/标识 因此,对于您的问题“1)在类图中显示聚合和组合是否重要?”的答案是:

    a) 不,聚合在类图中不重要/不相关,只是将其显示为关联

    public class Foo { 
        void Baz(Bar bar) {
        } 
    };
    
    b) 作文是