合成/聚合复用原则(CARP)】的更多相关文章

1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合.尽量不要使用继承"呢? 这是由于: 第一,继承复用破坏包装,它把父类的实现细节直接暴露给了子类,这违背了信息隐藏的原则:      第二:假设父类发生了改变.那么子类也要发生对应的改变.这就直接导致了类与类之间的高耦合,不利于类的扩展.复用.维护等,也带来了系统僵硬和脆弱的设计. 而用合成和聚合的时候新对象和已有对象的交互往往是通过接口或者抽象类进行的…
这个也好理解 ,这个合成/聚合复用原则指的是在一个新的对象里面使用一些已有的对象,使其成为新对象的一部分.新对象通过委派达到复用已有功能的效果. 说到这里要讲提及到“Has-A” 和“Is-A”的区别: Has-A:表示某一个角色具有某一项责任. Is-A:表示一个类是另一个类的一种. 看看这一个原则听好理解的哈,因为我也经常在做功能提取,比如提取一些公共的算法什么的.最后达到复用的目的,从而避免了复制代码. 可这里所说的意思好像要在我这个之上,这里的意思是针对一个个的对象,我们可以把某一个业务…
一.什么是合成/聚合复用原则? 合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的. 简述为:要尽量使用合成/聚合,尽量不要使用继承. 二.合成和聚合的区别:依赖和关联 合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类.用C语言来讲,合成是值的聚合(Aggregation by Value),聚合是则是引用的聚合(Aggregation by Referen…
组合/聚合复用原则(Composite/Aggregate Reuse Principle或CARP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的.这两种都是关联关系的一种,聚合表示整体与部分的关系,部分可以脱离整体作为独立个体存在:组合是一种更强的聚合,部分组成整体,但部分不可作为独立个体单独存在,部分的生命周期不能超过整体的生命周期.聚合好比电脑与鼠标,组合好比人与心脏.         组合/聚合与继承是实现复用的两个…
作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.定义:  要尽量使用合成和聚合,尽量不要使用继承. 2.使用场景: 要正确的选择合成/复用和继承,必须透彻地理解里氏替换原则和Coad法则.Coad法则由Peter Coad提出,总结了一些什么时候使用继承作为复用工具的条件. (1)Coad法则:只有当以下Coad条件全部被满足时,才应当使用继承关系: [1]子类是超类的一个特殊种类,而不是超类的一个角色.区分“Has-A”和“Is-A”.只有“Is-A”…
尽量使用对象组合,而不是继承来达到复用的目的 未完待续…
一.概念 CARP:CompositionAggregation Principle 合成聚合复用原则,尽量使用合成/聚合,尽量不使用类继承.合成聚合是“has  a”的关系,而继承是“is  a”的关系.由于继承是一中强耦合的结构,父类变,子类必变.所以不是“is  a”关系,我们一般不要用继承.优先使用合成聚合复用原则,有助于保持每个类的封装,降低继承的层次.合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的…
合成复用原则又称为组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP),其定义如下: 合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的. 合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分:新对象通过委派调用已有对象的方法达到复用功能的目的.简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承.…
1 课堂概念 1.0 继承关系的选择 1.1 起名 1.2 定义 1.3 组合聚合优缺点 1.4 继承优缺点 1.5 组合聚合区别 2 代码演练 2.1 反例 2.2 正例 3 疑问解答3.1 疑问解答 1 课堂概念 1.0 继承关系的选择(自己理解) 搜索,官方解答,说继承关系是is a的关系,在我看来,正方形is a 长方形,详看3.1解答和上节的案例. 所以看是否有继承关系,通常要看子类和父类共用的方法,子类是否能够实现实现父类的方法.(自己理解) 1.1 起名 合成复用原则,组合复用原则…
复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承. 之前提到的"依赖倒转原则",是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的是类的继承(包括单继承和接口实现),他们支撑了Java多态的特性. 但是今天要谈一谈Java另一个特性--封装.封装就是不要暴露过多的基类内部细节给子类,让高层的操作神秘起来,不让小兵知道.合成复用原则体现的就是封装的特性. 所以可以推论出,多使用对象的组合/聚合关系,而不是继承,从而实现不会暴露过多的基类操作细节给子类的目的.…
1 课程大纲 2 UML的概述 总结: UML unified model language 统一建模语言 一共有十种图: 类图 用例图 时序图 * 对象图 包图 组件图 部署图 协作图 状态图 (最杰出的模型:地图) 3用例图 关联: 实心箭头 空心实线箭头 泛化关系 继承 包含关系:虚线箭头 加include 扩展关系: 虚线加extend 4类的关联和依赖关系 类图 泛化: 实现关系: 虚线空心箭头 依赖关系: 虚线箭头 5类的聚合和组合-类图练习 聚合与组合: 聚合: 组合: 6时序图…
基本介绍 合成复用原则的核心,就是尽量去使用组合.聚合等方式,而不是使用继承. 核心思想 1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起. 2.针对接口编程,而不是针对实现编程. 3.为了交互对象之间的松耦合设计而努力.…
一.里氏替换原则 如果说实现开闭原则的关键步骤就是抽象化,那么基类(父类)和子类的继承关系就是抽象化的具体实现,所以里氏替换原则就是对实现抽象化的具体步骤的规范.即:子类可以扩展基类(父类)的功能,但不能改变父类原有的功能. 定义:一个软件实体如果适用一个父类的话,那一定是适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变. 里氏替换原则最核心得一句话就是:子类可以扩展基类(父类)的功能,但不能改变父类原有的功能.它包含着四种含义: 子类可以实…
1  概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2  七大OO面向对象设计 2.1 单一职责原则SRP(Simple Responsibility Principle) 单一职责原则,就是一个设计元素只做一件事.什么是“只做一件事”?就是少管闲事.现实中也是如此,如果让一个人认真的去做一件事,那么任何人都有信心可以做到很出色.就一个类而言,应该仅有一个引起它变化的原因,如果你能想到两个…
一.单一职责原则(Single Responsibility Principle,SRP) 含义: 1.避免相同的职责分散到不同的类中 2.避免一个类承担太多职责 作用: 1.可以减少类之间的耦合 2.提高类的复用性 一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起.这会导致脆弱的设计.当一个职责发生变化时,可能会影响其它的职责.另外,多个职责耦合在一起,会影响复用性.例如:要实现逻辑和界面的分离. 问题由来 之…
Atitit.软件开发的几大规则,法则,与原则Principle  v31.1. 修改历史22. 设计模式六大原则22.1. 设计模式六大原则(1):单一职责原则22.2. 设计模式六大原则(2):里氏替换原则22.3. 设计模式六大原则(3):依赖倒置原则22.4. 设计模式六大原则(4):接口隔离原则22.5. 设计模式六大原则(5):迪米特法则22.6. 设计模式六大原则(6):开闭原则23. S.O.L.I.D原则(oo fp)33.1. Single Responsibility Pr…
1.  开闭原则(Open-Closed Principle,OCP) 1)定义:一个软件实体应当对扩展开放,对修改关闭( Software entities should be open for extension,but closed for modification.).即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展. 2)满足“开-闭”原则的系统的优点: a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性. b…
开放封闭原则 转:http://baike.baidu.com/view/2493421.htm转:http://dev.csdn.net/article/38/38826.shtm 开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心.软件设计本身所追求的目标就是封装变化.降低耦合,而开放封闭原则正是对这一目标的最直接体现.其他的设 计原则,很多时候是为实现这一目标服务的. 关于开发封闭原则,其核心的思想是: 软件实体应该是可扩展,而不可修改的.也就是说,…
OCP(Open-Closed Principle),开放封闭原则:软件实体应该扩展开放.修改封闭.实现:合理划分构件,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里:一种可变性不应当与另一个可变性混合在一起. DIP(Dependency Inversion Principle),依赖倒置原则:摆脱面向过程编程思想中高层模块依赖于低层实现,抽象依赖于具体细节.OOP中要做到的是,高层模块不依赖于低层模块实现,二者都依赖于抽象:抽象不依赖于具体实现细节,细节依赖于抽象.实现:应…
稳定的框架来源于好的设计,好的设计才能出好的作品,掌握面向对象基本原则才会使我们的设计灵活.合理.不僵化,今天就来谈一谈我们.net 面向对象设计的基本原则. 对于一个没有任何设计经验的开发者来说,如果不假思索和探究式的去设计系统软件的框架,势必会导致系统代码出现这样或者那样的问题,比如:代码复杂和重复,不能剥离出独立的复用组件,系统不稳定等.通过灵活的设计原则,加上一定的设计模式,封装变化,降低耦合,实现软件的复用和扩展,这正是设计原则的最终意义. 我们都知道面向对象的三大要素是封装.继承和多…
20151218mark 延伸扩展: -设计模式在很多语言PHP.JAVA.C#.C++.JS等都有各自的使用,但原理是相同的,比如JS常用的Javascript设计模式 -详解设计模式六大原则 设计模式(面向对象)有六大原则: 开闭原则(Open Closed Principle,OCP)里氏代换原则(Liskov Substitution Principle,LSP)依赖倒转原则(Dependency Inversion Principle,DIP)接口隔离原则(Interface Segr…
文章转载自:http://blog.csdn.net/anders_zhuo/article/details/8949566 设计模式遵循的一般原则: 1.开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展.这是面向对象设计(OOD)的基石,也是最重要的原则. 2…
一.单一职责原则(Single Responsibility Principe,SRP)      1.1单一职责原则的定义 1)定义:在软件系统中,一个类只负责一个功能领域中的相应职责. 2)另一种定义方式如下:就一个类而言,应该仅有一个引起它变化的原因. 1.2对可变性的封装原则 一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性越小.而且如果一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作. 类的职责主要包过两方面:数据职责和…
关于软件的设计原则有很多,对于设计原则的掌握.理解.实践及升华是架构师的一项极为之必要的修炼. 记得在12年前第一次阅读<敏捷开发>时,五大基本设计原则就深深地植入到我的脑海中一直影响至今,我也由此获益良多.设计原则当然不止只有五种,最主要的面向对象的设计原则有以下这些:   单一职责原则 (SRP) - 就一个类而言,应该仅有一个引起它变化的原因 开-闭原则 (OCP)- 软件实体(类,模块,函数等)应该是可以扩展的,但是不可以修改 里氏替换原则 (LSP)- 子类必须能够替换它们的基类型…
啊哈哈哈哈,又到星期五了,真开心.回来吃完饭慌着去玩游戏,所以立马过来先完成今天的学习目标. 这个原则的命名好像是以某个人的名字命名的,算了我不去管这个了. 直接说说我学到的东西,这个迪米特法则又可以叫做最少知识原则,意思也就是说一个对象对其它对象尽可能的最少了解. 嗯,这个还比较好理解,不就是进行封装的意思嘛,就好比做用户控件一样,只管实现相应的功能,不要去管别人要放在哪怎么用. 还有一种说法是 只与你有直接关系的人联系,不要和其他不知道的对象打交道.这么做可以提高自身的稳定性. 好快就将设计…
Atitit.软件开发的几大规则,法则,与原则... 1. 设计模式六大原则 2 1.1. 设计模式六大原则(1):单一职责原则 2 1.2. 设计模式六大原则(2):里氏替换原则 2 1.3. 设计模式六大原则(3):依赖倒置原则 2 1.4. 设计模式六大原则(4):接口隔离原则 2 1.5. 设计模式六大原则(5):迪米特法则 2 1.6. 设计模式六大原则(6):开闭原则 2 2. 面向对象的S.O.L.I.D原则 2 2.1. Single Responsibility Princip…
Atitit.软件开发的几大规则,法则,与原则p821.doc 1. 设计模式六大原则2 1.1. 设计模式六大原则(1):单一职责原则2 1.2. 设计模式六大原则(2):里氏替换原则2 1.3. 设计模式六大原则(3):依赖倒置原则2 1.4. 设计模式六大原则(4):接口隔离原则2 1.5. 设计模式六大原则(5):迪米特法则2 1.6. 设计模式六大原则(6):开闭原则2 2. 面向对象的S.O.L.I.D原则2 2.1. Single Responsibility Principle …
设计模式遵循的一般原则: 1.开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展.这是面向对象设计(OOD)的基石,也是最重要的原则. 2.里氏代换原则(Liskov Substitution Principle,常缩写为.LSP) (1).由Barbar Lis…
[亲身经历] 无规矩不成方圆 设计模式 - 搜狗百科 https://baike.sogou.com/v123729.htm?fromTitle=设计模式 为什么要提倡"Design Pattern"呢?根本原因是为了代码复用,增加可维护性.那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(Open ClosedPrinciple,OCP).里氏代换原则(Liskov Substitution Principle,LSP).依赖倒转原则(Dependency Inversion…
一.OOP三大基本特性 OOP 面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法.模型是用来反映现实世界中事物特征的.任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍.更集中.更深刻地描述客体的特征.通过建立模型而达到的抽象是人们对客体认识的深化. 封装 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类操作,…