面向对象程序设计的五个基本原则
面向对象程序设计一共有五个基本原则,分别是:
单一职责原则(SRP)、开放-封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、接口隔离原则(ISP)
单一职责原则(SRP):
WHAT:对于一个类而言,应该仅有一个引起它变化的原因。
WHY:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
辅助理解:单细胞生物进化成为多细胞生物的过程中,从前的单细胞生物一个细胞负责很多功能,防御、繁衍、消化、进食等等,而多细胞生物一个细胞只负责一个功能,淋巴细胞负责防御,血红细胞负责运输,精元细胞负责繁衍。软件工程的发展过程与之非常接近,现在我们编程中的类理解成一个细胞,一个类只负责一个功能。
开放-封闭原则(OCP):
WHAT:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。
WHY:开放-封闭原则是面向对象编程的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可拓展、可复用、灵活性好。开发人员应该仅仅对程序中呈现出频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意进行抽象同样不是一个好主意。拒绝不成功的抽象和抽象本身一样重要。
辅助理解:我们国家有一项基本国策是”一国两制“,但是宪法规定我们国家是我们国家是无产阶级领导的社会主义国家,国家的性质不能改变,港澳台的政治制度也不能轻易变动,所以就提出了一国两制的思想,港澳台的政治制度是对中国政治制度这个类的扩展,而不是修改。
里氏替换原则(LSP):
WHAT:子类型必须能够替换掉它们的父类型。
WHY:只有当子类型可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。
辅助理解:建立一个Animal类,拥有吃、喝、跑、叫这些方法,猫继承动物类,有一天我们需要添加马、牛、羊等类,由于它们都继承于动物,所欲除了更改实例化的地方,程序其他处不需要修改。
依赖倒置原则(DIP):
WHAT:A高层模块不应该依赖底层模块,两个都应该依赖抽象。B抽象不应该依赖细节。细节应该依赖抽象。
WHY:依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程话的设计了。
接口隔离原则(ISP):
WHAT:A客户端不应该依赖它不需要的接口。B一个类对另一个类的依赖应该建立在最小的接口上。
WHY:使用多个专门的接口比使用单一的总接口要好。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。
辅助理解:人体身上有很多管道,比如说血管、输尿管、输卵管、汗腺等等,这么多的管道每种只负责一个功能,假如说血管和汗腺重合了,人体就会处大毛病。
面向对象程序设计的五个基本原则相关推荐
- 面向对象设计的五项基本原则
文章目录 1.单一职责原则(SRP: Single Resposibility Principle) 2.开放封闭原则(OCP: Open Closed Principle) 3.里氏替换原则(LSP ...
- PTA(三十)面向对象程序设计 第五章 作业 7-1 复数的比较 (30 point(s))
7-1 复数的比较 (30 point(s)) 题目描述: 建立一个复数类,实数和虚数是其私有数据成员.建立一个>(大于号)的运算符重载,比较两个复数间模的大小. 输入格式: 测试输入包含若干测 ...
- PTA(三十三)面向对象程序设计 第五章 作业 7-4 分钟秒钟的时间相减 (30 point(s))
7-4 分钟秒钟的时间相减 (30 point(s)) 题目描述: 定义一个时间类,分钟和秒钟是其两个私有成员数据.输入一个起始时间和一个结束时间(起始时间早于结束时间),通过运算符重载-(减号),计 ...
- python面向对象程序设计董付国ppt_(董付国)Python 学习笔记---Python面向对象程序设计(1)...
面向对象程序设计 面向对象程序设计(Object Oriented Programming,OOP)主要针对大型软件设计而提出,使得软件设计更加灵活,能够很好地支持代码复用和设计复用,并且使得代码具有 ...
- 第十五章 面向对象程序设计
第十五章 面向对象程序设计 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承和动态绑定. 继承(inheritance): 通过继承联 ...
- 面向对象程序设计上机练习五(类和对象)
面向对象程序设计上机练习五(类和对象) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 定义 ...
- C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术 实验内容:C#面向对象技术 一. 实验目的及要求 二.实验环境 三.实验内容与步骤 3.1.实验内容:测试类,实现多态 3.2.实验步骤 3 ...
- 面向对象的三个基本要素,五个基本原则
文章摘自http://blog.csdn.net/Lee_Xq_/article/details/38994047 在C++ primer及相关书籍中未看到过这个知识点,特此记录一下. 三个基本元素: ...
- Java基础系列五 面向对象程序设计
Java基础系列第一章 初识Java语言 Java基础系列第二章 Java语言基础 Java基础系列第三章 Java流程控制 Java基础系列第四章 Java数组与字符串 Java基础系列第五章 面向 ...
最新文章
- 0x00000000指令引用的内存不能为written_「深入Java虚拟机」Java内存区域与内存溢出...
- 浅谈万进制算法与大数定理的结合(高精度乘除法,阶乘)
- Python二级笔记(3)
- 查了一晚上的资料,累啊。
- 【高校宿舍管理系统】第九章 寝室编号设置和宿舍初始化以及预选设置
- php极速链,php PHP极速链 战群源码系列(全自动采集更新+引流神器无数据库版) WEB(ASP,PHP,...) 261万源代码下载- www.pudn.com...
- 解决Rails找不到Javascript的错误
- vscode开发python使用教程_VSCode 支持Python
- 使用SQL查询多个表的笛卡尔积
- 网易im 服务器消息格式,网易云信快速集成以及消息类型自定义
- 43种名车标志及来历
- PTA 7-3 愿天下有情人都是失散多年的兄妹 (25 分)
- 生物光子学 19节 加州大学戴维斯分校
- CCC3.0 蓝牙OOB配对
- Java学习之JavaFX安装
- C语言_关于文件内容删除的两个方法总结
- 【C语言】题目:输入某年某月某日,判断这一天是这一年的第几天?
- 华为数通HCIA学习笔记之OSI参考模型TCP/IP模型
- Qt添加.qrc文件和设置exe图标和控件图标
- 【2020.06】国税总局发票查验平台验证码最新获取方法
热门文章
- PDF文件如何转换为CAD电气图
- 文字识别中CTC损失的直觉解释
- 记录使用 .Net Reflector 和 Reflexil 修改 Sky Force Reloaded(傲气雄鹰)星章倍率
- keras中的keras.utils.to_categorical方法
- android 串口参数设置,Android-SerialPort
- jsp+ssm计算机毕业设计壹家吃货店网站【附源码】
- 走进神秘的Google X实验室
- Cisco Packet Tracer 无线局域网部署
- home staging_新西兰卖房时候的“房屋整体包装” Home Staging
- 108个网站推广技巧汇总