缘起
看过几本讲java的书,感觉并不是太好,入门的书籍个人感觉Thinking in java 和 java in nutshell 还可以,再有就是sun公司提供的tutorial,出学java 时看过一些,感觉还不错。但由于自身太过浮躁,也没看多少就再没看了。现在感觉基础的知识和语法还是相当重要,所以又决心从头仔细看一遍,“从头收拾旧山河”。也许会浪费很多时间和精力,但是如果不这样,在以后就会浪费的更多。因此,尽管现在项目很忙,每天晚上我还是会抽时间看一些,写一些,并贴到csdn上,以便和大家交流一下。(Tutorial 可以从sun公司的网站上免费下载)。
Learning the Java Language
Object-Oriented Programming Concepts
目标:对象为何物,类又为何物
对象和类之间的联系
对象之间如何通过消息沟通
1.对象为何物(What Is an Object)
一个对象是相关的变量和方法的集合。软件中的对象通常都是对我们现实生活中物体的模拟。
软件是什么?设计软件的目的是什么?宽泛的说是对现实世界的反映和修正。自然,设计软件首先要对现实世界有相当的了解,然后将其抽象、设计、实现,完成软件的功能。在其中如何看待现实世界,如何将现实世界和程序代码相对应,是一个关键问题。在这个问题的解决上,人们积累了很多经验,也提出了很多思想,面向对象则是其中重要的一支。面向对象即是将现实世界的任何东西都看成是一个一个的对象,甚至是抽象的概念也被看成为对象(例如事件)。将什么看成对象,对象间如何联系,如何构建对象的继承体系则是需要经验的积累,才可体会到个中三味。(我也在体会ing)
面向对象既然将万事万物都看成对象,在程序中自然有一个特殊的结构体与之对应,那就是正如日中天的 类 。一个对象的属性和行为通过类的属性和方法来体现。JDK Tutorial中将对象定义为变量(属性)和与之相关方法(方法)的集合。我个人觉得这个定义有点过于抽象了。
Tutorial中bicycle的例子很不错,值得仔细品味。从中可以看出如何将现实的对象——bicycle对应为程序中的类,如何抽出属性,和方法,哪些方法是不应有的,一个小小的bicycle也许不难,但换成一个庞大的系统,各个对象相互关联,就不容易抽象出类了。至于类中该有哪些属性和方法那就更困难了。另外这个例子也说明了什么是实例方法(instance method)。而那张图则很好的说明了面向对象的一大特征:数据封装。它带来了两个好处:
(1) 模块化,也告诉了我们在设计类时要减少类和类之间的耦合性,以方便类的重用和移植。
(2) 信息隐藏,随之带来的就是接口的讨论。这个问题已经有很多人讨论过了,我也准备写一篇文章说说的我的心得,在此略过不谈。
2.消息为何物(What Is a Message)
软件中的对象是通过消息彼此交流和相互作用的。
一个单独的对象是没有意义的,一个对象的意义体现在与其他对象的相互作用中,其实我有何尝不是这大千世界中的一个小小的对象呢?我的意义体现在给他人和社会所带来的价值,评定自己的不是我,而是使用我的对象。有点可悲,不过庆幸的是大家都是这样。:)那么一个对象如何与其他对象沟通呢?通过对象之间相互发送消息来告知对方你需要对方的哪些功能。不难看出一个消息应该而且只应由下面三个因素构成:
(1) 接收消息的对象,也就是动作的执行者。
(2) 接收到的消息的名称,也就是要执行的动作。
(3) 执行动作需要的必要条件。
对象之间通过发送消息来相互作用与人类社会中人们的沟通非常相似,而软件开发的目的就是为了模拟现实世界,了解了这点就少点浮躁吧,没有深厚的生活和社会经历想要分析清一个复杂的系统是很难的,至于设计就别想了。(我现在也正在认真的学习tutorial)。淡泊以明志,宁静以志远。
对于tutorial中提到的消息的两个好处,不是很明白,哪位高手能告知呢?