java - 这是聚合吗?

标签 java intellij-idea uml aggregation

我有以下代码

 public static void main(String[] args) {
    Engine engine = new Engine("This Engine!");
    Car b = new Car(engine);

    b = null;
}

这是一个聚合吗?我一直认为聚合是指即使另一个类被“破坏”,某些东西仍然可以“生存”......例如汽车和引擎。如果我删除 Car 实例,Engine 仍然可以存在。

这是正确的吗?

最佳答案

首先,我想说,当你这样做时,你的代码会看起来更好

Car b = new Car();
b.setEngine(engine);

看起来会更好。

那么关于你的聚合思维,是的,你是对的。 “不知何故”。但如果你真的将你的“对象”细粒度地分割的话。我的意思是,如果汽车没有引擎,你还会拥有它吗? :)

我实际上会看到汽车的本来面目,我会认为更多的是汽车和驾驶员的聚合。如果汽车损坏,您仍然有司机。如果司机死了,你仍然拥有一辆汽车。

来自 uml 关于聚合:

聚合是“has a”关联关系的变体;聚合比关联更具体。它是代表部分-整体或部分-部分关系的关联。作为关联的一种类型,聚合可以被命名并具有与关联相同的装饰。然而,聚合可能不会涉及两个以上的类;它必须是二元关联。

当一个类是其他类的集合或容器,但所包含的类对容器没有很强的生命周期依赖性时,可能会发生聚合。容器被销毁时,容器中的内容不会自动销毁。

composition/aggregation

另一个与聚合相混淆的关系是组合。当聚合描述“具有”关系时,组合则执行“包含/部分”关系。正如我所说,通常情况下,发动机是汽车对象(组合)的一部分。 Car 对象有一个 Driver(聚合)。

关于java - 这是聚合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220051/

相关文章:

java - 如何解决这些 logcat 错误?

java - GXT:ComboBoxCell 不可编辑

java - 在 Intellij 中,如何在断点处抛出异常?

python - 在 Python UML 类图中指定 self 参数

java - Wicket页面参数

java - 如何使用 Guice + Jersey + servlet 将 Swagger 集成到 Java 项目中并自动生成 REST API 文档

intellij-idea - 使用 JSX Harmony 时,如何让 WebStorm 调整结束标记的缩进以匹配其父级?

java - 有没有办法在类中通过 getter 方法找到 setter 方法,反之亦然?

xml - 使用 xsl 转换将 UML 图转换为规范 Z

uml - Visio 2010中用户定义的UML数据类型