什么是面向对象?
如果你百科或者wiki一下,倒是能翻出一大堆来。如果你嫌这些答案不够深沉,不够装逼,甚至还可以知乎一下云云。
但是,你有没有想过,学习程序设计是为了什么?
从正式开始接触计算机到现在也已经有多年了,我再也翻不下去一堆堆厚重的书籍和资料,原因在于它们只是为了写更多的文字,却很少能够把一个简单的概念解释清楚。
我很欣赏一个程序员的本质就是单纯,老老实实写写代码本身就是一件很开心的事了(对此,我深信Java让简单主义者开心不起来),而不是像个学术研究者一样,捧着一堆文献来研究,甚至还要把自己的思维装订成册才好。
简单说,我能够最快掌握一门技术,然后写出自己想要实现的东西,这便是目的(当然,也有以钱途为目的的人)。
扯远了,回归主题……
很多人会说面向对象是:
封装
继承
多态
或是balabala……
但是,你真的了解面向对象的本质了吗?请确定你真的了解了,而不是为了学习一门语言而不得不硬着头皮接触面向对象。
为了不让冰冷的技术词汇产生距离感,我用女娲造人这个例子来说明面向对象是个什么东东。
首先,盘古开天辟地……(此处省略2000字)
女娲一个人实在闷得慌(这也难怪,是个人都会寂寞,除了默默忍受寂寞的程序员们 = =#),尼玛就突发奇想,搞出了个造人大计!
ps:如果她知道现在的人是这副德行,尼玛肯定后悔得像买了切糕一般(局外话)。
但是,人是如何造成的呢?再牛逼的女娲也像从前小时候玩橡皮泥的我们一样,搓来搓去没个名堂,最终还是需要个模板,是个人都知道,这个模板就是她自己。
关键点1:面向对象的基本设计原则就是需要一个模板(或称为蓝图),在程序设计语言里,我们把这个模板称为类。
好了,有了一个模板,女娲就可以对着模板来造人了,造出的人也就是一个模板(类)的对象。
我们知道,人有一些基本特征:一个头,两只眼睛,双手双脚。
此外,人还有一些基本行为:吃喝嫖赌抽。
关键点2:此处的基本特征就是一个类的属性,基本行为就是类的方法。
有人问了,为什么不需要皮肤,指甲等属性,或奔跑、磕头等行为?道理很简单,我只需要知道有用信息,如同有主机、显示器,鼠标键盘,可玩游戏我便能明白这是一台电脑。
模板有了,一些基本的构造条件有了,剩下考虑的就是量产了,所谓的量产也就是生产类的对象,造出千千万万个人(真伟大~!)。
其实,人还有个不愿意公开承认的特性,就是爱“犯贱”。甚至以挖苦别人,或者对他人身体造成伤害为乐趣。为了避免一些严重伤害,我们只能把危机生命的心脏等器官放到身体内部了。
关键点3:把基本特征(属性)保护好,防止他人随意践踏,这叫做封装。
当然,随着当事者所处的环境不同,保护措施也不一样,正如同小孩想滑旱冰就需要护膝是一样的道理。在类中,我们要依照自己的经验完善好封装这一概念。
人活在这世上,是不公平的,有些人天生就是高富帅,富二代,官二代,why?因为他们有个牛逼的爹。而还有些人,却生的一副挫样
关键点4:类似与这种行为,我们叫做继承。一个子对象,是具有父类特征和行为的,当然你可以通过各种方式转变。(好好写代码,终成高富帅)
人有了,人造人这种令人难堪的事也发生了。但是却还出现了男人和女人的区别,这叫人如何是好。因为有了男女,不仅让世界变得和谐了,却也……哎,凡事都有两面性嘛。
我们可以说,一个男人是一个人,也可以说一个女人是一个人。但男女不论从某某结构还是××来说都是有所差别的,但基本特征不变。
关键点5:都有了上层的基础概念,而存在具体的细节实现不同,这种行为我们管它叫做多态。
我不得不说,我要写完了,一行代码都没有。对于新手而言,希望看到更多的并不是代码,而是一种思想上的东西,甚至是,不愿意别人全部都给你想透彻,而是能够有所启发。因此,请老鸟越过,新人要喷就喷,要拍就拍,经过那么多厚部头的折磨,我已经蛋定了……