UML标记中的 聚合(Aggregation) & 合成(Composition)的区别是 ?

方紫涵 2013-11-19 10:27:37
UML标记中的 聚合(Aggregation) & 合成(Composition)的区别是 ?


看了一篇文章写得是:

1、合成关系是关联关系的一种,是比聚合关系还要强的关系。
2、它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

感觉好晦涩,求大侠通俗的解释一下。
...全文
523 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-12-24
  • 打赏
  • 举报
回复
引用 7 楼 xwhbwas2008 的回复:
关于下面的 能举一个例子不 ? 2.关联 类A在类B中作为一个成员变量 析构不在B中
2.关联 类A在类B中作为一个成员变量 析构不在B中 上面解释的很好,收藏。 我理解的关联 是这样的,未知的否? class B; calss A{ B* m_pb; pbulic: A(const B *pb):m_pb(pb){}; }; class B{ .... }; int main() { B b; A a(&b); return 0; }
candeabc123 2013-12-24
  • 打赏
  • 举报
回复
区别在于生命周期的管理
lm_whales 2013-12-24
  • 打赏
  • 举报
回复
引用 9 楼 xwhbwas2008 的回复:
[quote=引用 8 楼 lm_whales 的回复:] [quote=引用 7 楼 xwhbwas2008 的回复:] 关于下面的 能举一个例子不 ? 2.关联 类A在类B中作为一个成员变量 析构不在B中
2.关联 类A在类B中作为一个成员变量 析构不在B中 上面解释的很好,收藏。 我理解的关联 是这样的,未知的否?
class B;
calss A{
B* m_pb;
pbulic:
A(const B *pb):m_pb(pb){}; 
};

class B{
....
};

int main()
{
  B b;
  A a(&b);
  return 0;
}
[/quote] 大话设计模式 中的,买这书白瞎了 [/quote] 你这例子是java 吧,java 对象,似乎就是引用。引用表示关联 和上面那个指针,效果相同。 例如:
class B;
calss A{
B& m_ref;
pbulic:
A(const B &r):m_ref(r){}; 
};

class B{
....
};

int main()
{
  B b;
  A a(b);
  return 0;
}
为了代码更清晰,放在代码框里
jiandingzhe 2013-12-24
  • 打赏
  • 举报
回复
我觉得,对这种死板的玩意不要这么当真。
方紫涵 2013-12-24
  • 打赏
  • 举报
回复
引用 8 楼 lm_whales 的回复:
[quote=引用 7 楼 xwhbwas2008 的回复:]

关于下面的 能举一个例子不 ?
2.关联 类A在类B中作为一个成员变量 析构不在B中

2.关联 类A在类B中作为一个成员变量 析构不在B中
上面解释的很好,收藏。

我理解的关联 是这样的,未知的否?
class B;
calss A{
B* m_pb;
pbulic:
A(const B *pb):m_pb(pb){};
};

class B{
....
};

int main()
{
B b;
A a(&b);
return 0;
}

[/quote]

大话设计模式 中的,买这书白瞎了
方紫涵 2013-12-23
  • 打赏
  • 举报
回复
引用 6 楼 shuaifujian 的回复:
类与类之间的四种关系 1.依赖 类A在类B中作为一个成员函数的参数或者是返回值 A的析构不在B中 2.关联 类A在类B中作为一个成员变量 析构不在B中 3.聚合 类A作为类B中的一个成员变量 析构在B中 可以在B中的任何周期被析构 就像你的头发 你挂了 头发也就不存在了 但是你活着的时候 头发没了 对你没啥影响 4.组合 类A作为类B中的一个成员变量 只有在B析构的时候才会析构A 就像你的大脑 大脑挂了 你也就挂了 你挂了大脑也挂了 耦合度依次增加
引用 5 楼 caojian005 的回复:
我对设计模式真的不熟。。临时看了些资料,应该是下面个聚合 http://blog.csdn.net/cjjky/article/details/7322688 上面是资料部分 我的理解是Strategy对象是不是能被其他Context类引用来判断。。你最好问问别人,这上面我是外行
关于下面的 能举一个例子不 ? 2.关联 类A在类B中作为一个成员变量 析构不在B中
shuaifujian 2013-11-20
  • 打赏
  • 举报
回复
类与类之间的四种关系 1.依赖 类A在类B中作为一个成员函数的参数或者是返回值 A的析构不在B中 2.关联 类A在类B中作为一个成员变量 析构不在B中 3.聚合 类A作为类B中的一个成员变量 析构在B中 可以在B中的任何周期被析构 就像你的头发 你挂了 头发也就不存在了 但是你活着的时候 头发没了 对你没啥影响 4.组合 类A作为类B中的一个成员变量 只有在B析构的时候才会析构A 就像你的大脑 大脑挂了 你也就挂了 你挂了大脑也挂了 耦合度依次增加
FlyToTMoon 2013-11-19
  • 打赏
  • 举报
回复
聚合Aggregation可以理解为has-a关系,没有整体的话局部可以存在。 组合Composition可以理解为contains-a关系,部分不可以脱离整体存在。 例子:company和employee之前的关系是聚合关系,因为脱离了company,employee可以单独存在 company和department之间是组合关系
FlyToTMoon 2013-11-19
  • 打赏
  • 举报
回复
我对设计模式真的不熟。。临时看了些资料,应该是下面个聚合 http://blog.csdn.net/cjjky/article/details/7322688 上面是资料部分 我的理解是Strategy对象是不是能被其他Context类引用来判断。。你最好问问别人,这上面我是外行
方紫涵 2013-11-19
  • 打赏
  • 举报
回复
引用 3 楼 caojian005 的回复:
[quote=引用 2 楼 xwhbwas2008 的回复:]
[quote=引用 1 楼 caojian005 的回复:]
聚合Aggregation可以理解为has-a关系,没有整体的话局部可以存在。
组合Composition可以理解为contains-a关系,部分不可以脱离整体存在。

例子:company和employee之前的关系是聚合关系,因为脱离了company,employee可以单独存在
company和department之间是组合关系

005看看这个里面的例子,能以这里面的例子说一下局部脱离整体不?

http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html[/quote]
轮胎嘛,本身也是个商品,车和轮胎是聚合关系。
四肢跟人。。如果你一定要说手啊,腿啊剁下来还存在这个就。。。
轮胎离开了一辆车可以用在其他车上,但是手跟腿不行[/quote]

可以允许俄再较真一下不?

我看策略模式,搜到两个图,发现两个图一个是聚合一个是合成,按照005的意思,哪个应该是对的阿 ?


FlyToTMoon 2013-11-19
  • 打赏
  • 举报
回复
引用 2 楼 xwhbwas2008 的回复:
[quote=引用 1 楼 caojian005 的回复:] 聚合Aggregation可以理解为has-a关系,没有整体的话局部可以存在。 组合Composition可以理解为contains-a关系,部分不可以脱离整体存在。 例子:company和employee之前的关系是聚合关系,因为脱离了company,employee可以单独存在 company和department之间是组合关系
005看看这个里面的例子,能以这里面的例子说一下局部脱离整体不? http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html[/quote] 轮胎嘛,本身也是个商品,车和轮胎是聚合关系。 四肢跟人。。如果你一定要说手啊,腿啊剁下来还存在这个就。。。 轮胎离开了一辆车可以用在其他车上,但是手跟腿不行
方紫涵 2013-11-19
  • 打赏
  • 举报
回复
引用 1 楼 caojian005 的回复:
聚合Aggregation可以理解为has-a关系,没有整体的话局部可以存在。 组合Composition可以理解为contains-a关系,部分不可以脱离整体存在。 例子:company和employee之前的关系是聚合关系,因为脱离了company,employee可以单独存在 company和department之间是组合关系
005看看这个里面的例子,能以这里面的例子说一下局部脱离整体不? http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html

64,746

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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