什么是对象?

原文: https://docs.oracle.com/javase/tutorial/java/concepts/object.html

对象是理解面向对象技术的关键。现在环顾四周,你会发现许多真实物体的例子:你的狗,你的桌子,你的电视机,你的自行车。

真实世界的物体共有两个特征:它们都具有状态行为。狗有状态(名称,颜色,品种,饥饿)和行为(吠叫,取出,摇尾)。自行车还具有状态(当前档位,当前踏板节奏,当前速度)和行为(改变档位,改变踏板节奏,应用制动器)。识别真实世界对象的状态和行为是开始思考面向对象编程的好方法。

现在花点时间观察您附近区域的真实物体。对于您看到的每个对象,请问自己两个问题:“这个对象可能存在哪些状态?”和“这个对象可以执行什么样的行为?”。一定要记下你的观察结果。和你一样,你会发现现实世界的物体的复杂程度各不相同;您的桌面灯可能只有两种可能的状态(打开和关闭)和两种可能的行为(打开,关闭),但您的桌面电台可能有其他状态(开,关,当前音量,当前电台)和行为(打开) ,关闭,增加音量,减少音量,搜索,扫描和调整)。您可能还会注意到,某些对象反过来也会包含其他对象。这些现实世界的观察都转化为面向对象编程的世界。

A circle with an inner circle filled with items, surrounded by gray wedges representing methods that allow access to the inner circle.

一个软件对象。

软件对象在概念上类似于现实世界的对象:它们也包括状态和相关行为。对象将其状态存储在字段(某些编程语言中的变量)中,并通过方法(某些编程语言中的函数)公开其行为。方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制。隐藏内部状态并要求通过对象的方法执行所有交互被称为*数据封装 _ - 面向对象编程的基本原则。

考虑一下自行车,例如:

A picture of an object, with bibycle methods and instance variables.

自行车被建模为软件对象。

通过归因于状态(当前速度,当前踏板节奏和当前档位)并提供改变该状态的方法,该对象仍然控制外部世界如何被允许使用它。例如,如果自行车仅具有 6 个档位,则换档的方法可以拒绝小于 1 或大于 6 的任何值。

将代码捆绑到单个软件对象中可带来许多好处,包括:

  1. 模块化:可以独立于其他对象的源代码编写和维护对象的源代码。一旦创建,对象就可以轻松地在系统内部传递。
  2. 信息隐藏:通过仅与对象的方法交互,其内部实现的细节仍然隐藏在外部世界之外。
  3. 代码重用:如果对象已存在(可能由其他软件开发人员编写),则可以在程序中使用该对象。这允许专家实现/测试/调试复杂的,特定于任务的对象,然后您可以信任这些对象在您自己的代码中运行。
  4. 可插拔性和调试简便性:如果某个特定对象有问题,您只需将其从应用程序中删除,然后插入另一个对象作为替代对象。这类似于解决现实世界中的机械问题。如果螺栓断裂,则将替换为,而不是整个机器。