什么是object?

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

现实世界中的对象共有两个 Feature:它们都具有状态和行为。狗具有状态(名称,颜色,品种,饥饿)和行为(吠叫,抓捕,摇尾巴)。自行车还具有状态(当前档位,当前踏板节奏,当前速度)和行为(换档,改变踏板节奏,施加制动)。识别现实世界对象的状态和行为是从面向对象编程的角度出发思考的一种好方法。

现在花一分钟时间观察您附近区域中的真实对象。对于您看到的每个对象,问自己两个问题:“该对象可能处于什么状态?”和“此对象可能执行什么行为?”。确保写下您的观察结果。在执行操作时,您会注意到现实世界中对象的复杂性各不相同。您的台式机灯可能只有两种可能的状态(打开和关闭)和两种可能的行为(打开,关闭),但是您的台式收音机可能具有其他状态(打开,关闭,当前音量,当前电台)和行为(打开) ,关闭,增加音量,减少音量,搜索,扫描和调整)。您可能还会注意到,某些对象也将包含其他对象。这些真实的观察结果都转化为面向对象编程的世界。

一个带有填充项 Object 内部圆的圆,周围是灰色的楔形,代表允许访问内部圆的方法。

一个软件对象。

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

考虑一辆自行车,例如:

具有 Double 字节方法和实例变量的对象的图片。

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

通过分配状态(当前速度,当前踏板踏频和当前档位)并提供更改状态的方法,对象可以控制外部环境的使用方式。例如,如果自行车只有 6 档,则更改齿轮的方法可能会拒绝任何小于 1 或大于 6 的值。

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

  • 模块化:可以独立于其他对象的源代码编写和维护对象的源代码。创建对象后,可以轻松地在系统内部传递对象。

  • 信息隐藏:通过仅与对象的方法进行交互,其内部实现的细节仍对外界隐藏。

  • 代码重用:如果某个对象已经存在(也许由其他软件开发人员编写),则可以在程序中使用该对象。这使 maven 可以实现/测试/调试特定于任务的复杂对象,然后您可以信任它们以自己的代码运行。

  • 可插拔性和调试简便性:如果发现某个特定对象有问题,则只需将其从应用程序中删除,然后插入另一个对象作为替换对象即可。这类似于解决现实世界中的机械问题。如果螺栓断裂,请更换,而不是整个机器。