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