首页 新闻 会员 周边

OO设计原则中的"多组合,少继承"的疑惑

0
悬赏园豆:10 [已解决问题] 解决于 2008-12-04 09:20

OO设计原则中的"多组合,少继承"中的"组合"关系是否和UML中的"组合"定义相一致,我有时看到的示例代码中的"组合"在语义上并没有存在很严格的整体-部分关系呀?

另外,设计原则中的另一个原则"依赖于抽象"中的"依赖"是否也与UML中的"依赖"定义相一致?

Ryanism的主页 Ryanism | 初学一级 | 园豆:39
提问于:2008-11-30 17:18
< >
分享
最佳答案
0

UML中有组合和聚合,但我看到的OO资料中讲到组合时,好像并没有说太严格的说一定要区分这是组合还是聚合,大都是和继承对着讲。我觉得组合和聚合应该是更偏向语义上的概念吧。

等待楼下纠正。:)

水言木 | 小虾三级 |园豆:586 | 2008-11-30 20:12
其他回答(3)
0

这种问题留个大侠来回答吧,说的不好怕误导.呵呵.

但我在看大话设计模式的时候,里面把这些问题都讲的很清楚,UML里的组合应该是OO里的"合成"和"聚合",这两个概念是不同的,聚合表示是种弱的拥有关系,而另一个则表示包含关系.可以看看以下链接里的UML类图,作者应该是笔记于大话模式中的,里面用动物把这些关系表现的都很好理解:http://www.cnblogs.com/bluedy1229/archive/2008/11/19/1286692.html

Astar | 园豆:40805 (高人七级) | 2008-11-30 17:34
0

为什么要少继承?因为继承过于复杂,也过于单一,现在大多数面向对象语言都是单继承的,这无疑很大地限制了继承的功能,但是多继承的语言比如C++又对父类字段和方法非常难以控制。

所以才谈到组合。为什么要继承?因为我们需要体现事物在抽象层面上的共通性,这时候接口就出现了,我们通常更关注can-do而不是is-a(当然不排除很多时候我们关注后者),组合可以帮助我们做到一个事物得到多个事物的功能(真传),而不是财产(遗传基因),所以我们可以通过组合来实现接口,以接口继承的形式来实现一种关注can-do的多继承。

相比继承,接口实现更加灵活,组合更加具有可变化性,并且不会让继承树太过复杂,造成类库的难以控制。

至于和UML相关的,小弟没研究,期待楼下继续。

JimLiu | 园豆:300 (菜鸟二级) | 2008-11-30 17:35
0

UML中和OO原则中的同名的概念是不相同的,二者没有任何关系

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2008-11-30 23:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册