UML类图中“聚合”与“组合”有什么区别?
UML类图中“聚合”与“组合”有什么区别?
搜索过网上的答案,都是讲概念的,有点抽象,
期望哪位能举个例子程序来说清楚一点。
最好结合程序来讲,本人不明白的就是如何在程序里面识别哪些是“聚合”,哪些是“组合”,
或者直接在UML图中讲解也行啊。
[解决办法]
看看这个吧,很明确:
http://www.phpchina.com/36289/viewspace_14103.html
[解决办法]
用C++程序的话,聚合就像是类中的指针成员,而组合就是类中的成员.
//聚合class A{public: A(B * pb) { m_pb = pb; }...private: B * m_b;};//组合class A{public: A() { }...private: B m_b;}
[解决办法]
给个简单点的:
组(成)合:
一付眼镜,如果从带的人去看,那么是由镜腿和镜片组成的,缺少任何其中之一都不行,就是坏了。
聚合(共享):
如果从销售商来看,一付眼镜,是由镜腿和镜片聚合在一起的,缺少任何其中之一都可以,因为在他们的眼里,镜腿和镜片都是可以单独卖的;而如果其中某一个坏了,再换一个就行了。这时,在他们的眼里,镜腿和镜片是一种聚合关系。
类似的,对于一个孩子来说,一台电脑是由XXX组成的,即组成关系,而对于电脑销售商来说,是聚合关系。
[解决办法]
之所以模糊,是因为你没有找到合适的立场去看你分析的对象
[解决办法]
通俗的例子:“人”和“胳膊”的关系。
聚合:
如果“人”必须有“胳膊”这个组成部分,
那么“人”和“胳膊”的关系就是聚合关系。
“人”聚合了“胳膊”,“胳膊”是“人”不可缺少的一部分。
组合:
如果“人”不是必须拥有(可有可无)“胳膊”这个组成部分,
那么“人”和“胳膊”的关系就是组合关系。
“人”可以拥有“胳膊”,但“胳膊”不是“人”不可缺少的一部分。
[解决办法]
矛盾与迟钝
一个事物有多面性,不绝对的聚合、组合
按人的不同角色看问题,赞赏
[解决办法]
楼上几位说得都差不多,最好表达得容易理解,我以前给别人介绍技术时也常表达得让听者糊涂.
阎宏 著《JAVA与模式》中关于类的之间关系说得很好,他举了西游记里例子(作者在美国多年,写技术著作能熟练用中国古代经典里的道理举例,令我十分佩服,建议国内技术著作的作者在表述技术时特别是翻译作品能结合我们的认知习惯,这是废话,可以略去不看)
书中说,从美猴王孙悟空(MonkeyKing)和他的四肢(Limb)以及他的金箍棒(GoldRingedStaff)之间的关系,可以看出,MonkeyKing与GoldRingedStaff之间是聚合的关系;而MonkeyKing与Limb之间的关系是合成关系。
[解决办法]