合成/聚合复用原则CARP

程序员日记      2019-08-12
定义在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用这些对象的目的。1.首先使用合成/聚合,合成/聚合则使系统灵活,2.其次才考虑继承,达到复用的目的。3.而使用继承时,要严格遵循里氏代换原则。4.有效地使用继承会有助于对问题的理解,降低复杂度,而滥用继承会增加系统构建、维护时的难度及系统的复杂度。 如果两个类是“Has-a”关系应使用合成、聚合,如果是“Is-a”关系可使用继承。"Is-A"是严格的分类学意义上定义,意思是一个类是另一...
标签:
102 人看过

依赖倒置原则DIP

程序员日记      2019-08-12
定义 抽象不应当依赖于细节;细节应当依赖于抽象。另一种定义 要针对接口编程,不要针对实现编程。针对接口编程的意思就是说,应当使用接口和抽象类进行变量的类型声明、参量的类型声明、方法的返回类型声明,以及数据类型的转换等。不要针对实现编程的意思就是说,不应当使用具体类进行变量的类型声明、参量的类型声明、方法的返回类型声明,以及数据类型的转换等。具体概念1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象(父类不能依赖子类,它们都要依赖于抽象类)2.抽象不能依赖于具体,具体应该...
标签:
91 人看过

迪米特法则LoD

程序员日记      2019-08-12
定义一个对象应该对其他对象有最少的了解。也称为最少知识原则(LeastKnowledgePrinciple,LKP)通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,它的内部是如何复杂都和自己没关系,只需知道它提供的public方法,其他的一概不关心。 广义的迪米特法则1.一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来。2.一个软件实体应当尽可能少的与其他实体发生相互作用。3.每一个软件单位对其他的单位都只有最少的知识,而且局限于那...
标签:
127 人看过

接口隔离原则ISL

程序员日记      2019-08-12
定义客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 另一种定义:一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。注意,在该定义中的接口指的是所定义的方法。例如外面调用某个类的public方法。这个方法对外就是接口。原则分析1.接口隔离原则是指使用多个专门的接口,而不使用单一的总接口。每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。   1)一个...
标签:
123 人看过

里氏替换原则LSP

程序员日记      2019-08-12
定义1.如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。2.所有引用基类的地方必须能透明地使用其子类的对象。里氏替换原则是对类继承的一种约束,有以下两种理解1.不能随便去继承不合适的,有多余方法或者属性的类。2.子类可以扩展父类的功能,但不能改变父类原有的功能。里氏替换原则包含以下几个隐藏含义1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。2.子类中可以增加自己特有的...
标签:
102 人看过

开放封闭原则OCP

程序员日记      2019-08-12
定义Open(Openforextendtion)模块的行为必须是开放的、支持扩展的,而不是僵化的。Close(Closedformodification)在对模块的功能进行扩展时,不应该影响或大规模地影响已有的模块。用一句话概括就是:一个模块在扩展性方面应该是开放的,而在更改性方面应该是封闭的。如何遵守开放-封闭原则实现开放-封闭的核心就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,这样的修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写...
标签:
119 人看过

单一职责原则SRP

程序员日记      2019-08-12
定义就一个类而言,应该仅有一个引起它变化的原因。通俗的说,一个类只负责一项职责。就PHP开发而言,至少要能做到方法上遵循单一职责。单一职责有两个含义: 1.避免相同的职责分散到不同的类中, 2.是避免一个类承担太多职责优点1.可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;2.提高类的可读性,提高系统的可维护性3.变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。4.可以减少类之间的耦合5...
标签:
127 人看过