组合/聚合复用原则(Composition/Aggregation Principle)
来源:互联网 发布:怎么申请淘宝 编辑:程序博客网 时间:2024/04/29 08:04
定义
又叫合成复用原则。原则就是在一个新的对象里面通过关联关系(包括组合关系和聚合关系)使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用其已有功能的目的。也就是,要尽量使用类的合成复用,尽量不要使用继承。
组合/聚合复用原则要点:
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的。这个原则有一个简短的描述:要尽量使用合成、聚合,尽量不要使用继承。
1) 新对象存取成分对象的唯一方法是通过成分对象的接口
2) 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不到的
3) 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分对象类型相同的对象
4) 合成、聚合可以应用到任何环境中去,而继承只能应用到一些有限环境中去
5) 导致错误的使用合成、聚合与继承的一个常见原因是错误的把“Has-a”关系当作“Is-a”关系。如果两个类是“Has-a”关系那么应使用合成、聚合,如果是“Is-a”关系那么可使用继承
合成复用原则分析
在面向对象设计中,可以通过两种基本方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过继承。
1) 继承复用:实现简单,易于扩展。破坏系统的封装性,从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。(“白箱”复用 )
2) 组合/聚合复用:耦合度相对较低,选择性地调用成员对象的操作;可以在运行时动态进行。(“黑箱”复用 )
组合/聚合可以使系统更加灵活,类与类之间的耦合度降低,一个类的变化对其他类造成的影响相对较少,因此一般首选使用组合/聚合来实现复用;
其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。- 组合/聚合复用原则(Composition/Aggregation Principle)
- 组合/聚合复用原则(Composition/Aggregation Principle)
- 合成/聚合复用原则 (Composition/Aggregation Principle, CARP)
- CARP(Composition/Aggregation Reuse Principle)合成/聚合复用原则
- 聚合(Aggregation)和组合(Composition)的区别
- 聚合(Aggregation)和组合(Composition)的区别
- 组合与聚合的选用 (Composition & Aggregation)
- 聚合(Aggregation)和组合(Composition)区别
- Composition(组合)与Aggregation(聚合)的区别
- 继承(inheritance),组合(composition),聚合(aggregation)
- Composition(组合)与Aggregation(聚合)的区别
- 泛化(Generalization) 聚合(aggregation)组合(composition)依赖(Dependency)
- 泛化(Generalization) 聚合(aggregation)组合(composition)依赖(Dependency)
- UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别
- 聚合Aggregation与合成Composition
- UML中类之间的几种关系,关联(association),聚合(Aggregation),组合(Composition)
- 组合/聚合复用原则(CARP)
- 软件设计原则(七)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
- 字符串列表的C语言实现:c_strlist
- 如何让Android横竖屏切换时不销毁当前activity
- 依赖倒转原则(Dependency Inversion Principle)
- FileWriter的初步使用
- C#调用WebService服务(动态调用)
- 组合/聚合复用原则(Composition/Aggregation Principle)
- BufferedWriter的简单使用
- Android 情景模式的设置
- Android 访问 Tomcat SSL双向验证服务器
- FileReader读取数据方法(二)
- 迪米特法则(Law of Demeter)
- FileReader读取数据方法(一)
- 关于UIImage的一些知识
- 什么是P问题?NP问题?NPC问题?三者关系如何?