我很难理解UML中组合和聚合之间的区别.有人可以给我一个很好的比较和对比吗?我也很想学会在代码中识别它们之间的区别和/或看一个简短的软件/代码示例.
编辑:我问的部分原因是因为我们正在进行的反向文档活动.我们编写了代码,但是我们需要返回并为代码创建类图.我们只是想正确地捕捉这些关联.
我试图确认我对代码对于关联,聚合和组合的看法.所以这里..
聚合:Has-a.它具有另一种类型的现有对象
public class Aggregation
{
SomeUtilityClass objSC
public void doSomething(SomeUtilityClass obj)
{
objSC = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
构成:由另一个对象组成
public class Composition
{
SomeUtilityClass objSC = new SomeUtilityClass();
public void doSomething()
{
objSC.someMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
协会:我对此有两种看法.
关联是一种较弱的聚合形式,其中类不保留对其接收的对象的引用.
public class Association
{
//SomeUtilityClass objSC /*NO local reference maintained */
public void doSomething(SomeUtilityClass obj)
{
obj.DoSomething();
}
}
Run Code Online (Sandbox Code Playgroud)我的理解是否正确?我在这里和这里读过相互矛盾的文章,所以我真的不确定应该遵循哪一条.我的理解似乎与第一个链接一致.我觉得第二个环节是错误的,或者也许我没有理解它.
你怎么看?
依赖
类的结构或行为的变化会影响其他相关的类,然后这两个类之间存在依赖关系.它不一定相同,反之亦然.当一个类包含另一个类时,就会发生这种情况.
组成
组合是聚合的特例.以更具体的方式,受限制的聚合称为组合.当一个对象 包含另一个对象时,如果所包含的对象不存在而不存在容器对象,那么它就称为组合.
依赖
class Employee {
private Address address;
// constructor
public Employee( Address newAddress ) {
this.address = newAddress;
}
public Address getAddress() {
return this.address;
}
public void setAddress( Address newAddress ) {
this.address = newAddress;
}
}
Run Code Online (Sandbox Code Playgroud)
组成
final class Car {
private final Engine engine;
Car(EngineSpecs specs) {
engine = new Engine(specs);
}
void move() {
engine.work();
}
}
Run Code Online (Sandbox Code Playgroud) 我一直避免使用聚合,因为将一对多关系归类为聚合似乎太主观了。但我正在审查其他人制作的模型,其中聚合用于多对多关系(例如:一门课程由多个模块组成,一个模块可能是多个课程的一部分)。这在我看来是完全错误的,但我找不到一个明确的规则来反对它。官方有什么规定?
class Book {
private Chapter[] chapters = new Chapter[5];
}
class Chapter {
private Book book;
}
Run Code Online (Sandbox Code Playgroud)
这是实现上述关系的正确方法吗?我需要对此进行解释.谢谢.
由于聚合和组合是相关的协会,或者我们可以说它给出了对象或其他任何东西之间关系的理解.
我发布了这个问题,因为我在采访中问了一个问题,即什么是组合和聚合.
所以根据我的理解,我给出了我的想法,如下所示.
http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition
还访问了更多.
我的基本解释与聚合表示松散的关系有关,而作文表明与此有关的强关系和明确的解释.
但是采访者侮辱了我并且说这是理论概念,你说我想要完美的Java代码,在这些代码中它们如何区别,并告诉我是否会给你一个小的应用程序然后你如何识别这是聚合和这个是作文?
那么现在我想了解纯技术概念和Java代码,它们的区别在于它们是什么?它们是什么?
uml ×5
composition ×4
java ×4
oop ×4
aggregation ×2
relationship ×2
associations ×1
c# ×1
dependencies ×1