使用源代码区分聚合和组合关系

Sac*_*hin 5 uml class-diagram

是否可以通过阅读源代码来区分组合和聚合关系?

我试图找到一些模式,我在下面列出了它们.

我从这个网站上的例子 只是为了解释我认为是一种模式

组成

在此输入图像描述

 public class Engine
{
    . . . 
}

public class Car
{
   Engine e = new Engine();
    .......
}
Run Code Online (Sandbox Code Playgroud)

聚合

在此输入图像描述

public class Address
{
. . .
}

public class Person
{
   private Address address;
   public Person(Address address)
   {
     this.address = address;
   }
   . . .
}
Run Code Online (Sandbox Code Playgroud)

我发现这些模式可以区分

组成(是其中的一部分)

  1. 定义为一个类的字段.

    • 示例:[Engine e] Engine定义为Car类的字段e
  2. 在类中实例化和分配.

    • 示例:[Engine e = new Engine();]引擎在类中实例化

聚合(有)

  1. 定义为一个类的字段

    • 示例:[private address address;] Address定义为Person类的字段地址
  2. 在课堂上安排好了

    • 示例:[Address address = new Address();]地址在Person外部实例化.
  3. 通过将实例作为参数发送到构造函数来在构造函数中分配.

    • 示例:[Person person = new Person(address);] Address的实例作为参数通过构造函数传递,并在Person类的构造函数中指定.

我可以考虑这些来区分聚合和组成关系吗?

是否存在更多用于区分的限制因素?

Jor*_*bot 1

并非如此,因为没有一种独特的方法来实现每种关联(事实上,问题是我们有三种关联,“正常关联”,“聚合”和“组合”)。

如果该语言有指针,那么您可以尝试猜测,如果 Engine 在 Car 中定义为指针,那么编写该代码段的程序员建议在 Cars 和 Engines 之间建立更软的关系(聚合或关联),因为删除 Car 不会意味着丢失 Engine 对象。