面向对象 如何成就大神

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

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

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

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

所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种
能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过
“继承”(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) 
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来

时间: 2024-12-23 04:21:35

面向对象 如何成就大神的相关文章

聊聊成为大神路上的过程(决定伟大水平和一般水平的关键因素,既不是天赋,也不是经验,而是[刻意练习]的程度,要多看别人的代码)

每个人都在成为大神的路上,只不过有的人在走,而有的人在跑. 写在前面的话 在开始正文之前我先跟大家分享一个我身边的例子.我有两个朋友,A和B.B从高一开始打dota,A从高二开始,到高中毕业的时候,A已经是一个 2100分的大神级别的人物,而B只有1200分而已.为什么A打的时间比B短,而水平却比B高呢?是天赋?是智商?似乎都不是. 我对两个人还是比较了解的,虽然同样是打dota,但是A和B之间有着很大差别的.A除了像B一样打dota之外,会看一些成名已久的大神的教学视 频,会看自己打dota的

阅读寒冬前端大神文章有感

最近,在微博上面看到了寒冬大神的一篇文章,甚是认同,所以写下自己觉得有用的地方: 我认为,前端开发主要在两个方面,一部分是”能力”,一部分是”知识”.我个人的观点,能力占百分之八十,知识占百分之二十. 最新出来的Angular.React.ES2015,其实都在知识里面,知识又分成两部分,一部分我把它叫做标准,它是相对而言比较稳定的,很少会出现一个标准被推翻的事情.另一部分则是技术,像jQ.React这些框架,像是MVC.FLUX这些架构的东西,这些东西是由各个公司主导的,变化就非常快,你看Gr

javascript大神修炼记(2)

读者朋友们好,前面我已经大概的了解了Javascript的作用以及一些基本的函数声明与变量声明,今天我们就接着前面的内容讲解,我们就来看一下javscript的逻辑(正序,分支,循环)以及一些简单的运算符 下面我们就来讲一些简单的操作运算符 + 加号:1.用来计算两个数字相加之和,2.用来拼接两个字符串- 减号:1.用来计算两个数字相减之差,2.用在一个数字前面来标识成一个负数* 乘号:用来计算两具数字相乘之积/ 除号:用来计算被除数除以除数后,所得的商% 取余:用来计算被除数除以除数后,所得的

【三层】大神与菜鸟的区别

     经过几天的奋战,终于对三层的概念有了大概的了解,不免有些小激动!因为过了三层即将来临的就是机房收费重构了.从软件工程开始,UML.C#.设计模式.VB.NET,再到现在的三层,都是在为机房收费的重构做准备..俗话说,光说不练假把式!有了一肚子墨水却写不出好文章,那就成了书呆子啦.. 步入正题,三层学完,看看我的收获吧!      一.设计分层的原则 1.逻辑分组. 例如,对用户界面,业务逻辑和数据访问组建应该使用不同的层.例如,A层可以访问B层,但B层不能访问A 层. 2.高内聚.低耦

读专业相关大神博文后有感

转眼间开学就要大四了,回头想想大一刚入学的样子历历在目,还记得大一的时候对大学的一切都充满了新鲜感,也对自己的未来充满幻想和憧憬.现在大四近在眼前,又按照老师的要求看了很多计算机专业的大神写的博文,他们大多都已经进入工作岗位,并且取得了较大的成就.下面说一下我的感想和对计算机的理解与自己的想法. 记得高考结束出成绩的时候,我报考的时候想的就是报离家越远越好的学校,说实话,那个时候的我对大学学什么专业一点概念都没有,作为一个生长在北方的女孩,一心只想出去自己闯闯,也因为自己父母也是大学老师的缘故,

PHP大神的十大优良习惯

概述:通往PHP大神的道路上,应该保持优良的传统和习惯. 1.多阅读手册和源代码 没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数.就在这些函数里面包括许多有用的功能,如果你仔细阅读手册,你会经常发现在以往的项目开发过程中,很多时候你在“重复发明轮子”,而实际上你只需要一个核心函数就可以完成相应的功能.手册是你的朋友.另外,现在有很多使用PHP开发的开源程序.为什么不去学习和借鉴呢?下载一份开源的PHP应用程序的源代码,仔细阅读它吧.也

【推荐】Java工程师如何从普通成为大神值得一读

本文源自 http://www.hollischuang.com/archives/489 一点感悟 java作为一门编程语言,在各类编程语言中作为弄潮儿始终排在前三的位置,这充分肯定了java语言的魅力,在实际项目应用中,我们已经无法脱离javaa(Ps当然你可以选择不使用),但它的高性能,稳定性,扩展性已经深入到每一个java编程工程师的骨髓里,随着时间的推移,我相信更多的项目会加入到java这个大家庭. 然而要想成为一名合格的java工程师并不容易,难于上青天,此话怎讲呢?作为计算机专业的

小白快速变大神,零基础菜鸟应该怎么学编程

最近,在交流群里经常有苦逼小白问怎样学编程,对编程有兴趣但无从下手,这是个庞大到让大神们"无言以对"的命题.在知乎.CSDN等论坛上,许多同行也对此类问题进行了探讨,小编就其中认可度较高的回答进行了整理,以望给纠结的菜鸟们一些帮助,也欢迎大神们补充和拍砖. 1.决定学,要有兴趣并且是真正的下定决心 兴趣和耐心是老生常谈的话题,小编不在此唠叨,只要记住一点,现在程序员工资差异很大,有能力的程序员享受高薪,但只是略懂的伪程序员可能找不到工作,如果想靠敲代码生存生活,就在兴趣的基础上认真学习

图像处理大神

http://blog.csdn.net/baimafujinji?viewmode=contents 如何学好图像处理——从小白到大神? 什么是数字图像处理?历史.以及它所研究的内容. 说起图像处理,你会想到什么?你是否真的了解这个领域所研究的内容.纵向来说,数字图像处理研究的历史相当悠久:横向来说,数字图像处理研究的话题相当广泛. 数字图像处理的历史可以追溯到近百年以前,大约在1920年的时候,图像首次通过海底电缆从英国伦敦传送到美国纽约.图像处理的首次应用是为了改善伦敦和纽约之间海底电缆发