今天分享一篇PM撸代码系列Android之【武侠篇:面向对象基础】
其实我没有骗你们哦,一门编程语言其实内容就是上一篇的5个BOSS,剩下的就是比较高级的编程思想了。学Java最重要的就是面向对象的编程思想,我这里不会像教科书里那样巴拉巴拉,会通过我的特有幽(dou)默(bi)方式跟你讲述这种高级(Duang)思想。
这一篇有2个BOSS,打完它们,你将升到等级5,并获得称号"武侠对象通":
1 面向过程和面向对象
2 类和对象
【1 面向过程和面向对象】
面向对象可以说是另一种看问题的世界观,编程语言可以分为:
1 面向过程编程:程序=算法+数据
2 面向对象编程:程序=对象+消息
AFK:我这么讲,你肯定快要睡着了=_=,放心,之前我也因此受害过,我可舍不得你们跟我一样在课堂上睡觉流口水,哈哈哈。。。
来,进入武侠世界,rocking the world!
以金庸世界为蓝本,我们来讲讲面向过程是啥?举个栗子,武侠世界最开始的时候,已经不可考了,也就是说不知道武功是从哪里开始的,可能是从达摩这个外国人(貌似是印度阿三,待验证。。。)开始的,那达摩之前呢?谁也不知道。。。什么,你不知道达摩是谁?少年,你看琼瑶剧太多了吧!他是少林派的创派祖师,大家都说天下武功源自少林,虽然现在的少林寺已经成了一家跨国企业。。。
(1)武侠世界理解面向过程
扯远了,武功最开始可能就是一些人自行比划、积累的动作,人们练武目的不管是强身健体,还是杀人越货,你学习武功时,就是面向过程的,学完左勾拳,再学右勾拳,然后是螺旋踢,maybe来个托马斯?!
总之,你练武时,是没有章法的,一招学完再学一招,也不管是哪门哪派的,学得乱七八糟的,你自己都不清楚自己学的啥。这就很类似面向过程编程,你实现程序的功能只能是一行代码、一个逻辑叠加,花了很多时间、精力撸了很多代码,可是完全没有逻辑可循。
你跟别人切磋武艺,然后你被痛扁一顿(程序崩溃or结果出错)。你可能在中间一招有问题,然后你发现你的武功套路有问题(发现BUG),你回去修改,发现很困难,因为你改了这一处,很可能引起后续的招数(程序)全部出现逻辑、功能问题。
面向过程的编程方法显然很简单,你只要一层一层往下搭建逻辑即可,不过也容易出问题,万一程序崩溃了,你一般会面临两个问题:
1 你找不到BUG在哪里。。。
2 你找到了BUG,但你不敢改,因为你改了会影响之前和之后的程序逻辑,引起意想不到的问题。
还没形成门派的原始武林也是一样,你东一招、西一招地学了些功夫,很高兴地跑去跟村口的老王争夺跟小芳的交配权,结果你打输了,你也会面临两个问题:
1 你不知道为什么会打输。。。
2 你知道打输的原因是因为第三招没学好,但你也不敢改,因为你改了会影响你第二招和第四招的功夫,结果你只能去村尾跟老张争夺另外一个妹纸了。。。
(2)武侠世界逐渐发展到面向对象了
随着达摩进入了中国,上了嵩山当了祖师,天下武林渐渐开始有了门派。 门派的出现,让混乱的武术市场渐渐有了章法、类别。开始有了一些专门研究某一方向的门派:
1 少林派:长于外家功夫,精于拳脚及无刀刃兵器(棍、杖)
2 武当派:长于内家功夫,精于掌法及呼吸吐纳、养生
3 丐帮:长于外家功夫,精于讨饭和守城(What?丐帮帮主黄蓉陪她的靖哥哥守襄阳几十年,好伐??)
4 星宿派:长于毒功,精于坑蒙拐骗,但也是金庸世界里最民主的门派了(谁打赢了就可以当大师兄,你能找出第二个??)
先人把class翻译成类不是没有道理的,类就是门类嘛,就是武侠世界里的门派咯。一个门类将研究和负责某一方面的武功,往往流传下来的有武林秘籍(类的成员变量)和功夫招式(类的方法)。
【2 类和对象】
(1)武林门派(程序里的类)
一个门派将某一类别的功夫纳入其研究体系中,每一个门派都有自己独特的门派秘籍和遇敌对策,这是成立一个门派所必须的。
而程序世界中就类似武侠世界,每一个类都有自己的成员变量(门派秘籍)和成员方法(遇敌对策),用程序语言举个栗子你就懂了:
定义类 1(武侠版)
门派 丐帮 {
门派秘籍1 降龙十八掌;
门派秘籍2 打狗棒法;
施展方法 遇敌对策() {
遇到外国人用打狗棒法,遇到中国人用降龙十八掌;
}
}
定义类 2(程序版):
class GaiBang {
String MiJi1="打狗棒法";
String MiJi2="降龙十八掌";
void Facing() {
System.out.println(“遇到外国人用”+MiJi1+"遇到中国人用”+MiJi2);
}
}
(2)武林大侠(程序里的对象)
前面已经讲到门派了,门派其实是死的,门派只是一个宽泛的概念,它说明了这个门派的武功秘籍、遇敌对策、立足宗旨、发展方向等东西。但是,体现一个门派牛叉程度的还是这个门派里出来的杰出人物——大侠。换句话说,大侠来自这个门派,大侠代表着这个门派,门派里有再厉害的功夫,也只能靠大侠学成之后,出去跟人打架,才能让别人知晓。
同样的,在程序世界里,类是死的,你这个类里有再牛X的成员变量(武林秘籍)、再牛叉的成员方法(遇敌对策),都只能靠来自于这个类的对象去跟广大观众见面。类和门派一样,自身是不起作用的,必须由对象和大侠来实现类和门派的价值。
举个栗子你就懂了:
门派产生大侠:
丐帮 乔峰;
乔峰出身自丐帮,并学艺成功;
类产生对象:
GaiBang QiaoFeng;
QiaoFeng=new GaiBang();
说明了乔峰出自丐帮,然后乔峰就可以使用丐帮的武功“降龙十八掌”和“打狗棒法”了。到这里,你应该能明白类与对象、门派和大侠的关系了吧^_^。