优先考虑composit|Aggregate,尽量不要使用extends,association(关联) 的特殊种类 Aggregation 它表示'拥有'关系或整体与部分的关系
Composition 可理解成强关联关系,强得多的'拥有'关系,一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建/湮灭,
一个合成关系中的成分对象是不能与另一个合成关系共享的。
一个成分对象在同一时刻内只属于一个合成关系
合成是值的聚合(Aggregation by value)、聚合是引用的聚合(Aggregation by Reference)
·composite/aggregation Reuse
新对象存/取成分对象的唯一方式是接口。
成份对象的内部细节,新对象是不可见。
此复用机制支持包装/所需依赖较少
每一个新对象可以将焦点集中在一个任务上
新对象可以动态引用与成分对象相同类型的实例,类似 setUserList(User userObj) 在些User可看作一个接口
此合成/聚合复用机制会有多个实例需要管理
·使用extends
extends 是OO特有的复用机制,很容易就会被滥用。
继承是类型的复用,它通过扩展一个已有对象的实现来对现有功能进行扩展/增加新的功能,基类要捕获共同的属性/形为,而子类要扩展/重写一些属性/形为。
继承会破坏超类的封装,因为它会将处理细节暴露给子类。
水波效应,如果超类处理机制改了,相应对子类的改动是非常大的。
IS A 与 HAS A 的区别
IS A 代表一个类是令一个类的一种
HAS A 代表一个类是令一个类的一个角色
·composite/aggregation复用机制可应用到几乎任何环境中去,而继承只能应用到有限的环境中。
Composition 可理解成强关联关系,强得多的'拥有'关系,一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建/湮灭,
一个合成关系中的成分对象是不能与另一个合成关系共享的。
一个成分对象在同一时刻内只属于一个合成关系
合成是值的聚合(Aggregation by value)、聚合是引用的聚合(Aggregation by Reference)
·composite/aggregation Reuse
新对象存/取成分对象的唯一方式是接口。
成份对象的内部细节,新对象是不可见。
此复用机制支持包装/所需依赖较少
每一个新对象可以将焦点集中在一个任务上
新对象可以动态引用与成分对象相同类型的实例,类似 setUserList(User userObj) 在些User可看作一个接口
此合成/聚合复用机制会有多个实例需要管理
·使用extends
extends 是OO特有的复用机制,很容易就会被滥用。
继承是类型的复用,它通过扩展一个已有对象的实现来对现有功能进行扩展/增加新的功能,基类要捕获共同的属性/形为,而子类要扩展/重写一些属性/形为。
继承会破坏超类的封装,因为它会将处理细节暴露给子类。
水波效应,如果超类处理机制改了,相应对子类的改动是非常大的。
IS A 与 HAS A 的区别
IS A 代表一个类是令一个类的一种
HAS A 代表一个类是令一个类的一个角色
·composite/aggregation复用机制可应用到几乎任何环境中去,而继承只能应用到有限的环境中。