什么是Object对象?
对象是理解面向对象技术的关键。看看你的四周,你会发现许多现实世界中对象的例子:你的狗,你的桌子,你的电视机,你的自行车。
现实世界中的对象由两大特征:它们都有state 状态和behavior行为。狗有状态(名字,颜色,品种,饥饿与否)以及行为(狂吠,卖萌,摇尾巴)。自行车也有状态(当前挡位,当前踏板节奏,当前速度)以及行为(改变挡位,改变踏板节奏,使用刹车)。辨别现实生活中的事物的状态与行为,是一种很棒的开始思考面向对象编程的方法。
现在花一分钟时间去观察你周围的事物。对你看到的每一件事物,问你自己两个问题:“该事物有可能存在什么样的状态?”以及“该事物可以表现出什么样的行为?”并记录下你的观察结果。当你这么做到时候你会注意到现实生活中的事物复杂多变;你的台灯可能有两中状态(开和关)以及两种行为(开启和关闭),但是你的收音机可能有更多的其他状态(开,关,当前音量,当前频道)以及行为(开启,关闭,增加音量,减小音量,搜索,浏览以及调频)。你可能注意到有些对象,反过来也包含了其他对象。这些现实世界中的观察统统都可以对应到面向对象编程的世界。
编程中的对象.
编程中的对象与现实生活中对象的概念类似:他们都有状态以及相关的行为组成。一个对象将它的状态保存在fields属性(在其他语言中可能是variables)中 ,通过方法method(一些语言称之为函数functions)开放它的行为。
方法可以操纵对象内部的状态并作为为对象与对象之间通信的关键机制。隐藏内部的状态并要求所有的交互通过对象方法的形式表现被称作 数据封装(data encapsulation)–面向对象编程的一个基本原则。
想象一辆自行车:
用编程中的对象描述一个自行车
通过属性状态(当前速度,当前塔板接口,当前挡位)以及提供的方法改变这些状态,对象保持了对外部世界如何使用该对象的控制。例如:如果自行车只有6挡,方法可以拒绝任意一个小于1或者大于6的值。
将代码构件为分别独立的对象可以带来一系列的好处,包括:
- Modularity模块化: 对象的源代码可以独立的编写和管理。已经创建,对象就可以在系统中方便的传递。
- 数据封装:只通过对象的方法交互,对象内部的实现细节对外部保持不可见。
- 代码重用: 如果对象已经存在(可能由其他开发人员编写),你就可以在你的项目中使用。这样就允许专家/大牛来实现,测试调试复杂的针对特殊任务的对象,而你可以在你的项目中直接引用这些可靠的代码。
- 插件化和易调试性: 如果一个特定的对象被证明是有问题的,你可以很轻松的将其移除并且用其他的类似代码来替代。这也跟现实世界中的维修机械故障类似。如果一个螺丝bolt坏了,一直需要换掉即可,而不是替换整个机器。