2008年(787)
分类:
2008-09-25 16:11:07
最开始的几个星期我一直在努力理解JAVA语言运做方式和熟悉语法,分别包括JVM虚拟机的运做原理、JAVA程序元素在内存中的分配、JAVA是如何实现跨平台的可移植能力、及其JAVA为何被称为一种健壮的语言、APPLET小程序的概念;许多语言都通有的基本型别、流程控制语句、基本类库函数等等。到后来逐步了解了JAVA语言的一些特性比如JAVA对指针的处理、数组的特性、特有的接口功能(实现了C++的多继承功能,同时摈弃了相应的负面效果)、完善的异常处理机制、以及JAVA对流访问的实现方式、简化的网络编程、显式的线程定义等等。
其中熟悉语法的过程相当漫长,就是到现在我也不能说自己已经充分掌握了其中的全部,因为JAVA提供的标准类库实在是个庞大的集合,以至于常用的类库只占其中的很小比例。
下面我将对不同的学习单元做较具体的说明。
首先应该是对OOP的理解,在充分掌握OOP语言之前只能给出相对笼统的描述,如同管中窥豹只见一斑,OOP(OBJECT ORIENTED PROGRAMMING)面向对象的程序设计,字面上看是把对象作为主体,对象可理解为抽象的物体,这里先谈谈我对过程化程序语言的理解,许多资料描述PPL(PROCEDURAL PROGRAMMING LANGUAGE)用了一个“HOW”
,意思是说PPL描述了如何完成动作,当然完成动作的物体可以称之为OBJECT,所以我理解为PPL语言是在描述一个物体如何去做一个或多个动作执行程序任务,如果需要完成多个动作就需要多段代码,如果不同物体完成相同的任务也要重新写代码,这就造成浪费,
另外,如果PPL中的部分代码需要修改,差不多肯定要影响到后面的部分,这造成维护的困难,由于PPL代码的功能和代码本身是密不可分的,所以隐藏重要代码成为不可能(为什么要藏呢?比如说你写了一个商用类库的第1个版本并且发放出去了,后来你发现前一个版本里有个函数有点不妥当需要修改或者干脆删掉,这时候问题来了,由于你的代码对用户是完全透明的,有的用户已经把你要修改的函数应用到自己的程序中去了,如果你改变了原来的代码,用户的代码也随即无法工作,这就是不使用实现隐藏的灾难,相信你的老板面临由你一手造成的两难境地时不会对你手软~)。
下面该OOP了,它把一切事物都抽象为对象OBJ这和人类的思维方式相同,但是需要一点哲学的思想,所以我一直认为哲学和编程是紧密对应的,OOP优雅地解决了PPL的所有问题,实现了封装和代码重用,这就达到了信息隐藏和效率的提升,同时也降低了维护的成本,然而,我们是不是应该淘汰PPL呢,既然OOP这么优秀我们还有什么理由继续使用PPL呢,在我看来答案是否定的,为什么呢,大家知道C是一种过程化的语言,它是和UNIX一起成长起来的,几十年的时间以来它一直经久不衰,有存在就一定有原因,C被搞硬件编程的人称为高级语言,因为它和汇编语言相比确实要方便许多,如果你知道汇编语言的重要性同时也就明白了C语言的价值,就是对硬件的底层编码,高效率和可读性在C中被结合,C就是一种过程化语言,所以许多的过程化语言都将存在下去,他们有的语法简单易用、有的具备特殊的功能。PPL和OOP注定将共存,没有好与坏的区别,编程语言的发展就象人类的历史一样,以前人们知道通过捕鱼可以得到鱼吃,说不定哪天就出现专门在海里工作的自动捕鱼机,人们要做的只是到机器那去取鱼,而捕鱼的过程被封装在捕鱼机的机器里,这个比喻也许能帮助你理解OOP的概念,但这个不是全面,具体的要靠自己去理解。
下面谈JAVA特有的JVM(JAVA VIRTUAL MACHINE)吧,虚拟机这个概念不好理解,什么叫虚拟机?这和JAVA特有的可移植性有关,既然要可移动就不能和具体的计算机硬件有关,你这样想吧,假如WINDOWS机器是美国人,UNIX机器是法国人,APPLE机器是德国人,并且假设你只会汉语而且你是这三个只懂本国语言人的老板,你需要给他们布置工作,于是你找到他们三个,面对面讲话,他们谁也听不懂啊,所以你们在一起工作没有结果可言。所以你就想了个主意,你为他们每个人都配了个形影不离的翻译,你说话时对着翻译,翻译就把你的话解释给他们三人,OK,问题解决,你应该会问这样做不是要增加成本吗,没错,翻译的过程是要损失效率的,但这使你不至于什么事都做不了。现在你应该能多少了解JVM的概念了吧,就象个翻译。