UML中有组合和聚合,但我看到的OO资料中讲到组合时,好像并没有说太严格的说一定要区分这是组合还是聚合,大都是和继承对着讲。我觉得组合和聚合应该是更偏向语义上的概念吧。
等待楼下纠正。:)
这种问题留个大侠来回答吧,说的不好怕误导.呵呵.
但我在看大话设计模式的时候,里面把这些问题都讲的很清楚,UML里的组合应该是OO里的"合成"和"聚合",这两个概念是不同的,聚合表示是种弱的拥有关系,而另一个则表示包含关系.可以看看以下链接里的UML类图,作者应该是笔记于大话模式中的,里面用动物把这些关系表现的都很好理解:http://www.cnblogs.com/bluedy1229/archive/2008/11/19/1286692.html
为什么要少继承?因为继承过于复杂,也过于单一,现在大多数面向对象语言都是单继承的,这无疑很大地限制了继承的功能,但是多继承的语言比如C++又对父类字段和方法非常难以控制。
所以才谈到组合。为什么要继承?因为我们需要体现事物在抽象层面上的共通性,这时候接口就出现了,我们通常更关注can-do而不是is-a(当然不排除很多时候我们关注后者),组合可以帮助我们做到一个事物得到多个事物的功能(真传),而不是财产(遗传基因),所以我们可以通过组合来实现接口,以接口继承的形式来实现一种关注can-do的多继承。
相比继承,接口实现更加灵活,组合更加具有可变化性,并且不会让继承树太过复杂,造成类库的难以控制。
至于和UML相关的,小弟没研究,期待楼下继续。
UML中和OO原则中的同名的概念是不相同的,二者没有任何关系