什么是物体?
对象是理解面向对象技术的关键。环顾四周,你会发现许多真实世界中的例子:你的狗,你的桌子,你的电视机,你的自行车。
现实世界中的对象共有两个特征:它们都有状态和行为。狗有状态(名称,颜色,品种,饥饿)和行为(吠叫,取回,摇尾巴)。自行车也有状态(当前档位,当前踏板节奏,当前速度)和行为(换档,改变踏板节奏,刹车)。识别真实世界对象的状态和行为是开始考虑面向对象编程的一种很好的方法。
现在花一分钟来观察你周围的真实物体。对于你看到的每一个对象,问自己两个问题:“这个对象可能处于什么状态?”和“这个对象可能执行什么行为?”一定要写下你的观察结果。当你这样做的时候,你会注意到现实世界的对象是复杂的;您的桌面灯可能只有两种可能的状态(打开和关闭)和两种可能的行为(打开、关闭、当前音量、当前电台),但是您的桌面收音机可能有其他的状态(打开、关闭、增大音量、减小音量、查找、扫描和调)和行为(打开、关闭、增大音量、减小音量、查找、扫描和调)。您可能还会注意到,一些对象依次也将包含其他对象。这些现实世界的观察结果都可以转化为面向对象编程的世界。
软件对象。
软件对象在概念上与现实世界的对象相似:它们也由状态和相关行为组成。对象在字段(某些编程语言中的变量)中存储其状态,并通过方法(某些编程语言中的函数)公开其行为。方法对对象的内部状态进行操作,并充当对象对对象通信的主要机制。隐藏内部状态并要求所有交互都通过对象的方法来执行,这被称为数据封装——面向对象编程的一个基本原则。
以自行车为例:
建模为软件对象的自行车。
通过属性状态(当前速度、当前踏板节奏和当前齿轮)并提供改变该状态的方法,对象仍然控制外界如何允许使用它。例如,如果自行车只有6个齿轮,换档方法可以拒绝任何小于1或大于6的值。
将代码绑定到单独的软件对象中有很多好处,包括:
模块化:对象的源代码可以独立于其他对象的源代码编写和维护。对象一旦创建,就可以很容易地在系统内部传递。
信息隐藏:通过只与对象的方法交互,其内部实现的细节对外部世界保持隐藏。
代码重用:如果一个对象已经存在(可能是由另一个软件开发人员编写的),你可以在你的程序中使用这个对象。这允许专家实现/测试/调试复杂的、特定于任务的对象,然后您可以信任这些对象在您自己的代码中运行。
可插拔性和调试方便:如果某个特定对象出现问题,您可以简单地将其从应用程序中删除,并插入另一个对象作为其替代品。这类似于在现实世界中解决机械问题。如果螺栓坏了,你要换掉它,而不是整台机器。