《学不会的JAVA,消不了的忧愁》之四——献给那些酷爱计算机编程的人们
发言者:jigenghua
时 间:2001/03/12 23:01:47 来 自:www.javaunion.org
--------------------------------------------------------------------------------
这一回,我不想谈那么多的感概了,我用自己的话来说说java,请大家来做几道判断题,认为对的,你可以不开声,认为错的,可不要忘了指出来。所有这样问题,面向像我一样的菜鸟,大虾也可以看看。
学习一和编程语言,不外乎两种背景:其一,兴趣爱好;其二,工作需要。在学校里,可能还有第三种背景——那就是必修课程。
在我看来,凭兴趣爱好学的东西学得很快,印象也很深,但没有很好地结合实践应用,自己也想不出什么真正有价值的课题去实现它,所以这种知识水平并不是很高。我见过很多这样的朋友,他们对VFP、VC的道理懂得真不少,可一问到一些真正有用的东西,他们回答得总是那么不尽人意。我曾经深爱着C,也会用它编一些简单的小程序,不过,从来就没有用它做过什么工程,所以,在外面应聘的时候,我不敢说我精通C,虽然知道自己的C水平很不错了。不过呢,话又说回来,一旦有了理论水平和基本功,真正遇到难题的时候,往往都能很快解决,所以凭兴趣爱好掌握的东西用途也是挺大的。
相反,因为工作的需要,自己不得不去掌握的东西一旦自己搞懂了,印象会更深刻。由于所有的“知识”都是建立在以“用”的基础上,掌握到了的东西就是活生生用得到的、看得到的东西,所以谈不上什么学不致用的问题。这种知识处处以实践为基础,一分钱一分货,最能解决实际问题,这也就是用工单位为什么那么注重实际工作经验的真正原因:招到有经验的老手,新工作上手很快,工作质量也很高!(我没有什么学历,中专生一个,但我早在95年的时候就开始用Fox真枪实刀地干,半工半读,为工商所、商场、酒店、制造厂、甚至我的校图书馆免费开发了一个又一个的数据库应用软件,这些软件,在我们江西内地,大多数至今还活得挺好的。这么多的软件,为我98年四月份在深圳能找到一份别人看来复杂、而我看来一般般的数据库网络编程工作打下了了不起的基础。来到这里不到半年,一家很大的电子厂,不知是通过什么渠道,连打三次电话给我,叫我过去帮他们搞编程,我想学java,不想再搞VFP了,所以没有答应,虽然对方开的报酬比我现在要高一个档次。)我的经历告诉我,学历并不是很重要的,关键是真正的水平,你能带着你亲手制作出来的CPU芯片到联想去应聘,哪怕你从来没有进过校门,柳传志也会叫你一声干爹。明白了能力的“妹”力以后,我不再刻意追求什么本科学历、研究生学历,我只想好好学点有用的东西,用能力向别人展现自己的风采!(有点吃不到葡萄就不吃葡萄的心态)
至于第三种学习知识的方法——为了修完课程而学,通过这种方式来掌握知识,基本上没有什么好谈的了,一句话,没有什么用啦!或许我讲的太武断太偏激。
我学JAVA,既不完全是凭兴趣爱好,也不是因为工作压得非学不可,只是基于学JAVA的一种潮流,和不久的将来的工作需要,错过了学VC、VB的疯狂时代,也错过了学CGI、ASP的关键岁月,我不能再错过JAVA,我输不起!
正是因为以上的原因,我把JAVA建立在将来的应用上,所以学得不是那么的累,人没有压力学东西往往很慢。一个面向对象的概念,看了一遍又一遍,不但弄不明“面向对象”是何物,连对象是什么东东,都似懂非懂,还以为面向对象是把脸面向着对象(Face to object),就算这样理解,面向着对象干什么?发神经啊?很多很多的书,标题写得不错——“什么叫面向对象”,抑或“面向对象的概念”,可看完之后,还是一头雾水。
最令人恼火的是很多书对类(Class)的定义:具有相同特性的多个对象的一个实体。去他奶奶的,老子连对象还不太懂,就用对象来说明类的定义,还加上一个怪异的词语——实体。这样的定义能说明什么问题?也许是写书的人太聪明了,以为大家的头脑都是抽象的,不会想木头、石头、狼和兔子之类的具体东西。
他完全可以想到这个词:模板,用模板代替实体,就成了类是具有相同特性的多个对象的一个模板,这样呆板的解释,当然不能让初学者对类这个重中之重的概念留下难于忘怀的印象。假如他能像我这样解释,请看下文:
传说中上帝造人是用模子来造的,上帝造人用的模子就是类(Class),当然模子也不是天生的,由上帝根据自己的想象制作,作好了模子以后,造人可就方便啦,几乎不用动脑筋,泥巴往模子里一丢,一个人就出来了,出来了的这个人就有了眼情啦、鼻子啦、耳朵啦,等等,最重要的是,这个人会说话,会唱歌、跳舞......
以上这个例子中,类就是模子,专门用来制作一些有很多共同点的实物,用模子造东西的最大好处就是可以偷懒,一劳永逸,用类来开发软件的妙处也正在于此。模子造出来(对“造出来”这三个字打上着重号,引起读者的注意)的东西有一个响亮的名字:对象或实例,因此,在java里面,我们讲的对象或实例,都是指已经用类制作好了的。用类制作对象这个动作,也有一个各位不太好懂的名字——类的实例化,或叫类的一个实现,好听吗?你们可要记在心里。
不知大家是否注意到,我上面说过,上帝用类造出人这种对象具有很多很多的特性,像眼情有大、眉毛有多长、牙齿有几颗、人长得是否靓仔等等叫做对象的属性(Attribute),一个对象视它简单与复杂,属性可以没有一个,也可以有多个。而人会说话、会打架、会谈恋爱……这些涉及到动作的行为叫做对象的能力(Ability),但在JAVA里面叫做对象的方法(Method),假如你的思想被VC化,你把它暂时理解为函数也不是不可以的。
通常我们讲的“面向对象编程”这种方法,或说这种思想,就是要求大家学习上帝造人这种方式、这种思想,把所有程序分成一个一个的功能块,有些功能块不仅你正在编写的这个程序用得到,将来编写的其它程序也可能用得到,正是你会这么想,把一些通用的功能块抽出来、概括出来,用一个独立的、能被其它类制造时调用的名字命名它。用这种思想去设计程序,叫什么面向对象编程(OOP)。
这一贴,我讲了学知识的三种背景,不同的背景学知识会有不同的方法,从面产生不同的效果。
我也介绍了类、对象、面向对象编程、对象的属性、对象的方法这些基本的概念,大家懂了吗?
下一贴,我将接着介绍类库的概念,还有父类、子类、类与类之间的遗传(继承),并教大家怎样快速用JDK这个工具
开发小程序。虽然有很多的可视化开发工具可以用来开发JAVA软件,但不懂使用JDK工具的JAVA开发人员,跟只懂Linux的X Windows不懂它的shell操作一样,属于低能的操作员。
所有这些贴子,都是出自于个人爱好,连载出来,目的只有一个:为了别人,也为了自己把JAVA学好!
请看下贴《学不会的JAVA,消不了的忧愁》之五——献给那些酷爱计算机编程的人们。