里氏替换原则_代码需要有单一职责,还要开闭,里氏替换又是什么鬼?

目录

单一职责原则:

开闭原则:

里氏替换原则:

7a9127c7a2dc87bd109a41bf54e9154f.png

单一职责原则:

每一个系统中的功能都表示一个职责,这些职责可以映射到模块(类)中,

且尽可能的保证这些类中没有功能上的重复,设计中每次应只关注一个职责,

但也不要把其他职责都抛之脑后,决定某个类来实现某个职责之后,

在从这个类的角度出发,其他的职责都是不相关的,要做到高内聚,

低耦合为最佳状态。

c68691ca29de9e37fe30da3caeafc5ec.png

开闭原则:

一个软件实体应当对扩展开放,对修改关闭。

也就是说在设计一个模块的时候,

应当使这个模块可以在不被修改的前提下被扩展,

并且实现在不修改源代码的情况下改变这个模块的行为。

3182d515d87b1986f4b9a303c64c95c6.png

里氏替换原则:

在软件中如果能够使用基类对象,那么一定能够使用其子类对象。

把基类都替换成他的子类,程序将不会产生任何错误和异常,反过来则不成立,

如果一个软件实体使用的是一个子类的话,那么它不一定能够使用基类。

里氏替换原则是实现开闭原则的重要方式之一,

由于使用基类对象的地方都可以使用子类对象,

因此在程序中尽量使用基类类型来对对象进行定义,

而在运行时在确定其子类类型,用子类对象来替换父类对象。

1f4246f123bcbd43a8bb07d63619d1c3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux bind日志级别,BIND日志相关(一)

对于排除DNS故障来说,日志文件是极其重要的工具,DNS日志可以记录服务器CPU占用时间,查询统计信息以及配置中存在的问题。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。BIND在默认情况下&am…

junit:junit_简而言之,JUnit:测试结构

junit:junit尽管存在有关JUnit测试的书籍和文章,但我仍然经常遇到程序员,他们至多对这个工具及其正确用法都不甚了解。 因此,我想到了编写多部分教程的想法,从我的角度解释了要点。 也许在本微型系列文章中采用的动手方法可能适合…

联想打印机7256显示更换墨盒_惠普打印机涉嫌垄断?只认自家“昂贵”墨盒,成本太高招架不住...

近日,有人爆料称,所在公司购买的惠普打印机使用原装墨盒时可正常打印,更换其他品牌墨盒后也不能正常使用,因此认为惠普公司有行业垄断的嫌疑。从细节来看,该公司购买了惠普同一型号但不同批次的两台打印机,…

linux mcelog 运行,服务器硬件检测(采用mcelog)

mt 内存监控:mcecheck.pyraid监控: check-raidmcelog 是 x86 的 Linux 系统上用来检查硬件错误,特别是内存和CPU错误的工具。安装方式yum install mcelog运行mcelog查看日志方式/var/log/mcelogMCE 0HARDWARE ERROR. This is NOT a software …

动手选择值

由于冠状病毒的存在,可选的东西在空中,一切都变得可选,例如可选的公共聚会,可选的在家工作,可选的旅行等。 我现在是时候谈论处理NULL引用的软件工程中真正的“ 可选 ”了。 托尼霍尔(Tony Hoare&#xf…

python mysql操作_Python的MySQL操作

Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。Python DB-API使用流程:引入API模块。获取与数据库的连接。执行SQL语句和存储过程。关闭数据库连接。一、安装MySQL客户端MySQLdb 是用于Python链接Mysql数据库的接口&#x…

linux下的遥控器软件下载,Linux操作系统下遥控器的配置及使用方法

你有没有想象过能够坐在沙发上,或者躺在床上,拿着遥控器像操作电视一样来操作电脑?可能你已经见到过市场上出现的那种电脑遥控器,不过它们都是基于windows下的。其实,通过一定的配置,在linux平台上&#xf…

wincc历史数据库_WinCC系统的基本功能介绍——自动化工程师必备

写在面前前面讲解了西门子的TIA Portal Wincc, Wincc Classic和Wincc OA (一文带你了解西门子Wincc),介绍了西门子的超大型/分布式SCADA系统Wincc OA(初识西门子Wincc OA——超大型/分布式SCADA),还介绍了Wincc Classic的典型架构和选型指南(WinCC V7.5典型架构及选…

apache.camel_Apache Camel 2.14中的更多指标

apache.camelApache Camel 2.14将于本月晚些时候发布。 由于正在解决某些Apache基础结构问题,因此存在一些问题。 这篇博客文章讨论的是我们添加到此版本中的新功能之一。 感谢Lauri Kimmel捐赠了骆驼指标组件,我们将其与出色的Codehale指标库集成在一起…

获取linux详细信息,Linux 获取网口详细信息

一般来说,研究 ifconfig.c 源代码就可以达到目的了。但是Linux已经提供了比较方便的获取网口信息的方式:[philipcatonbj ~]$ cat /sys/class/net/em1/statistics/rx_bytes3911191274在/sys/class/net/INTERFACE/statistics/ 目录下有所有网口的状态&…

python魔法方法str_8.9.魔法方法 - str()方法

# \_\_str\_\_()方法~~~class Car(object):"""定义了一个车类,可以启动和炸街"""def __init__(self, name, max_speed, vehicle_length):""" __init__() 方法,用来做变量初始化 或 赋值 操作""&…

依赖管理和Maven

Maven伟大而成熟。 几乎所有事物都总有解决方案。 您可能在组织项目上遇到的主要情况是依赖管理。 而不是每个项目都没有自己的依赖关系,您需要一种集中化的方式来继承那些依赖关系。 在这种情况下,您可以在父舞会上声明托管依赖项。 在我的示例中&…

linux ps 代码,Linux ps命令详解(示例代码)

ps命令是Process Status的缩写, 用来列出系统中当前运行的那些进程. ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令ps常见命令参数********* simple selection ******…

python hadoop streaming_Hadoop Streaming 使用及参数设置

1. MapReduce 与 HDFS 简介什么是 Hadoop ?Google 为自己的业务需要提出了编程模型 MapReduce 和分布式文件系统 Google File System,并发布了相关论文(可在 Google Research 的网站上获得:GFS、MapReduce)。Doug Cutting 和 Mike Cafarella …

neo4j set 多个值_Neo4j:收集多个值

neo4j set 多个值在Neo4j的密码查询语言中,我最喜欢的功能之一是COLLECT,它使我们能够将项目分组到一个数组中以备后用。 但是,我注意到人们有时难以确定如何使用COLLECT收集多个项目,并且很难找到一种方法。 考虑以下数据集&am…

linux继续执行上一个命令快捷键,整理了上linux 命令行上常用的 快捷键

整理了下linux 命令行下常用的 快捷键整理了下linux 命令行下常用的 快捷键1.CTRL u 删除正行你敲的命令。例如 : find . -name hoho按下CTRL U 后 正行都会被删除2.若是你只是想删除一个局部的命令的话,那么可以用CTRL w 以空格为分隔符 删除你的命令…

shell字段拼接日期_shell 脚本字符串拼接

在编写shell脚本的时候,难免会使用shell脚本的字符串拼接,不经常使用的话真的会忘记。本人写着一篇的目的也就是记录以下,到时候回过头来不用找的太麻烦。首先变量与变量拼接str1"123"str2"456"echo $str1$str2结果输出1…

Apache Kafka消费者再平衡

消费者重新平衡决定哪个消费者负责某些主题的所有可用分区的哪个子集。 例如,您可能有一个包含20个分区和10个使用者的主题。 在重新平衡结束时,您可能希望每个使用者都从2个分区中读取数据。 如果关闭了这些使用者中的10个,则可能会期望每个…

linux与虚拟化实验室,Linux·学习笔记(2)虚拟化与仿真

Linux支持的虚拟化1.完全虚拟化:为客户操作系统创建一个虚拟机实例,使客户操作系统可以不加修改地运行,虚拟机模拟底层硬件的某些部分,捕捉需要由管理程序(虚拟机监视器)进行仲裁的调用。要求所有的操作系统都是针对统一处理器架构…

证明没有例外

您如何证明虚无的存在? 你应该? 在我编写的某些测试中,尤其是围绕验证或围绕创建空对象的测试中,我真正想写的是这样的: assertThat( ... call some code ... ) .doesntThrow(); 您可以合理地编写如下内容。 您会发现…