收藏 分享(赏)

合成聚合复用原则.doc

上传人:hwpkd79526 文档编号:7913088 上传时间:2019-05-29 格式:DOC 页数:5 大小:195.50KB
下载 相关 举报
合成聚合复用原则.doc_第1页
第1页 / 共5页
合成聚合复用原则.doc_第2页
第2页 / 共5页
合成聚合复用原则.doc_第3页
第3页 / 共5页
合成聚合复用原则.doc_第4页
第4页 / 共5页
合成聚合复用原则.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、合成/聚合复用原则( Composite/Aggregate Reuse Principle,CARP)合成(Composition)和聚合(Aggregation )都是关联(Association)的特殊种类。聚合表示整体和部分的关系,表示“拥有” 。如奔驰 S360 汽车,对奔驰S360 引擎、奔驰 S360 轮胎的关系是聚合关系,离开了奔驰 S360 汽车,引擎、轮胎就失去了存在的意义。在设计中,聚合不应该频繁出现,这样会增大设计的耦合度。合成则是一种更强的“拥有” ,部分和整体的生命周期一样。合成的新的对象完全支配其组成部分,包括它们的创建和湮灭等。一个合成关系的成分对象是不能与另一

2、个合成关系共享的。换句话说,合成是值的聚合(Aggregation by Value),而一般说的聚合是引用的聚合(Aggregation by Reference)。在面向对象设计中,有两种基本的办法可以实现复用:第一种是通过合成/聚合,即合成复用原则,含义是指,尽量使用合成/聚合,而不是使用继承。第二种就是通过继承。要正确地选择合成/复用和继承的方法是,只有当以下的条件全部被满足时,才应当使用继承关系:1)子类是父类的一个特殊种类,而不是父类的一个角色,也就是区分“Has-A“和“Is-A“。只有“Is-A“关系才符合继承关系,“Has-A“关系应当用聚合来描述。2)永远不会出现需要将子类

3、换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。3)子类具有扩展父类的责任,而不是具有置换掉(override)或注销掉(Nullify)父类的责任。如果一个子类需要大量的置换掉父类的行为,那么这个类就不应该是这个父类的子类。4)只有在分类学角度上有意义时,才可以使用继承。如果语义上存在着明确的 is-a 关系,并且这种关系是稳定的、不变的,则考虑使用继承;如果没有 is-a 关系,或者这种关系是可变的,使用合成。错误的使用继承而不是合成 / 聚合的一个常见原因是错误的把 “Has-A” 当成了 “Is A” 。 “Is A” 代表一个类是另外一个类的一

4、种; “Has-A” 代表一个类是另外一个类的一个角色,而不是另外一个类的特殊种类。 我们看一个例子。如果我们把 “ 人 ” 当成一个类,然后把 “ 雇员 ” , “ 经理 ” , “ 学生 ” 当成是 “ 人 ” 的子类。这个的错误在于把 “ 角色 ” 的等级结构和 “ 人 ” 的等级结构混淆了。 “ 经理 ” , “ 雇员 ” , “ 学生 ” 是一个人的角色,一个人可以同时拥有上述角色。如果按继承来设计,那么如果一个人是雇员的话,就不可能是学生,这显然不合理。正确的设计是有个抽象类 “ 角色 ” , “ 人 ” 可以拥有多个 “ 角色 ” (聚合), “ 雇员 ” , “ 经理 ” ,

5、“ 学生 ” 是 “ 角色 ” 的子类。 另外一个就是只有两个类满足里氏替换原则的时候,才可能是 “Is A” 关系。也就是说,如果两个类是 “Has-A” 关系,但是设计成了继承,那么肯定违反里氏替换原则。通过合成/聚合的优缺点优点:1) 新对象存取子对象的唯一方法是通过子对象的接口。2) 这种复用是黑箱复用,因为子对象的内部细节是新对象所看不见的。3) 这种复用更好地支持封装性。4) 这种复用实现上的相互依赖性比较小。5) 每一个新的类可以将焦点集中在一个任务上。6) 这种复用可以在运行时间内动态进行,新对象可以动态的引用与子对象类型相同的对象。7) 作为复用手段可以应用到几乎任何环境中去。缺点: 就是系统中会有较多的对象需要管理。4.4 通过继承来进行复用的优缺点优点:新的实现较为容易,因为父类的大部分功能可以通过继承的关系自动进入子类。修改和扩展继承而来的实现较为容易。缺点:继承复用破坏封装性,因为继承将父类的实现细节暴露给子类。由于父类的内部细节常常是对于子类透明的,所以这种复用是透明的复用,又称“白箱”复用。如果父类发生改变,那么子类的实现也不得不发生改变。从父类继承而来的实现是静态的,不可能在运行时间内发生改变,没有足够的灵活性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报