What Is an Object?
Last updated
Last updated
对象是相关状态和行为的软件捆绑。软件对象经常被用作现实世界你能找到的日常物品做建模。这里我们介绍如何用在对象表示中状态和行为,介绍数据封装的概念并解释这样设计软件的好处
对象是理解面向对象(object-oriented
)技术的关键。环顾四周你就能在现实世界中找到很多对象:你的狗,桌子,电视机,自行车等。
现实世界的对象都有两个特征:状态(state
)和行为(behavior
)。狗的状态有:名字,颜色,品种,饥饿。狗的行为有:叫,取东西,摇尾巴。自行车的状态有:当前档位,当前脚踏节奏,当前速度,自行车的行为有:切换档位,改变脚踏节奏,刹车。分辨现实世界对象的状态和行为是思考面向对象编程的好办法。
现在花一点时间观察附近的现实世界的对象。每看到一个对象就问自己两个问题"这个对象有哪些状态"和"这个队形有哪些行为",并记下你的观察。现在你会发现现实世界的对象是复杂的,你的台灯可能有两个状态(开和关)和两种行为(打开和关闭),但是你的收音机有额外的状态(开,关,音量,电台)和以下的行为(打开,关闭,增加音量,减少音量,寻找,扫描和切换电台)。你可能发现有些对象最终会包含其他对象。对现实世界的观察多会被转化为面向对象编程的世界。
软件对象在概念上和现实世界的对象很像:他们都包含状态和行为。对象中保存状态的被称为fields
(有的编程语言称之为variables
)并使用methods
(有些编程语言称之为functions
)来表示行为。使用函数操作对象中的状态是对象之间沟通的基本机制。隐藏内在状态而使用对象的函数进行交互的方式被称为data encapsulation
(数据封装)——这是面向对象的基本原则。我们以自行车为例:
通过状态(当前速度,当前脚踏节奏,当前档位)并提供改变状态的函数,对象控制着外部世界如何使用它。比如,现在自行车一共6档,改变档位函数可以拒绝任何小于1或者大于6的数字。
将代码和单个软件对象进行捆绑会带来以下好处:
模块化:一个对象源代码的编写与修改独立于其他对象的源代码。一旦被创建,对象可以在系统内部方便的传递
信息隐藏:只通过对象的函数进行交互,外部世界并不了解内部的实现细节
代码复用:如果对象已经存在(可能是其他开发者编写的),你可以可以在自己的程序中使用。这就允许专家实现/测试/调试复杂的,特定与任务的对象,你可以信任这些对象并在你的代码运行。
可插拔性和调试简便性:如果某个对象运行出现问题,你可以简单的删除它人后引入另外的可以代替他的对象。这和现实世界中修复机械故障相类似。如果一个插销坏了,你可以替换台而不需要更换整台机器。