Java 组合和聚合同时进行 class?
Java Composition and Aggregation at same class?
假设我们有两个 class 命名为点和线。 Line class 有两个构造函数。这是点 class.
的代码
// 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;
}
}
这是第 class 行的代码。
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;
}
}
如您所见,第 class 行有两个构造函数。第一个构造函数是 Compositon 的例子,而第二个构造函数是聚合的例子。现在,对于这个案例,我们能说些什么呢? class 可以同时具有聚合和组合吗?感谢您的回答。
对于聚合和组合之间的区别,普遍接受的定义是终生责任和所有权。
- 聚合:一个对象
A
持有对其他对象的引用,但这些其他对象与其他 class 对象共享。当 A
被释放时,其他对象继续存在并在应用程序中使用
- 组合:一个对象
B
是由其他对象“构成”的。当 A 被释放时,其他对象也被释放。
Few things in the UML cause more consternation than aggregation and composition
...
Aggregation (white diamond) has no semantics beyond that of a regular association. It is, as Jim Rumbaugh puts it, a modeling placebo
...
Composition (black diamond) does carry semantics. The most particular is that an object can only be the part of one composition relationship
所以是的,class 可以与它所引用的对象同时具有组合和聚合关系,但可能不像您显示的示例那样。
由于组合的定义特征(相对于聚合)具有 exclusive/non-shareable 个部分(参见 ),您的 Point
-Line
部分-整体示例关系显然是一种聚合(无论您是将点对象传递给构造函数还是在构造函数中创建它们),因为定义一条线的两个点可以与其他线共享。
假设我们有两个 class 命名为点和线。 Line class 有两个构造函数。这是点 class.
的代码// 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;
}
}
这是第 class 行的代码。
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;
}
}
如您所见,第 class 行有两个构造函数。第一个构造函数是 Compositon 的例子,而第二个构造函数是聚合的例子。现在,对于这个案例,我们能说些什么呢? class 可以同时具有聚合和组合吗?感谢您的回答。
对于聚合和组合之间的区别,普遍接受的定义是终生责任和所有权。
- 聚合:一个对象
A
持有对其他对象的引用,但这些其他对象与其他 class 对象共享。当A
被释放时,其他对象继续存在并在应用程序中使用 - 组合:一个对象
B
是由其他对象“构成”的。当 A 被释放时,其他对象也被释放。
Few things in the UML cause more consternation than aggregation and composition
...
Aggregation (white diamond) has no semantics beyond that of a regular association. It is, as Jim Rumbaugh puts it, a modeling placebo
...
Composition (black diamond) does carry semantics. The most particular is that an object can only be the part of one composition relationship
所以是的,class 可以与它所引用的对象同时具有组合和聚合关系,但可能不像您显示的示例那样。
由于组合的定义特征(相对于聚合)具有 exclusive/non-shareable 个部分(参见 ),您的 Point
-Line
部分-整体示例关系显然是一种聚合(无论您是将点对象传递给构造函数还是在构造函数中创建它们),因为定义一条线的两个点可以与其他线共享。