如果你以前从未使用过面向对象的编程语言,那么在开始编写代码之前就需要理解几个基础概念。本章向你介绍对象、类、继承、接口和包。每段讨论都把重点放在用现实世界的例子阐述这些概念,同时介绍Java编程语言的语法。
2.1 对象是什么
对象是理解面向对象(object-oriented)技术的关键。现在环顾四周,你能发现很多现实世界对象的例子:你的狗、你的桌子、你的电视机和你的自行车等。
现实世界的对象具有两个性质:它们都具有状态(state)和行为(behavior)。例如,狗具有状态(名字、颜色、品种和是否饥饿)和行为(叫、抓东西和摇尾巴)。自行车也具有状态(当前挡位、当前脚踏板步调和当前速度)和行为(换挡、改变脚踏板步调和使用刹车)。认识现实世界中对象的状态和行为,是理解“面向对象编程”这个术语非常好的途径。
现在花点儿时间观察你周围现实世界的对象。对于看到的每个对象,都问自己两个问题:“这个对象可能处于什么状态?”和“这个对象可能执行什么行为?”把你的观察结果写下来。这样,你会注意到现实世界的对象的多样性;你的台灯可能具有两个可能状态(开和关)和两个可能的行为(打开和关闭),但是你的收音机可能具有更多状态(开、关、当前音量和当前频道)和行为(打开、关闭、增加音量、降低音量、搜索、扫描和调谐频道)。接下来,可能你还会注意到一些对象包含其他对象。这些对现实世界的观察都被转化到了面向对象编程的世界中。
软件对象(见图2-1)在概念上类似于现实世界对象:它们也由状态和相关的行为构成。对象把它的状态保存在字段(field)(即一些编程语言中所说的变量)中,并且通过方法(即一些编程语言中所说的函数)表现它的行为。方法操作对象的内部状态,并且作为对象到对象通信的主要机制。隐藏内部状态并且要求所有交互都通过对象的方法来进行,这被称之为数据封装(data encapsulation)——面向对象编程的一项基本原理。
|
|
图2-1 软件对象
考虑一下自行车(见图2-2)。通过标识状态(当前速度、当前脚踏板步调和当前挡位)并且提供改变这些状态的方法,就能够控制外部世界如何使用它。例如,如果自行车只有6个挡位,那么改变挡位的方法就不能接受小于1或者大于6的其他值。
|
|
|
|
|
|
图2-2 作为软件对象的自行车模型
把代码包装到独立的软件对象中提供了很多优势,这些优势包括:
l 模块化——一个对象的源代码可以独立于其他对象的源代码进行编写和维护。一经创建,对象可以很容易地在系统中传递。
l 隐藏信息——通过只和对象的方法进行交互,对象内部的实现细节对外部世界是隐藏的。
l 代码重用——如果对象已经存在(可能由其他软件开发者编写),你可以在自己的程序中使用这个对象。这样可以由专家实现/测试/调试复杂的、任务特定的对象,然后你可以在自己的代码中放心地运行这些对象。
l 可插拔性和容易调试——如果特定对象出现问题,你可以简单地把它从应用程序中删除,然后插入其他对象来替换它。这类似于解决现实世界的机械问题。如果螺栓断了,你就替换它,而不是替换整台机器。






