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

目录

单一职责原则:

开闭原则:

里氏替换原则:

7a9127c7a2dc87bd109a41bf54e9154f.png

单一职责原则:

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

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

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

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

低耦合为最佳状态。

c68691ca29de9e37fe30da3caeafc5ec.png

开闭原则:

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

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

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

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

3182d515d87b1986f4b9a303c64c95c6.png

里氏替换原则:

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

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

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

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

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

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

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

1f4246f123bcbd43a8bb07d63619d1c3.png

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

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

相关文章

联想打印机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…

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指标库集成在一起…

依赖管理和Maven

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

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

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

Apache Kafka消费者再平衡

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

linux系统ll历史,Linux操作系统原理笔记

在Linux操作系统内核内部,进程是通过一个链表,而且是一个双向链表来管理的。进程描述符:每一个进程都有其描述符,每一个描述符彼此之间都有关联性的。双向链表:一个进程内部可能包含多个线程。上下文切换(Context swtc…

java工程师的终极书单_Java 9 –终极功能列表

java工程师的终极书单这篇文章将针对即将到来的Java 9版本进行更新,新增功能 ( 最新更新:2014年 9月9日 ) OpenJDK开发正在加快速度:2014年3月Java 8发布后,我们预计将进入2年的发布周期。 据报道&#xf…

称之为例外?

尽管这是一个与测试和Wiremock有关的Java示例,但它涉及一个更普遍的问题。 我们正在尝试重试Wiremock的verify方法,该方法可能会在我们要检查的端点被命中之前由测试调用。 在这种情况下,我们想在几秒钟后重试一次直到超时。 有趣的是&#…

c语言字符大于等于怎么打,c语言大于等于怎么打?

c语言大于等于怎么打&#xff1f;C语言‘大于等于符号是“>”&#xff1b;“>”是关系运算符用于比较运算。包括大于(>)、小于()、小于等于(<)和不等于(!)六种。注意要在英文的输入状态下写c代码。知识拓展&#xff1a;C语言运算符号指的是运算符号。C语言中的符号…

用c语言编写的源文件经过编译,若没有产生编译错误,则系统将,用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将(??)...

用C语言有产译错拖拉动工:旋是用一种耕机耕作机(件的机具智慧职教作部)驱。编写编译标准是消商品衡量和品价格价值质的直接费者。文件误则单反卡为相机用的最常存储。能给您提网球的(大力拍上量)是供最在击球时&#xff0c;的手的一使你舒服又能域感最个区。的是下列说法正确&a…

junit:junit_简而言之,JUnit:Hello World

junit:junit对于Java世界中的开发人员而言&#xff0c; JUnit似乎是最受欢迎的测试工具 。 因此&#xff0c;难怪就此主题已经写了一些好书 。 但是&#xff0c;通过以顾问为生&#xff0c;我仍然经常遇到程序员&#xff0c;他们至多对工具及其正确用法都不了解。 因此&#x…

android 多个复选框,Android UI控件之CheckBox(复选框、多选框)

上一篇文章中学习了RadioButton。知道了RadionButton的基本用法&#xff0c;实现起来也是听简单的和RadioButton一样CheckBox也是一个使用的非常多的控件&#xff0c;Android中它的的用法也挺简单的。以一个例子程序为例&#xff1a;同样先看一个常规的实现&#xff1a;布局文件…

android调用虚拟摄像头方法,Android:如何在模拟器中使用网络摄像头?

我通过在AVD Manager中将前置摄像头设置为“ webcam0”将摄像头连接到仿真器。 启动模拟器的相机应用程序时&#xff0c;出现错误CameraService::connect X (pid 702) rejected (invalid cameraId 0).这是Android源代码的相关部分&#xff1a;sp CameraService::connect(const …

神话般的代码

考虑以下代码段&#xff1a; int max 10; int a 0; while (true) {// do a thing that may result in an early return if (a > max) {break;} }throw new RuntimeException("It ran out of attempts");上面有一些WTF。 循环有点不可思议&#xff0c;控制流似乎…

android listview asynctask,Android精通之AsyncTask与ListView讲解

版权声明&#xff1a;未经博主允许不得转载标题图AsyncTask了解AsyncTask异步&#xff0c;需要了解一下异步任务(多线程)&#xff0c;什么是线程&#xff0c;可以这么说线程好比边吃饭边看电视&#xff0c;AsyncTask是为了方便后台线程中操作更新UI&#xff0c;本质为Handler异…

打破了vs你错了

为微服务构建REST API时&#xff0c;需要做出一些关于响应的设计决策。 某些响应显然是微服务周围协议的产物–例如3xx代码之类的东西都与重定向和路由有关。 通常&#xff0c;您将尝试获取正确的2xx代码以取得成功。 如有疑问&#xff0c;将为200&#xff08;确定&#xff09…

android lable标签,android:label说明

文章目录1. 说明android:label 用于app 在切换activity的时候,自动更换左上角的显示2. 代码架构3. String.xml 字符串资源文件My Application主界面 labsecond 界面 lab4. AndroidMainfest.xmlpackage"com.example.myapplication">android:allowBackup"true&…