众所周知,Java是一门面向对象的语言,那么什么是面向对象?更简单的说,在编程的范畴里,什么是对象?这些问题是我们在学习任何一门面向对象的语言时都会面对的问题,解决了这些问题,更有助于我们学习面向对象语言,在本文中就是更有助于我们学习Java。
在学习面向对象的时候,有一句非常经典的话,对于我们理解对象以及面向对象都非常有帮助,这句话是“施法于自然,万物皆对象”。说的直白一点,就是把你看到的东西都当成对象,你的手机是对象,你的车是对象,甚至连你自己也是一个对象。如果在脑海里构建了这样的概念,那么你就会发现,自然界的组成和程序的组成就一样了。自然界是由我们这些“对象”组成的,程序也一样,也是由对象组成的。自然界中的人通过人的语言来交流,动物通过动物的语言来交流,程序中的对象之间也能相互发送消息和调用。自然界中,人包含头、躯干、四肢等不同的对象,程序中一个对象也可以包含其它不同的对象。自然界中各种各样的人都属于人这一类型,汽车,自行车等都属于车这一类型,程序中也是一样,各种不同的对象也有它具体的类型。自然界中,中国人都能听懂普通话,英国人都能听懂英语,程序中也是一样,同一类型的对象都能接收同样的消息。如果这些概念相同了,我们对于自然界的理解就能应用到程序上,那么对于编程来说,我们的学习成本就降低了,对于程序本身来说,维护成本也就降低了。把这些概念总结出来就是下面几句话:
1、万物皆为对象。
2、程序是对象的集合,它们通过发送消息来告知彼此所要做的。
3、每个对象都有自己的由其它对象所构成的存储。
4、每个对象都拥有其类型。
5、某一特定类型的所有对象都可以接收同样的消息。
这五句话所描述的就是面向对象程序设计的方式和特性,请深入思考并牢记。我们依照这样的方式来编写程序就是面向对象编程。
搞清楚了面向对象之后,我们再回到对象,联想自然界,灯是一种比较普遍和简单的对象,但是它作为一个对象还不够,它应该可以和自然界的其它对象相互作用,拿人来说,人可以操纵灯,比如开灯和关灯,但是开灯和关灯并不是人自己的功能,而是人向灯发出的请求,那么由此我们就可以知道,灯需要提供开灯和关灯两个功能给外界其它对象,再返回到程序中,我们由此就能得出结论:每个对象都有一个接口。在程序中灯向外界提供的开灯和关灯的功能,我们称之为接口,再想象一下,灯通过这两个接口和外界对接,外界也通过这两个接口和灯对接,所以这两个功能就称为接口。
在程序设计中,我们更应该把每一个对象都想象为服务的提供者。每一个对象都提供一种简单的服务,那么我们设计程序就是把每一种简单的服务组合起来,拼凑成一个大的服务,那么在更大的系统中,我们的程序又像是一种简单的服务,这样一来我们的程序的可重用性就提高了。
在自然界中,灯只提供了开灯和关灯两个接口,人只要知道灯提供了这两种服务就可以很好的操纵灯,其实人并不关心灯是怎么亮的,又是怎么灭的。在程序中,对于每个对象来说,只要提供接口给外界就好了,外界其实并不关心怎么实现的,它只要知道这个对象提供了这样的一种服务就行了,这样一来具体的实现被隐藏了,那么对于我们程序来说,安全性就提高了,联想到自然界就是人不能把灯拆了,把灯怎么亮的这个实现方式给修改了,这样的话,对于灯来说,安全性就提高了,它很好的保护了自己的内部实现。
在自然界中,一盏灯,你可以用,我可以用,谁都可以用,那么这个灯就具有复用性。在程序中也是一样,我们已经创造出了一种对象的类型,那么这种类型就可以被重复使用,可以重复的创造出很多对象供我们使用。
在自然界中,灯有很多种,所有的灯都具有的功能就是开和关,把这作为普通的灯,那么有些功能比较多的灯,在这两个功能的基础上,还有一些更高端的功能,把这个概念应用于程序中就是继承,这种更高端功能的灯继承自普通的灯,程序中就是子类继承父类,在父类原有功能的基础上还提供一些其他的功能。这种更高端功能的灯因为太高端了,所以可能开和关的具体实现上有别于普通的灯,这种现象在程序中就是方法的覆盖。
在自然界中,一盏灯接在电源上,那么不管是普通的灯还是更高端功能的灯,都可以接在电源上,这些灯是可以互换的。在程序中父类出现的地方,其它任意子类也都可以出现,这些对象是可以任意互换的。
在自然界中,一盏灯不管功能再多,也只是一盏灯,它也成不了一个人。在程序中,子类只能继承自一个父类,孩子只能有一个爸爸不可能有多个爸爸,这就是单根继承结构。
在自然界中,我们上学的时候都是一个班一个班的。在程序中,一个班就相当于一个容器,我们在班中的每一个人就相当于容器中的元素。
在自然界中,人是有寿命的,都有出生和死亡,如果把一个人和自然界的关联都切断,那么这个人就死了。在程序中,对象也有生命期的概念,如果一个对象和其它的任何对象对没有关联了,那么这个对象就“死了”,那么就可以被回收掉。
在自然界中,人不可能时时刻刻都保持正确,总会有错的时候,出错了我们就要处理,如果不处理错误就会被无限放大,那么就玩不下去了。在程序中,程序处理到某些步骤也有可能出现异常,如果这些异常不处理,那么程序也就运行不下去了,所以程序需要异常处理。
在自然界中,我们不可能一段时间只干一件事,我们基本上是很多事情一起做的,比如边洗澡边听歌。在程序中,并发编程也是一个很重要的概念。 |
|