首先,必须声明这篇文章是一个业余程序员的业余之作。作为一个刚刚学习了一个月JAVA一个月Android,计算机C语言二级水平的人,大谈面向对象必然会漏洞百出,所以希望各位读者以科学的眼光去评价而不以科学的眼光去批评。
关于DOTA:
DOTA是魔兽争霸的一款自定义地图,可支持5V5对战游戏,我是从2012年4月份开始玩的这个游戏,很晚辈、很晚辈了,到现在已经有3年有余了。这么写,好像我一直以这个游戏为职业呢,当然不会,嘿嘿,我只是一个学生,没事就才和同学们开开黑的。这个游戏特别好玩,至少是我玩过现在为止最好玩的。我老爸每次看到我玩,都会说:天天坐那,满脸愤怒,嘴里念念有词,眼睛直勾勾的,有什么好玩的。我开始也不知道怎么解释,后来我想:DOTA给了每个人在游戏中重新开始人生的机会,因为无论怎么样,你的英雄都是从1级开始,不断的成长。更有屌丝逆袭,逆天翻盘的快感。这种被称为游戏的代入感吧,我就有深刻的感觉,而且我还是个经常换号的人,哈哈,算不算更高一层的追求重启人生。当然作为一个现在仍然热爱这个款游戏的人,我在这里就不劝诫什么少玩游戏之类的话了,毕竟自己没有做到,就没脸说别人了。在玩了这款游戏之后,经常会遇到地图更新的情况。当自己感觉打得过瘾时候,也会学着保存replay。然后我就开始去思考,为什么一款游戏换个地图,就能换一个完全不同的样式呢,英雄不同了,地形不同了,物品不同了,甚至连游戏的情节都不同了,地图才8M左右,就能够几乎改变一个大型游戏的模样,而一款随随便便的手机斗地主,也得10M啊。另外,一个replay文件才不到1M,竟然能够记录一个长达1个小时的高清大电影似得游戏。我想,这应该怎么解释呢?
关于面向对象
关于面向对象,这是一种计算机语言的编程思想,是相对于面向过程而生的编程思想。C语言面向过程的,C++和JAVA是面向对象的。在学习之前,每当问别人什么事面向过程,什么是面向对象,总会被以一个“如何把大象关进冰箱”的简单的实例给解释,并且被解释的一塌糊涂。我只能说,这种解释不是面向对象思想的解释,而是应用面向对象的思想的一个应用实例的简单展示。很少有人能够通过一个简单的应用实例看本质吧。而现在,学习了JAVA之后,我自己对面向对象的思想是这么理解的:“面向对象思想,是C语言,即面向过程的语言的库函数(一堆子函数的集合)思想的一个深度优化。”OK,说到这里,依旧会有很多人不明白,别着急,听我细细解释。首先,咱们得先说说子函数,为什么要有子函数呢?因为在编一个程序的时候,常常会重复利用同一个功能,比如比较两个数的大小。为了避免重复编写代码,我们就会编一个子函数Compare(int a, int b),把这个功能封装到一个模块,然后用到的时候,直接调用函数Compare(num1, num2),就可以了。函数库呢,就是把一堆这样的子函数,封装到一个集合,比如C语言中的头文件math.h库,里边就会有求绝对值的子函数、求最大值的子函数、求阶乘的子函数…。只要我们在编程的时候,包含这个math.h头文件,就能够直接对这些子函数调用,而不用自己编写代码了。现在你对子函数和函数库应该有了一种印象,很多东西不用知道什么原理,不用自己编写,就能够直接使用,多方便啊!而面向对象思想,就是基于“使编写的代码、函数,能够让别人不明原理,也能够轻松使用”的思想。为什么我说是深度优化呢?因为面向对象的编程过程中,几乎所有的逻辑,都是通过调用已封装好了代码完成的。1. 你需要做的只是去查询完成你实现功能需要调用哪些方法。2. 实在没有,自己先编写好一个类,把方法封装进去,然后再调用。会不会有人想:“自己编写好一个类,把方法封装进去,再调用,岂不是感觉有点绕弯子。”确实有点绕弯子,但是你要知道今天你编好的这个类,可能在某天会被别人使用,所以你把它封装好是有意义的。好了,到此为止,我对面向对象做了自己的一番描述。最后,我想以一种站得高看得远的装逼姿态说一句:面向对象源于面向过程,而终于面向过程。哈哈,不解释!
未完待续...