请教一下UML中的聚集和组成在java中怎么理解

classnameextendsjava 2008-04-27 11:50:41
搜索出来的说法也不一
不要用文字或者实例来解释 用代码表示
比如
class A{
}

class B{
A a=new A();
}

class C extends A{
}

class D{
class E{
}
}
或者其他形式
...全文
202 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeliguo12345 2008-04-28
  • 打赏
  • 举报
回复
不太懂,接分
  • 打赏
  • 举报
回复
想了一下 10楼的解释似乎不是我想要的 他的解释还停留在UML上面 没转到Java代码上来
  • 打赏
  • 举报
回复
某人的空间找来一点解释

聚合(Aggregation)

聚合(图F)是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。

关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

图F


合成(Composition)

合成 (图G) 是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局 部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

Employee和TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。


但不是很认同这种解释方式 虽然java是面向对象的 但是代码毕竟还是有抽象的东西 不可能全部对应现实中的实体 不应该用带有实际逻辑的东西来表示 按照他这个解释 聚集(聚合)和组成(组合)在java中的表现形式是一样的了?
网上搜了好多结果 说法都不一样 不知道哪个是对的了

  • 打赏
  • 举报
回复
[Quote=引用 8 楼 powerlee2008 的回复:]
简单的说,
聚集(也叫聚合)是:人和眼镜的关系。
组成(也叫组合)是:人和眼睛的关系。
[/Quote]
这个我能分清 你用代码表示好不好
我是风 2008-04-28
  • 打赏
  • 举报
回复
简单的说,
聚集(也叫聚合)是:人和眼镜的关系。
组成(也叫组合)是:人和眼睛的关系。
  • 打赏
  • 举报
回复

要把聚集和组成分开阿

人和手 就是聚集关系 因为手脱离了人体就失去了意义。
这个貌似是组成

对于组成关系,可以允许每个类的对象单独存在:如: 雇主 和雇员 。雇员离开了这个雇主还可以去找其他雇主。
不知道这个跟组成或者聚集有啥关系 雇主不是由雇员组成也不是雇员聚集而成

不要用文字解释了 那种可能我懂 用java代码来表示

比如这种是依赖
class A{
}
class B{
void d(A a){
}
}
聚集和组成又是哪种形式
class A{
}
class B{
A a=new A();
}
这个形式肯定是其中一种 我的理解应该是聚集
thinking in java里这种形式好像被翻译成组合(第一种方法非常直观:只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。) core java里被翻译成聚合(聚合关系意味着类A的对象包含类B的对象。)
core java1的89第二段最后一句“也就是说,add应该是Order类的一个方法,而Item对象是一个参数。”但是在90页的UML图中却用聚集的符号来表示这种关系 真的很不理解

我搜索出来的结果 组成有的人用的是继承来表示的 也有把我上面写的哪种叫组成

所以我想不用管java里怎么个叫法 我想知道UML里的聚集和组成对应的java代码表示形式 有理解透彻的指点一下 谢谢
chenhongxin 2008-04-28
  • 打赏
  • 举报
回复
聚集和组成在代码上就是上面的形式。

聚集和组成在类的定义上是相同的形式,

不过两者的语意不同。对于聚集关系。部分类对象(b,c)不能单独存在。
它的生命周期依赖于整体类的生命周期 象:人和手 就是聚集关系 因为手脱离了人体就失去了意义。

chenhongxin 2008-04-28
  • 打赏
  • 举报
回复
class A{};class B{};class C{}
class D
{
public D()
{
A a = new A();
B b = new B();
C c = new C();
}
public void doSTH()
{

}
}
M_song 2008-04-28
  • 打赏
  • 举报
回复
楼上说的不错,理解的也不错!
代码的话主要是实体设计..
Shine_Panda 2008-04-28
  • 打赏
  • 举报
回复
class A {
B b = new B();
C c = new C();

}

聚集和组成在代码上就是上面的形式。

聚集和组成在类的定义上是相同的形式,

不过两者的语意不同。对于聚集关系。部分类对象(b,c)不能单独存在。
它的生命周期依赖于整体类的生命周期 象:人和手 就是聚集关系 因为手脱离了人体就失去了意义。


对于组成关系,可以允许每个类
的对象单独存在:如: 雇主 和雇员 。雇员离开了这个雇主还可以去找其他雇主。

代码真的就是那么简单
希望你能理解。





KKK2007 2008-04-28
  • 打赏
  • 举报
回复
一两句说不清,懒的写~~

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧