# What Is an Object?

对象是相关状态和行为的软件捆绑。软件对象经常被用作现实世界你能找到的日常物品做建模。这里我们介绍如何用在对象表示中状态和行为，介绍数据封装的概念并解释这样设计软件的好处

## 什么是对象（Object）

对象是理解面向对象（`object-oriented`）技术的关键。环顾四周你就能在现实世界中找到很多对象：你的狗，桌子，电视机，自行车等。

现实世界的对象都有两个特征：状态（`state`）和行为（`behavior`）。狗的状态有：名字，颜色，品种，饥饿。狗的行为有：叫，取东西，摇尾巴。自行车的状态有：当前档位，当前脚踏节奏，当前速度，自行车的行为有：切换档位，改变脚踏节奏，刹车。分辨现实世界对象的状态和行为是思考面向对象编程的好办法。

现在花一点时间观察附近的现实世界的对象。每看到一个对象就问自己两个问题"这个对象有哪些状态"和"这个队形有哪些行为"，并记下你的观察。现在你会发现现实世界的对象是复杂的，你的台灯可能有两个状态（开和关）和两种行为（打开和关闭），但是你的收音机有额外的状态（开，关，音量，电台）和以下的行为（打开，关闭，增加音量，减少音量，寻找，扫描和切换电台）。你可能发现有些对象最终会包含其他对象。对现实世界的观察多会被转化为面向对象编程的世界。

![A software object.](https://docs.oracle.com/javase/tutorial/figures/java/concepts-object.gif)

软件对象在概念上和现实世界的对象很像：他们都包含状态和行为。对象中保存状态的被称为`fields`（有的编程语言称之为`variables`）并使用`methods`（有些编程语言称之为`functions`）来表示行为。使用函数操作对象中的状态是对象之间沟通的基本机制。隐藏内在状态而使用对象的函数进行交互的方式被称为`data encapsulation`（数据封装）——这是面向对象的基本原则。我们以自行车为例：

![A bicycle modeled as a software object.](https://docs.oracle.com/javase/tutorial/figures/java/concepts-bicycleObject.gif)

通过状态（当前速度，当前脚踏节奏，当前档位）并提供改变状态的函数，对象控制着外部世界如何使用它。比如，现在自行车一共6档，改变档位函数可以拒绝任何小于1或者大于6的数字。

将代码和单个软件对象进行捆绑会带来以下好处：

1. 模块化：一个对象源代码的编写与修改独立于其他对象的源代码。一旦被创建，对象可以在系统内部方便的传递
2. 信息隐藏：只通过对象的函数进行交互，外部世界并不了解内部的实现细节
3. 代码复用：如果对象已经存在（可能是其他开发者编写的），你可以可以在自己的程序中使用。这就允许专家实现/测试/调试复杂的，特定与任务的对象，你可以信任这些对象并在你的代码运行。
4. 可插拔性和调试简便性：如果某个对象运行出现问题，你可以简单的删除它人后引入另外的可以代替他的对象。这和现实世界中修复机械故障相类似。如果一个插销坏了，你可以替换台而不需要更换整台机器。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://eric3wade.gitbook.io/java/learning-the-java-language/oop-concepts/what-is-an-object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
