前言
现在的高级程序设计语言大致可以分为两种:
面向过程的编程语言
面向对象的编程语言
现在基本上常用的就一种面向过程的语言, 就是 C 语言. 今天我说的重点不是 C 语言, 而是说说面向对象的编程语言. 现在基本上除了 C 语言外的高级主流的程序设计编程语言都属于面向对象的编程语言, 比如我们常讨论的 Java,Python 等都属于面向对象的编程语言.
那么什么是面向对象的编程语言的呢? 来看看官方给出的回答:
官方的大概解释可以概述为: 面向对象是一种对现实世界理解和抽象的方法, 面向对象的三大核心的特征就是: 封装, 继承, 多态的特征, 这三大特征就是面向对象编程的核心支柱, 面向对象编程也是把对象属性和对象方法抽象到一个类中, 提高了开发的效率.
结合我自身体会来说, 其实官方的给的面向对象的编程概念当初我自己去理解也有些懵逼的, 但是写代码和思考多了得出了一种在我认为很通俗的一种解释面向对象的编程的说法, 其实想学会面向对象的编程就得搞清楚什么是面向对象的概念, 这是真的很重要的, 至少在我认为. 虽然这学不到任何的语法知识, 但是这是一种潜在的编程思想, 在我看来, 代码都是靠人的思维能力写出来的, 代码都是死的. 而重要的是解决这个问题的过程.
其实怎么去通俗易懂的去理解呢? 官方的长篇大论真的不是一般人能理解的. 而且官方的长篇大论基本都是抽象难懂的.
我通过写一个例子来帮助理解什么是面向对象的编程.
我们可以想像一下自己是一个设计师, 现在有一个客户让你帮他设计一张屋子的设计图. 现在他的需求大致是这样的, 三房二厅二卫. 其中一卫作为专门洗澡的卫生间, 另外一间专门作为解决日常上厕所, 然后你根据客户的需求趣设计好了图纸, 然后顺利的交付给了客户. 因为你为之前的客户设计图纸客户很满意, 不久那个客户又介绍了一位新的客户给你, 这位新的客户也提出需求让你帮他设计一张属于他的屋子的设计图, 这时这位客户看到他朋友的设计图觉得这样的设计图不错, 他也想要类似这样的一幅设计图, 就要求你把设计图大概的结构和他朋友的设计图一样. 但是他朋友的那张设计图中有些地方他又不是很满意, 他希望在他朋友的设计图的基础上他希望他自己的屋子是五房二厅二卫. 客厅和卫生间还有其中的两间卧室的布局都要一样. 那么作为设计师的你当然为了省时间可以直接 copy 过来. 然后又要求剩下的三间房中有两间房的结构设计要一样. 因为他是把这两间房给他儿子和女儿住的. 剩下的也按照需求设计出来了. 顺利的将设计图交付给客户, 客户很满意. 其实刚刚上面的故事我已经解释了面向对象编程的最重要的三个特征: 封装, 继承, 多态, 具体的解释我解释一下我说的故事.
1. 首先你接到的一个客户需求要求你设计一张设计图. 这张设计图可以将他看成定义的一个类 class
2. 客户提出的两卫中, 一卫的功能作为专门洗澡用的, 另一卫的功能作为日常上厕所用的. 这时我们就按照需求将两个卫生间标识出来, 这也和封装的特性也非常类似. 所谓封装性, 就是将你所需要实现的功能通过定义一个方法或者函数包含起来, 当你需要去调用这个功能就可以直接调用这个方法 / 函数传入指定的参数来实现对应功能, 下面为封装的图解:
封装. PNG
3. 接下来就是之前的客户介绍给你的客户他希望有些结构基本搬照之前那张设计图, 然后你为了减短时间成本, 然后你就 copy 了, 然而这种 copy 可以看成是一种继承性的思想, 其中一些结构都是和之前设计图一样的, 其实所谓的继承就是在你原来的基础上继承了一些之前有人已经设计好的东西, 你只需要通过继承来使用之前有人定义好的东西, 下面也是一张继承的图解:
继承. PNG
4. 所谓面向对象的多态, 其实可以理解为这个卫生间其实可以不单单只是作为洗澡用, 同时也可以当成普通的厕所使用的, 这样说可能你也不太懂, 其实所谓的多态就是建立在继承的基础上, 然后重写与继承类相同方法的功能以此来实现你想要实现的功能, 也就是同样的方法名不同的运行状态. 下面也是一个图解来解释多态:
多态. PNG
5, 然后当把整个房子都装修完, 我们可以通过钥匙来进入这个屋子, 这把钥匙就相当于我们在外部拿到了一个对这个房子的使用权一样, 钥匙也就是我们的构造方法, 我们拿到相应的钥匙就能进入对应的屋子, 这是一对一的关系, 当我们进入到这个房子里面, 房子的房间, 卫生间, 客厅都是属于这个房间的一部分, 而电视机这些家用电器可以看成一个个的属性, 我们可以去使用它, 房间和卫生间可以看成一个个的方法. 我们可以去使用她们. 使用它们的这个过程也可以成为调用方法的过程
微信搜索「FanProgrammer」公众号可以查看更多原创文章, 同样也有福利分享给大家, 一起进步一起交流或者扫下方的二维码关注我, 相信你会知道的更多!!!
qrcode_for_gh_bd46dec2578c_258.jpg
来源: http://www.jianshu.com/p/85dad37ac165