面向对象设计的3个基本特征和5个原则
面向对象的基本特征
1.封装
简单来讲: 将现实世界的事物抽象成计算机领域中的对象,对象同时具有属性和行为,这种抽象就是封装.
封装的一个重要特性: 数据隐藏. 对象只对外提供与其它对象交互的必要接口,而将自身的某些属性和实现细节对外隐藏,
通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
这样就在确保正常交互的前提下,保证了安全性.
2.继承
面向对象的一个重要特性是复用性.继承是实现复用性的一个重要手段.
可以在不重复编写以实现的功能的前提下,对功能进行复用和拓展.
继承概念的实现方式有二类:实现继承与接口继承。
*实现继承是指直接使用基类的属性和方法而无需额外编码的能力
*接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力
3.多态
当存在继承关系时,允许将父类对象看成为和它的一个或多个子类对象等同.
这样,可以根据当前赋给父类对象的子对象的具体特性以不同的方式进行运行.
多态的几个前提
* a:要有继承关系。
* b:要有方法重写。
* c:要有父类引用指向子类对象。
多态的好处
* a:提高了代码的维护性(继承保证)
* b:提高了代码的扩展性(由多态保证)
多态的限制
* 不能使用子类的特有属性和行为。
五大基本原则
单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。
开放封闭原则OCP(Open-Close Principle)
一个模块在扩展性方面应该是开放的,而在更改性方面应该是封闭的。
比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码
这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
替换原则(the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。
比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
依赖原则(the Dependency Inversion Principle DIP)
具体依赖抽象,上层依赖下层。
假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口: 这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。
通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。
接口分离原则(the Interface Segregation Principle ISP)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来
面向对象设计的3个基本特征和5个原则相关推荐
- uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则
1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...
- 技术图文:01 面向对象设计原则
01 面向对象设计原则 知识结构: 一碟开胃的小菜 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位.当投递了无数简历后,终于收到了一个单位的面试 ...
- 对面向对象设计原则的总结
正如牛顿三大定律在经典力学中的位置一样,"开-闭"原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的 ...
- iOS 开发之 OOA (面向对象分析) OOD (面向对象设计) OOP (面向对象编程)
OOA OOA 基本概念 OOA 全称 Object-Oriented Analysis 面向对象分析 指的是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA 与结构 ...
- 面向对象设计原则之开闭原则
两截门--一个被水平分割为两部分的门,这样每一部分都可以独立保持开放或封闭 开放-封闭原则(The Open-Closed Principle) 软件实体(类.模块.函数)应该是可以扩展的,但是不可以 ...
- C++面向对象设计原则详解
概述 C++面向对象设计原则主要包括以下几点: 依赖倒置原则 开放封闭原则 单一职责原则 里氏替换原则 接口隔离原则 封装变化点原则 面向接口编程原则 优先使用对象组合,而不是类继承 接下来详细的分析 ...
- activexobject对象不能创建_面向对象设计方法(Object oriented)
1.面向对象 (1)OOA(Object-oriented Analysis) 面向对象分析--事物的分类.命名.描述. (2)OOD(Object-oriented Design) 面向对象设计-- ...
- php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程
面向对象设计是php程序开发中一个很重要的内容块,如果你想成为高级php程序员我们必须知道面向对象设计具体用法与写法. 维护简单 模块化是面向对象编程中的一个特征.实体被表示为类和同一名字空间中具有相 ...
- (软件工程复习核心重点)第十章面向对象设计-第四节:设计人机交互子系统和设计任务管理子系统
文章目录 一:设计人机交互子系统 (1)概念 A:主要内容 B:重要性 (2)设计策略 A:分类用户 B:描述用户 C:设计命令层次 ①:研究现有的人机交互含义和准则 ②:确定初始的命令层次 ③:精化 ...
最新文章
- php中的eq的含义,jquery,_jQuery中的eq(0)到底是什么意思??详情请看下面代码!,jquery - phpStudy...
- Java读书笔记05 类与对象
- 图像检索:再叙ANN Search
- SCII控制字确切含义
- JUNOS Olive GRE Tunnel Configuration
- camel 调用soap_使用Apache Camel通过soap添加WS-Security
- SYSU每周一赛(13.03.16)1003
- 莫名其妙的java.lang.NoClassDefFoundError
- JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper
- Spring框架中XML配置文件注入集合(数组、LIST、MAP、SET)属性
- 笔记11-继承修饰符
- DevExpress 单元格的设置(可设字体、字号、前景色、背景色)
- 这是一款可以批量压缩图片的软件
- js随机生成姓名及数组去重
- react 使用 useEffect 及踩坑
- 众享比特副总裁陈鸿刚:区块链技术在工业互联网中的应用
- 深入分析集群安全机制
- 计算机二级C语言100套题
- java函数式编程-科里化
- 接触角测量仪器及主要功能
热门文章
- 华为服务器扩容内存进不去系统,服务器内存扩容难点
- 数据太大,记事本打不开怎么办?
- missing ‘;‘ before ‘int‘ C语言
- java中的事件都继承自_下列说法中不正确的是()。A.Java语言中的事件都是继承自Java.awt.AW-TEvent类B.AWTEve...
- python pyz_Python pyzgoubi包_程序模块 - PyPI - Python中文网
- 以虎贲T710为核心的高性能AI开发板-BU99开发板
- 洛谷-P1314-聪明的质检员
- 将yolov2-tiny模型部署到前端
- django踩坑记录(4)
- linux与windows双系统windows无法连网问题的解决