以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 软件工程论坛 』 (http://bbs.xml.org.cn/list.asp?boardid=48) ---- 组合,聚合的又一区别 (http://bbs.xml.org.cn/dispbbs.asp?boardid=48&rootid=&id=28543) |
-- 作者:pennyliang -- 发布时间:3/13/2006 1:24:00 PM -- 组合,聚合的又一区别 组合聚合的主要区别 组合:异构性,部分和主体具有生命期上的一致性 聚合:同构性,主体和部分不具有生命期的一致性 我认为又一重大区别是(推论) 以上想法来自meyer的面向对象软件构造一书。 |
-- 作者:jiachong -- 发布时间:3/21/2006 12:54:00 PM -- 这个例子有点欠妥,因为组合聚合都是对象层面的 那么举个static的例子似乎不恰当 |
-- 作者:pennyliang -- 发布时间:3/21/2006 6:54:00 PM -- 有道理,这个例子是不是好一点 Class TreeNode { TreeNode* m_leftNode; TreeNode* m_rightNode; } |
-- 作者:jiachong -- 发布时间:3/22/2006 12:43:00 PM -- 这个例子问题在于聚合对象只是类型上的“同”,而不是实例上的“同” 那么这种类型上的自组合似乎也可以,例如一个form作为容器嵌套包含许多panel 所以,类型上的自组合和自聚合应该都可以,但创建操作不能发生在构造器上,因为构造器会因对象创建而反复执行下去 |
-- 作者:pennyliang -- 发布时间:3/24/2006 8:01:00 PM -- 不是吧 Class TreeNode { TreeNode m_leftNode; TreeNode m_rightNode; } 这样写的话编译肯定不同过,我没有编译器,即使可以编译通过,也不对,这样就循环构造了. |
-- 作者:jiachong -- 发布时间:3/27/2006 12:41:00 PM -- 关键看语言对申明的处理了,比如Java,这样肯定没问题,因为两个成员只是空的引用,并不会导致构造 如果编译器对这种声明会自动构造对象,那么就和我说的“创建操作发生在构造器上”是一回事了 |
-- 作者:pennyliang -- 发布时间:3/28/2006 9:20:00 AM -- 对,这个应该和C#一样的,得确如此,在java中这样写没有问题,应为这些语言只有基本类型是值类型,其他都是引用类型,和C++不同。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
62.500ms |