一个对象是相关的变量和方法的集合。软件中的对象通常都是对我们现实生活中物体的模拟。
软件是什么?设计软件的目的是什么?宽泛的说是对现实世界的反映和修正。自然,设计软件首先要对现实世界有相当的了解,然后将其抽象、设计、实现,完成软件的功能。在其中如何看待现实世界,如何将现实世界和程序代码相对应,是一个关键问题。在这个问题的解决上,人们积累了很多经验,也提出了很多思想,面向对象则是其中重要的一支。面向对象即是将现实世界的任何东西都看成是一个一个的对象,甚至是抽象的概念也被看成为对象(例如事件)。将什么看成对象,对象间如何联系,如何构建对象的继承体系则是需要经验的积累,才可体会到个中三味。(我也在体会ing)
面向对象既然将万事万物都看成对象,在程序中自然有一个特殊的结构体与之对应,那就是正如日中天的 类 。一个对象的属性和行为通过类的属性和方法来体现。JDK Tutorial中将对象定义为变量(属性)和与之相关方法(方法)的集合。我个人觉得这个定义有点过于抽象了。
Tutorial中bicycle的例子很不错,值得仔细品味。从中可以看出如何将现实的对象——bicycle对应为程序中的类,如何抽出属性,和方法,哪些方法是不应有的,一个小小的bicycle也许不难,但换成一个庞大的系统,各个对象相互关联,就不容易抽象出类了。至于类中该有哪些属性和方法那就更困难了。另外这个例子也说明了什么是实例方法(instance method)。而那张图则很好的说明了面向对象的一大特征:数据封装。它带来了两个好处:
(1) 模块化,也告诉了我们在设计类时要减少类和类之间的耦合性,以方便类的重用和移植。
(2) 信息隐藏,随之带来的就是接口的讨论。这个问题已经有很多人讨论过了,我也准备写一篇文章说说的我的心得,在此略过不谈。