
概述
将变量设置为私有( private)有一个理由:我们不想其他人依赖这些变量。我们还想在心血来潮时能自由修改其类型或实现。那么,为什么还是有那么多程序员给对象自动添加赋值器和取值器,将私有变量公之于众、如同它们根本就是公共变量一般呢?
1. 数据抽象
代码清单6-2的漂亮之处在于,你不知道该实现会是在矩形坐标系中还是在极坐标系中。
可能两个都不是!然而,该接口还是明白无误地呈现了一种数据结构。
不过它呈现的还不止是一个数据结构。那些方法固定了一套存取策略。你可以单独读取
某个坐标,但必须通过一次原子操作设定所有坐标。
而代码清单6-1则非常清楚地是在矩形坐标系中实现,并要求我们单个操作那些坐标。这就曝露了实现。实际上,即便变量都是私有,而且我们也通过变量取值器和赋值器使用变
量,其实现仍然曝露了。
隐藏实现并非只是在变量之间放上一个函数层那么简单。隐藏实现关乎抽象!类并不简单地用取值器和赋值器将其变量推向外间,而是曝露抽象接口,以便用户无需了解数据的实
现就能操作数据本体。
我们不愿曝露数据细节,更愿意以抽象形态表述数据。这并不只是用接口和或赋值器、取值器就万事大吉。要以最好的方式呈现某个对象包含的数据,需要做严肃的思考。傻乐着乱加取值器和赋值器,是最坏的选择。
2. 数据、对象的反对称性
对象与数据结构之间的二分原理:
过程式代码(使用数据结构的代码)便于在