面向对象七大原则。

雾里看云° 雾里看云°     2022-10-09     641

关键词:

面向对象设计七大原则

 

1. 单一职责原则(Single Responsibility Principle)

每一个类应该专注于做一件事情。

核心:解耦和增强内聚性(高内聚,低耦合)。

描述:类被修改的几率很大,因此应该专注于单一的功能。

如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

简而言之,SRP就是指单个类应该有且仅有单个职能。

2. 里氏替换原则(Liskov Substitution Principle)

超类存在的地方,子类是可以替换的。

四层含义:

(1)子类必须完全实现父类的方法。在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。

(2)子类可以有自己的个性。子类当然可以有自己的行为和外观了,也就是方法和属性

(3)覆盖或实现父类的方法时输入参数可以被放大。即子类可以重载父类的方法,但输入参数应比父类方法中的大,这样在子类代替父类的时候,调用的仍然是父类的方法。即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松。

(4)覆盖或实现父类的方法时输出结果可以被缩小。

      LSP俗语是:“老鼠的儿子会打洞。”,其实就是子类是和父类有相同的行为和状态,是可以完全替换父类的。这也是保护了OCP的开放扩展关闭修改的原则。

3. 依赖倒置原则(Dependence Inversion Principle)

实现尽量依赖抽象,不依赖具体实现。

依赖注入原则的核心思想就是:要依赖于抽象,不要依赖于具体的实现。它的英文缩写是DIP,英文全称是Dependence Inversion Principle。

其实依赖注入原则的意思就是:在应用程序中,所有的类如果使用或依赖于其他的类,则都应该依赖于这些其他类的抽象类,而不是这些其他类的具体实现类。抽象层次应该不依赖于具体的实现细节,这样才能保证系统的可复用性和可维护性。为了实现这一原则,就要求开发人员在编程时要针对接口编程,而不针对实现编程。 

依赖注入解除了对象和对象的依赖关系,需要其他对象,会有外部直接注入,而你自己不需要关心他如何而来。对象符合OCP原则(对外扩展开放,对修改关闭), 容器负责所有关系匹配。在此层,容器便是这个社会的规则,而对象只需要关心自己所完成的一部分。

三种实现方式:

 1、通过构造函数传递依赖对象;2、通过setter方法传递依赖对象 ;3、接口声明实现依赖对象

在Java中的表现:

(1)模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

(2)接口或抽象类不依赖于实现类;

(3)实现类依赖接口或抽象类。

4. 接口隔离原则(Interface Segregation Principle)

应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。

接口隔离原则的定义

第一种定义:客户端不应该依赖它不需用的接口。

第二种定义:一个类对另外一个类的依赖性应当是建立在最小的接口上的。

接口分以下两种:

对象接口(Object Interface)Java中声明的一个类,通过new关键字产生的一个实例,对一个类型事物的描述,也是一种接口。

类接口(Class Interface)通过关键字Interface定义的接口。

分离接口的两种实现方法:

(1)使用委托分离接口。(Separation through Delegation)

就把请求委托给别的接口的实现类来完成需要的职责,就是适配器模式(Adapter)。

(2)使用多重继承分离接口。(Separation through Multiple Inheritance。)

该方法通过实现多个接口来完成需要的职责。

两种方式各有优缺点,通常我们应该先考虑后一个方案,如果涉及到类型转换时则选择前一个方案。

5. 迪米特法则(Law Of Demeter)

又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。

 

在将迪米特法则运用到系统的设计中时,应注意的几点:

① 在类的划分上,应该创建有弱耦合的类;

② 在类的结构设计上,每一个类都应当尽量降低成员的访问权限;

③ 在类的设计上,只要有可能,一个类应当设计成不变类;

④ 在对其他类的引用上,一个对象对其它对象的引用应当降到最低;

⑤ 尽量降低类的访问权限;

⑥ 谨慎使用序列化功能;

优点:

<1>迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

<2>遵循迪米特法则会使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接关联

缺点:

<1>会在系统里造出大量的小方法,散落在系统的各个角落。这些方法仅仅是传递间接的调用,因此与系统的商务逻辑无关,当设计师试图从一张类图看出总体的框架时,这些小的方法会造成迷惑和困扰。

<2>会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。

 

设计模式中的应用:

<1>门面模式(Facade Pattern)

<2>中介模式(Mediator Pattern)

⑦ 不要暴露类成员,而应该提供相应的访问器(属性)

努力成为世界的一员,让自己与世界融合在一起;就像情侣,不可分离,不可分割.不要说世界不需要你,你不努力世界怎么才能发现你.当世界发现了你,你就会成为世界所需要的人.

6. 开闭原则(Open Close Principle)

面向扩展开放,面向修改关闭。

开闭原则的核心思想就是:一个对象对扩展开放,对修改关闭。它的英文缩写是OCP,英文全称是Open for Extension,Closed for Modification。 

其实开闭原则的意思就是:对类的改动是通过增加代码进行的,而不是改动现有的代码。也就是说,软件开发人员一旦写出了可以运行的代码,就不应该去改变它,而是要保证它能一直运行下去,如何才能做到这一点呢?这就需要借助于抽象和多态,即把可能变化的内容抽象出来,从而使抽象的部分是相对稳定的,而具体的实现层则是可以改变和扩展的。 

扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。

修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的

7. 组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP)

尽量使用合成/聚合达到复用,尽量少用继承。原则: 一个类中有另一个类的对象。

术语:

(1)聚合(Aggregation):聚合用来表示“拥有”关系或者整体与部分的关系;

(2)合成(Composition):合成则用来表示一种强得多的“拥有”关系。在一个合成关系里面,部分和整体的生命周期是一样的。

复用的种类:

(1)继承

  ① 优点:

新的实现较为容易,因为基类的大部分功能可以通过继承关系自动进入派生类;

修改或扩展继承而来的实现较为容易。

  ② 缺点:

继承复用破坏包装,因为继承将基类的实现细节暴露给派生类,这种复用也称为白箱复用;

如果基类的实现发生改变,那么派生类的实现也不得不发生改变;

从基类继承而来的实现是静态的,不可能在运行时发生改变,不够灵活。

(2)合成聚合

  ① 优点:

新对象存取成分对象的唯一方法是通过成分对象的接口;

这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的;

这种复用支持包装;

这种复用所需的依赖较少;

每一个新的类可以将焦点集中在一个任务上;

这种复用可以在运行时动态进行,新对象可以使用合成/聚合关系将新的责任委派到合适的对象。

  ② 缺点:

通过这种方式复用建造的系统会有较多的对象需要管理。

在复用时应优先考虑使用合成聚合而不是继承,而判定的判断为以下四个Coad条件:

  ① 派生类是基类的一个特殊种类,而不是基类的一个角色,即要分清"Has-A"和"Is-A"的区别;

  ② 永远不会出现需要将派生类换成另一个类的派生类的情况;

  ③ 派生类具有扩展基类的责任,而不是具有置换或者注销掉基类的责任;

  ④ 只有在分类学角度有意义时,才可以使用继承。

 

 

 

 

 

面向对象设计七大原则

这目录1.单一职责原则(SingleResponsibilityPrinciple)2.里氏替换原则(LiskovSubstitutionPrinciple)3.依赖倒置原则(DependenceInversionPrinciple)4.接口隔离原则(InterfaceSegregationPrinc 查看详情

面向对象七大原则

面向对象的七大原则分别是:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭。 1.开闭原则(Open-ClosedPrinciple,OCP) 定义:软件实体应当对扩展开放,对修改关闭。这句话说得有点专业,... 查看详情

面向对象七大原则。

面向对象设计七大原则 1.单一职责原则(SingleResponsibilityPrinciple)每一个类应该专注于做一件事情。核心:解耦和增强内聚性(高内聚,低耦合)。描述:类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功... 查看详情

面向对象设计的七大原则

...里我们谈了谈为何设计模式,那接下来我们再浅谈一下在面向对象设计中我们常常要遵循的一些原则。这些原则是经过无数的前人总结出来的经验的结晶。仅仅有遵循这些原则。你才有可能涉及出优秀的代码。今天我们要谈的原... 查看详情

面向对象的七大设计原则

面向对象的七大设计原则1.单一职责原则(SingleResponsibilityPrinciple)每一个类应该专注于做一件事情。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职... 查看详情

面向对象七大基本设计原则,今天我们就来谈谈

面向对象的七大基本原则:原则一单一职责原则单一职责原则(SRP:Singleresponsibilityprinciple)又称单一功能原则核心:解耦和增强内聚性(高内聚,低耦合)。原则二:里氏替换原则(LSP:Liskov Substitution Principle)核心:... 查看详情

oop面向对象七大原则

OOP面向对象  七大原则(二)上一篇写到了前四个原则,这一篇继续~~  接口隔离:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。  又是一句大白话~就是说接口尽量的要细化... 查看详情

面向对象设计七大原则

...不能让一个类承担过多的职责。开闭原则:软件实体应该面向扩展开放,面向修改关闭。其实现的核心就是抽象。将相同的代码抽取出来,便于重用,将不同的代码也抽取出来,便于功能的扩展。开闭原则是设计原则的核心原则... 查看详情

面向对象七大原则

1.  开闭原则(Open-ClosedPrinciple,OCP)定义:软件实体应当对扩展开放,对修改关闭。这句话说得有点专业,更通俗一点讲,也就是:软件系统中包含的各种组件,例如模块(Modules)、类(Classes)以及功能(Functions)等等,应... 查看详情

面向对象的七大原则

参考:https://www.cnblogs.com/Smile-123/p/5385663.html1.OCP 全称:“Open-ClosedPrinciple”开放-封闭原则 说明:对扩展开放,对修改关闭。 优点:按照OCP原则设计出来的系统,降低了程序各部分之间的耦合性,其适应性、灵活性... 查看详情

面向对象的七大原则

单一职责原则:一个类不能太大,也不能太小,太大会导致强耦合,低内聚,太小调用会很麻烦。所以类最好做到高内聚低耦合。所以我们要构建稳定的抽象层,灵活的具体层开闭原则:可扩展但是不要修改,也就是当我们需求... 查看详情

零散知识点(面向对象七大设计原则,jdbc--basedao,jsp九大内置对象。四个作用域)

面向对象七大设计原则:1、开闭原则(OCP:Open-ClosedPrinciple)2、里氏替换原则(LSP:LiskovSubstitutionPrinciple)3、单一职责原则(SRP:Singleresponsibilityprinciple)4、接口隔离原则(ISP:InterfaceSegregationPrinciple)5、依赖倒置原则(DIP:DependenceInversi 查看详情

面向对象设计的七大基本原则

#单一职责原则定义:一个类只负责一个功能领域中的相应职责(就一个类而言,应该只有一个引起它变化的原因)是实现高内聚,低耦合的指导方针 #开闭原则定义:一个软件实体应对扩展开放,对修改关闭。即软件实体应... 查看详情

面向对象开发中的七大设计原则和23种设计模式

一、面向对象开发中的七大设计原则  软件开发中最核心的思想就是“高内聚,低耦合”,主要的目的也是为了方便后期的维护和变更。下面的设计原则也是依靠这个核心思想衍生出来的。  1、单一职责原则【SINGLERESPONSIBIL... 查看详情

面向对象七大设计原则

1、开闭原则(OCP:OpenClosedPrinciple)核心:对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。根据开闭原则,在设计一个软件系统模块(类࿰... 查看详情

面向对象设计(ood)七大原则

...章我会不停的维护它,它将会越来越长,但它是关于我在面向对象中的一些学习的思考心得。希望对自己对各位都能实用处。  开篇前,说明一下写这篇文章的原因。原因是由于设计模式。由于设计模式里的各种模式。都... 查看详情

gof的23种java常用设计模式总结03面向对象七大设计原则

...兰特·梅耶(BertrandMeyer)提出,他在1988年的著作《面向对象软件构造》 查看详情

面向对象的七大原则

面向对象七大原则(丢了一个合成复用) 单一原则:  单一原则,只得就是,所有的类,文件,接口...单一,一个文件,一个类,一个文件,只干这一件事遵循单一职责原的优点有:可以降低类的复杂度,一个类只负责一... 查看详情