面向对象三大基本特性,五大基本原则

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础.


三大特性是:封装,继承,多态  

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。


所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

 

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。


五大基本原则 
单一职责原则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的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。

接口分离原则(the Interface Segregation Principle ISP) 
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来

转载于:https://www.cnblogs.com/hnrainll/archive/2012/09/18/2690846.html

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

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

相关文章

人事薪资管理系统V1.00功能简介(适用于工厂)c#.net+SQL Server2000

1. 统计管理1.1 工厂员工综合统计1.2 按月统计生产订单总金额1.3 按月统计员工工资1.4 按月统计员工计件工资1.5 员工生日排行榜2. 人事管理2.1 增加员工信息2.2 上传或更换员工照片2.3 确认员工基本薪资(含包月,计件,计…

运维工程师主要工作是做什么?

总结两句话: 1、保障业务长期稳定运行(如网站服务器、游戏服务器等)。 2、保障数据安全可靠(如用户名密码、游戏数据、博客文章、交易数据等)。 由这两句话推演运维工程师要学些什么? 一、保障业务长期稳定…

python3.7 安装cx_Freeze

遇到的问题简单描述: 1,直接 pip install cz_freeze 安装失败 2,pip cx_Free-*.*.*.tar.gz 安装失败 解决办法: 1,下载 cx_Freeze-5.1.1-cp37-cp37m-win_amd64.whl (地址:https://www.lfd.uci…

SiteMesh参考

SiteMesh参考 作者:kongxx (kongxxgmail.com)安装 首先从sitemesh下载安装包,这里使用的是2.2.1版本。 创建一个Web应用程序,这里我创建一个名为myapp的Web应用程序; 复制sitemesh-2.2.1.jar文件到{myapp}/WEB-INF/lib目录下&am…

精通Spring Boot——第十一篇:使用自定义配置

2019独角兽企业重金招聘Python工程师标准>>> 今天这篇文章给大家介绍自定义配置的两种方式 第一式: 使用ConfigurationProperties,且看代码 package com.developlee.customconfig.config;import org.springframework.boot.context.properties…

MySQL 高可用架构在业务层面的应用分析

MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid208312443&idx1&snf9a0d03dd9a1cf3b3575c0241291e421&scene22&srcidseLU5tmZumKLzwVBIHzM#rd http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid20831244…

使用Expresso学习.net正则表达式

什么是RE?想必各位大大在做文件查找的时侯都有使用过万用字符”*”,比如说想查找在Windows目录下所有的Word文件时,你可能就会用”*.doc”这样的方式来做查找,因为”*”所代表的是任意的字符。RE所做的就是类似这样的功能,但其功…

数据结构与算法学习笔记之 从0编号的数组

数据结构与算法学习笔记之 从0编号的数组前言数组看似简单,但掌握精髓的却没有多少;他既是编程语言中的数据类型,又是最基础的数据结构;一个小问题:为什么数据要从0开始编号,而不是 从1开始呢?正…

JAVA四种基本排序总结

JAVA四种基本排序,包括冒泡法,插入法,选择法,SHELL排序法.其中选择法是冒泡法的改进,SHELL排序法是 插入法的改进.所以从根本上来说可以归纳为两种不同的排序方法:即:插入法&冒泡法一 插入法:遍历排序集合,每到一个元素时,都要将这个元素与所…

Windows 故障转移+Hyper-V 虚机自动迁移高 可用

Windows 故障转移Hyper-V 虚机自动迁移高 可用 Windows 故障转移Hyper-V 虚机自动迁移高... 1一、系统原理... 31.1 高效率的 VMbus 架构... 31.2 完美支持 Linux 系统... 4二、架构拓朴... 52.1 网络及系统架构拓朴... 52.2 域结构拓朴... 5三、实验资源列表... 63.1 网络设备…

MSSqlServer基础学习01

1.新建登陆用户名,须赋予数据库访问权限方可访问已有的数据库,可以参考如下图片转载于:https://www.cnblogs.com/MyVision/p/11242417.html

js,java时间处理

1.JS获取时间格式为“yyyy-MM-dd HH:mm:ss”的字符串 function getTimeStr(){var myDate new Date();var year myDate.getFullYear(); //获取完整的年份(4位,1970-????)var month myDate.getMonth(); //获取当前月份(0-11,0代表1月)month month > 9 ? month : &quo…

框架和模式

1.什么是模式? 模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。 Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题&#xff0c…

人月神话第三章

对于效率和概念的完整性来说,最好由少数干练的人员来设计和开发, 而对于大型系统, 则需要大量的人手, 以使产品能在时间上满足要求。 文章参照外科手术队伍对10个人的编程队伍进行专业化的角色分工。并为如何运作做出详细说明。…

评上了7月份的Microsoft MVP

昨天晚上觉得困,于是躺到床上去休息了一会儿,没想到醒来以后就发现了一封信,告诉我当选了7月份的MVP(我们的Cat Chen也同样当选了,园子里肯定还有其它朋友)。自从去年9月份登陆博客园以来,写技术…

javascript删除数组,索引出现问题解决办法。

var data [{ isRemove: 0, name: "项目1" },{ isRemove: 1, name: "项目2" },{ isRemove: 1, name: "项目3" },{ isRemove: 0, name: "项目4" },{ isRemove: 0, name: "项目5" },{ isRemove: 0, name: "项目6" }…

知识点 - 学习过程中积累

优化数据库查询访问&#xff1a;使用存储过程&#xff0c;利用连接池打开关闭数据库&#xff1b;操作数据是&#xff0c;尽量避免装箱&#xff1b;数据库中为<NULL>的字段&#xff0c;sql语句中用is null读取&#xff1b;开发复合控件的主要步骤&#xff1a;1&#xff09…

Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?

简介 本文讲述Windows Phone改名事件&#xff0c;以及Windows Phone发展历史和今后发展策略的想法。 事件 今天下班的时候看报纸&#xff0c;有一段新闻关于昨天(2009年10月6日)Mircosoft正式使用Windows Phone这个名字。我去到原先Windows Mobile的主页&#xff0c;已经全部由…

【课后服务】20181022切蛋糕

权当抛砖引玉吧&#xff0c;掌握记搜的方法最重要。 #include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,m,k; bool book[21][21]; int cake[21][21]; int dp[21][21][21][21]; int yt(int x,int y,int w,int h)//返回蛋糕…

我也来记录我的一些开发心得和笔记!

博客园&#xff0c;我来了&#xff01; 转载于:https://www.cnblogs.com/rose2007/archive/2007/07/11/814435.html