当前位置: 首页 > 知识库问答 >
问题:

同一类的Java组合和聚合?

杜翰林
2023-03-14

假设我们有两个名为Point和Line的类。Line类有两个构造函数。这是Point类的代码。

// The Point class definition
public class Point {
   // Private member variables
   private int x, y;   // (x, y) co-ordinates

   // Constructors
   public Point(int x, int y) {
      this.x = x;
      this.y = y;
   }
   public Point() {    // default (no-arg) constructor
      x = 0;
      y = 0;
   }
}    

这是Line类的代码。

public class Line {
   // Private member variables
   Point begin, end;   // Declare begin and end as instances of Point

   // Constructors
   public Line(int x1, int y1, int x2, int y2) {
      begin = new Point(x1, y1);  
      end   = new Point(x2, y2);
   }`
   public Line(Point begin, Point end) {
      this.begin = begin;
      this.end   = end;
   }
}

如您所见,Line类有两个构造函数。第一个构造函数是组合的例子,而第二个构造函数是集合的例子。现在,关于这个案子我们能说些什么?一个类可以同时有聚合和合成吗?谢谢你的回答。

共有2个答案

常英资
2023-03-14

由于组合(相对于聚合)的定义特征是具有独占/不可共享的部分(参见https://stackoverflow.com/a/27889087/2795909),因此Point-Line部分-整体关系的示例显然是聚合(无论您是将点对象传递给构造函数还是在构造函数中创建它们),因为定义行的两个点可以与其他行共享。

江飞白
2023-03-14

聚合和组合之间区别的一个普遍接受的定义是终身责任和所有权。

  • 聚合:对象 A 保存对其他对象的引用,但这些其他对象与其他类共享。释放 A 时,其他对象将继续存在并在应用程序中使用
  • 组合:对象B由其他对象“组成”。释放 A 时,其他对象也是如此。

这一点值得引用福勒的话:

在UML中,很少有什么比聚合和合成更让人惊愕的了

...

聚合(白菱形)除了常规关联之外没有语义。正如吉姆·伦博(Jim Rumbaugh)所说,这是一种建模安慰剂。

...

组合(黑钻石)确实带有语义。最特别的是,一个对象只能是一个组合关系的一部分

所以,是的,一个类对于它所引用的对象既可以有组合关系,也可以有聚集关系,但是可能不像你所展示的例子那样。

 类似资料:
  • 请考虑以下情况: 我如何在类图上表示< code>A和< code>B之间的关系?如果< code>B只保存一个< code>A(而不是一个数组),我会使用组合/聚合,但是在这种情况下,我不确定应该做什么。非常感谢你的帮助!

  • 因为聚合和组成是相关的关联,或者我们可以说它给出了对对象或其他任何东西之间关系的理解。 我发布这个问题是因为我在采访中问了一个问题,什么是组成和聚合。 所以根据我的理解,我给出了我的想法,如下所示。 http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition 聚集、关联和组合 Java中的关联、聚合

  • 我开始研究 OOAD,我很难找到一个 代码示例来说明如何以编程方式实现、和。(到处都有几篇文章,但它们与 C# 或 Java 有关)。我确实找到了一两个例子,但它们都与我的导师的指示相冲突,我很困惑。 我的理解是,在: < li >关联:Foo有一个指向Bar对象的指针作为数据成员 < li >聚合:Foo有一个指向Bar对象的指针,Bar的数据被深度复制到该指针中。 < li >组成:Foo有一

  • 问题内容: 我想知道如何在python中以 UML术语 实现组合和聚合。 如果我了解: 聚合: class B: pass class A(object): def init(self): self.B = B 组成: 在其他语言中,我将其实现为指向B的指针。我猜这是python中的指针。 这样对吗? 问题答案: 如果我正确理解,聚合与组合是关于对象对其成员的职责(例如,如果删除实例,是否还要删除

  • 我知道聚合和组合之间的概念差异。有人能用实例告诉我它们之间在Java中的实现区别吗?

  • 问题内容: 我面临着一个持续的问题,那就是将授权,组成和聚合彼此区分开来,并确定在哪种情况下最好相互使用。 我已经查阅了一本Java OO分析和设计书,但是我的困惑仍然存在。主要的解释是这样的: 委托 :当我的对象按原样使用另一个对象的功能而不更改它时。 组成 :我的对象由其他对象组成,这些对象在我的对象被销毁并收集垃圾后便不再存在。 聚集 :我的对象由其他对象组成,即使我的对象被破坏,它们也可以