首页 > 其他分享 >面向对象的五大基本原则

面向对象的五大基本原则

时间:2022-11-18 16:34:34浏览次数:50  
标签:原则 继承 子类 接口 面向对象 抽象 五大 替换

单一职责原则

单一职责原则的核心思想是:一个类最好只做一件事,只有一个引起它变化的原因。 单一职责原则可以看作高内聚,低耦合在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。

开放封闭原则

开放封闭原则的核心思想是:软件实体应该是可扩展且不可修改的。也就是说,对扩展开放,对修改封闭。

  1. 对扩展开放,意味着当有新的需求变化时,可以对现有的代码进行扩展,以适应新的情况。
  2. 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其尝试任何的修改。

实现开放封闭原则的核心思想就是对抽象(如接口,抽象类等)编程,因为抽象相对稳定。让类依赖于固定的抽象,所以修改就是封闭的。而通过面向对象的继承和多态机制,有事可以实现对抽象类的继承,通过重写其方法来改变固有行为,实现新的扩展方法,所以就是开放的。

里氏替换原则

里氏替换原则的核心思想是:子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有当子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。 在父类和子类的具体行为中,必须严格把握继承层次中的关系和特征,将父类替换成子类,程序的行为不会发生任何变化。同时,这一约束反过来则是不成立的,子类可以替换基类,但基类不一定能替换子类。 里式替换原则主要着眼于对抽象和多态简历在继承的基础上,因此只有遵循了里氏替换原则,才能保证继承复用是可靠的。 里氏替换原则的实现方法是面向接口编程:将公共部分抽象为基类接口或抽象类,通过继承的方式,在子类中复写父类的方法,实现新的方式支持同样的职责。 里氏替换原则是关于继承机制的设计原则,若违反了该原则,则必然会违反开放闭合原则。

接口隔离原则

接口隔离原则的核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。 具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。 分离接口的主要方法有两种

  1. 委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。
  2. 多重继承分离,通过接口多继承来实现客户的需求,这是种较好的方式。

依赖倒置原则

依赖倒置原则的核心思想是:程序要依赖于抽象接口,而不是具体的实现。简单的说,就是要对抽象进行编程,而不要对实现进行编程。 在面向过程的开发中,上层依赖于下层,当下层发生重大变化时,上层也要跟着变动,这就会导致模块的复用性降低,大大提升了开发的成本。而面向对象的开发很好的解决了这个问题,通过分离接口与实现,使得类与类,模块与模块之间只依赖于接口,而不依赖于具体的实现类。在一般情况下,抽象的接口的变化概率是很小的,依赖接口而不依赖具体实现,即使实现细节不断改动,只要抽象不变,上层依赖就不需要改动。这大大降低了客户程序与实现细节的耦合度。

标签:原则,继承,子类,接口,面向对象,抽象,五大,替换
From: https://blog.51cto.com/u_15487307/5868815

相关文章

  • 第二章 Kubernetes架构原则和对象设计
    Kubernetes架构 根据如上架构对各组件进行讲解etcdetcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布......
  • 面向对象基础
    一、理解面向对象面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管它内部的情况。而编程就是设置事物能够做什么事。二、类和对象在面向对......
  • 幸运抽奖(面向对象)
    User:packagecom.javasm.bean;/***@Author:Zxb*@Version:1.0*@Date:2022/11/17-16:36*@Since:jdk1.8*@Description:*/publicclassUser{publici......
  • 2022.11.17 Java 面向对象的介绍
    属性+方法=类面向过程与面向对象不可分割,面向对象是由一个个面向过程组成,就像教育部由一个个老师组成。面向对象的本质:以类的方式组织代码,以对象的形式组织(封装)数据;......
  • Java面向对象中 this关键字的详解
    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,......
  • 面向对象
    我不管你怎么实现的,我拿来就能用,比如遥控器,我管你内部怎么搞的,你给我封装好了,我能用就行了,这是就是面向对象的好处在程序中,我们描述一个对象,就是描述这个对象的属性和方法......
  • php面向对象 final关键字
    //final修饰的类无法被子类继承finalclasshuman{}classmanextendshuman{}$m=newman();//Fatalerror:Classmanmaynotinheritfromfinalclass(human)//......
  • MySQL 索引最左前缀原则失效?
    测试索引最左前缀原则,发现缺失带头索引后,索引还是生效的。一、测试创建测试表CREATETABLE`user`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键',......
  • 第11章 面向对象编程:继承(笔记)
    11.1简介为了复用11.2基类和派生类父类与子类11.3基类和派生类之间的关系11.4派生类中的构造函数和析构函数11.5public、protected、private继承权限11.6继承......
  • 第12章 面向对象编程:多态性
    12.1简介程序通用化12.2多态性介绍:多态视频游戏12.3类继承层次中对象之间的关系12.4类型域和switch语句12.5抽象类和纯virtual函数跟一个表格有关12.6实例研究......