GoF之里氏代换原则

海思ISP调优实战:从实验室到真实场景的IPC相机图像质量优化指南 本文深入探讨海思ISP调优在IPC相机图像质量优化中的实战应用,从实验室标定到真实场景部署的全链路调优方法。重点解决光照动态范围、色温变化和噪声特性等核心问题,提供AE权重表配置、CCM标定、3DNR时域滤波等关键技术方案,帮助实现从理论到实践的图像质量提升。 阅读详情

    前面的依赖倒转原则有用到里氏代换原则,那我就废话不多少说,直接来看看为什么用里氏代换原则代替继承吧。

里氏代换原则(Liskov Substitution Principle)

定义1:子类型必须能够替换掉它们的父类型。

定义2:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

 

   描述:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别,也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化

例子:在生物学分类上,企鹅是一种鸟,但在编程世界里,企鹅却不能继承鸟。在面向对象设计时,子类拥有父类所有非private的行为和属性,鸟会飞,但企鹅不会飞,所以企鹅不能继承鸟类。

   只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为,正是有里氏代换原则,使得继承复用成为了可能。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展,不然还谈什么扩展开放,修改关闭呢

    一个简单的例子:武打剧中大腕儿一般都有武术替身。为安全考虑以及表演效果,某些时候一般都是由武替(子类)代替武术大腕儿(父类)来完成。

里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。结合上面的例子,它包含以下4层含义:

1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。(武替可以代替大腕儿完成表演,但代替不了做明星)

2.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。(表演效果只能比大腕儿演的好)

3.子类中可以增加自己特有的方法。(武替也有自己的生活)

4.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。(武替比大腕儿更擅长表演武术)

MIKE水动力笔记1_岸线及水深数据之依靠全球数据库资源提取的方法 通过各种数据库资源来获取全球岸线及水深数据,这种方法获取的岸线及水深数据精度偏低,比较适合大尺度范围的水动力研究。 阅读详情

相关推荐

FunASR语音识别服务在Win11上的Docker部署避坑指南:模型配置与热词优化

本文详细介绍了在Windows 11系统上通过Docker部署FunASR语音识别服务的完整流程,包括环境准备、模型配置、热词优化及常见问题解决方案。特别针对Win11环境下的特殊配置和性能调优提供了实用指南,帮助开发者高效搭建高性能语音识别服务。

e3f4g5的博客 222

里氏替换原则

该原则的核心思想就是在程序当中,如果将一个父类对象替换成它的子类对象后,该程序不会发生异常。这也是该原则希望达到的一种理想状态。通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。里氏代换原则是开闭原则的重要方式之一,由于使用父类对象的地方都可以使用子类对象,因此在程序中尽量使用父类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。优点:1、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原

weixin_39327556的博客 1万+

LTspice基础教程-024.参数扫描;step指令用法

step指令用于参数扫描,扫描步骤可以是线性的,对数的或列表。 下面介绍几种常用用法: 绘制一简单电阻分压电路,如下: 线性扫描 语法:.step param <Name> <Start Value> <Stop Value> <Increment> 例:.step param Res 20 100 20 意思是R2的阻值从20变化到100,...

gaoyong_wang的博客 3万+

设计原则之里氏替换原则详解

一、里氏替换原则定义 定义: 如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得所有以T1定义的所有程序P在所有的对象O1都替换成O2时,程序P的行为没有发生任何变化,那么类型T2是类型T1的子类型。 通俗理解就是:子类可以扩展父类的功能,但不能改变父类原有的功能。有以下几个引申含义: 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 子类中可以增加自己特有的方法。 当子类的方法重载父类的方法时,方法的前置条件(方法的输入,入参)要比父类的入参更宽松。 当子类的方法实现父类的方法时(

qq_38925911的博客 6111

AHB2eflash 控制器设计笔记

① SRAM② DRAM③ SSD④ SATA⑤ U 盘⑥ 移动硬盘⑦ 机械磁盘eflash。

weixin_46220498的博客 3077

SystemVerilog学习总结

因为选择的offer是IC验证,以前学的是设计,所以只能再学systemverilog(SV)和UVM了。在学习SV和UVM之前,我认为需要学习以下几个部分:数字电路、c++和verilog。因为IC验证确实有不少别的专业之前没学过数字电路和Verilog,所以还是最好先学习一下。 知识点的总结主要是通过systemverilog验证-测试平台编写指南这本书进行的,所以请看书。通过对这本书的目录进行重点的划分,然后再进行相关知识点的总结。最后,给出自己收集的别的博主IC EDA环境的虚拟机,以及使用虚拟机需

博主毕竟还是人,肯定会有错误,各位看的时候发现错误提出来就好 1万+

软件设计原则 - 里氏代换原则(LSP)

软件设计原则 - 里氏代换原则(LSP)

听海边涛声 708

保姆级教程:用R包ggpicrust2搞定PICRUSt2功能预测,从差异分析到热图PCA一键出图

本文提供了一份详细的ggpicrust2使用指南,帮助用户从零开始完成PICRUSt2功能预测数据的差异分析和可视化。通过安装配置、数据导入、差异分析到高级可视化(如热图和PCA)的全流程讲解,即使是初学者也能快速掌握发表级图表的生成技巧。

weixin_33712987的博客 384

设计原则之【里氏替换原则】

子类对象(object of subtype/derived class)能够替换程序(program)中父类对象(object of base/parent class)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。实现多态的条件: 1.继承:必须要有子类继承父类的继承关系。 2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。 3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类

秃了也弱了 1210

RTK_ROS_导航(1): GNSS里程计

1. RTK 配置 4G CORS + 4G 网络 + 户外有信号,不能实现RTK,就恢复出厂设置 输出信息包含(一般需要三个同时打开): GAPPA:包含位置信息 GPVTG:包含速度信息 GPHDT:包含定向的朝向信息 2. ROS驱动 驱动安装sudo apt install ros-noetic-nmea-navsat-driver 运行,需要修改该功能包的启动端口,会自动解析上面的3个RTK语句信息roslaunch nmea_navsat_driver nmea_serial_d

旋风小短腿 4265

【33】软考软件设计师——算法题(二):贪心法与回溯法深度精讲|第4题进阶满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第33篇,承接第32篇分治法与动态规划,聚焦**下午第4题算法大题进阶核心**,详解贪心法与回溯法两大高频难点算法。全文超4000字深度拆解贪心法核心原理、贪心选择性质、局部最优推全局最优的底层逻辑,厘清贪心算法适用边界与经典误区;深挖回溯法深度优先遍历思想、递归回溯三步流程、可行性剪枝与最优性剪枝两大核心技巧;全覆盖活动选择、零钱兑换、01背包贪心禁区、八皇后、全排列等软考必考经典题型;配套标准化算法框架代码、考场填空模板、剪枝优化实操案例

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 439

【设计原则】里氏代换原则

里氏代换原则含义及实例

liuwanqing233333的博客 652

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1281

设计模式(GOF)之我见(0)——简介

java 设计模式 GOF

FanFF的博客 674

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

gof23种设计模式之总结

  总体来说设计模式分为三大类: 创建型模式:共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式:共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式:共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。    以作用划分:创...

抬头看不到路就低头看书 275

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

对GOF23的理解

GOF23中需要满足的六大原则 1、开闭原则 OCP(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则 LSP(Liskov Subst...

xjion的博客 457

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式

设计模式一、GOF简介二、23种设计模式三、设计模式的六大原则 一、GOF简介 GOF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为《设计模式——可复用面向对象软件的基础》)的四位作者,他们分为是:Elich Gamma、Richard Helm、Ralph Johnson、以及John Vlissides。这四个人常被称为Gang of Four, 即四人组,简称GOF。 他们在书本总结了23个设

qq_43916153的博客 108

设计模式之六大原则和GOF分类方法

@著作权归作者所有:来自优快云博客作者大胡子的艾娃的原创作品,如需转载,请注明出处https://blog.youkuaiyun.com/qq_43148810,否则将追究法律责任。 如有错误的地方欢迎指正,谢谢! 一、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。...

qq_43148810的博客 491

设计模式总概览(内容组成,简略)

文章目录GOF创建型模式(5)结构性模式(7)行为性模式(11) GOF Gang of Four,作者四人组,《Design Patterns: Elements of Reusable Object-Oriented Software》 创建型模式(5) 单例模式 工厂模式(简单工厂,工厂方法) 抽象工厂模式 建造者模式 原型模式 结构性模式(7) 适配器模式 桥接模式 装饰模式 组...

Tiko的博客 256

设计模式学习之路(C++实现)

(本博客旨在个人总结回顾) 1、概括: 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、增强代码可读性、保证代码可靠和易扩展。 2、类型:(GOF 23种设计模式) 2.1 创建型模式: 2.1.1 工厂方法模式(Factory Pattern)(建议了解一下简单工厂模式) 简要说明:定义一个用于创建对象的接口,让...

qq_23903863的博客 2619

设计模式概述以及 23种设计模式的介绍

文章目录设计模式概述(Design pattern):设计模式3大类设计模式的六大原则 设计模式概述(Design pattern): 设计模式:代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编...

云祁QI 4535

软件设计模式详解

由四人组GoF编写。软件设计原则包括开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特原则、合成复用原则。软件设计模式包含5种创建者模式,7种结构性模式,11种行为型模式。创建者模式包括单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式。结构性模式包括代理模式、适配器模式、桥接模式、装饰者模式、外观模式、享元模式、组合模式。行为型模式包括模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式。

m0_71927557的博客 172

设计模式概论

注:设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 起源:在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - El...

qq_44679744的博客 174

23种设计模式Python版 01 设计模式介绍

设计模式 设计模式与语言无关,是一种通用的解决思路。 是早期的先辈们在实践中总结出的精华,是考虑了封装性、复用性、效率性、可修改性、可一致性等各种因素的高度总结思想。 一个良好的设计模式对整个系统的影响极其重要,能大幅度提升可读性,利于团队项目的继承和扩展。 反之,如果设计的不好,不光是维护麻烦,项目交接等工作也变的难以展开。 GOF 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Pat

weixin_43422005的博客 299

什么是设计模式?详解设计模式概念及几大原则!

聚合(Aggregation)关系是关联关系的一种,是强关联关系,是整体和部分之间的关系,是 has-a 的关系;今天我们来讲讲设计模式,在我们学习Java的时候,时常听到单例模式,多例模式,还有使用Spring的时候,默认采用的单例模式,你所听到的“饱汉式”、“饿汉式”,都是对设计模式的形容。设计模式并非是一种技术,而是在项目迭代的过程中,为了实现一些功能,设计了一些解决方案,将这些经验进行总结出来的一个模式体系,这个体系是在被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。

xhrjkj的博客 884

java设计模式 架构 gof23

概述 设计模式本质是面向对象设计原则是实际应用 是对 类封装/内聚,继承,多态 以及 类的关联关系和组合关系的充分理解 设计原则 1**、开闭原则(Open Close Principle)** 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类, 2**、里氏代换原则(Liskov Substitution Principle)** is-a 里氏

qq_42544450的博客 211
上一篇: GoF之依赖倒转原则
下一篇: GoF之组合/聚合复用原则
mayfla
博客等级 码龄14年 312粉丝 191原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值