对象和数据结构
将变量设置为私有有一个理由:我们不想让其他人依赖这些变量,为什么还有人给对象添加赋值器和取值器呢
数据抽象
- 隐藏实现关乎抽象,类并不简单的采用取值器和赋值器将其作为变量推向外间,而是暴露接口,以便用户无需了解数据的实现就能操作数据本体
- 以最好的方式呈现某个对象包含的数据,需要做严肃的思考,傻乐着乱加取值器和赋值器,是最坏的选择
数据、对象的反对称性
- 对象把数据隐藏于抽象之后,暴露操作数据的函数
- 数据结构暴露其数据,没有提供有意义的函数
对象与数据结构
- 过程式编码便于在不改动既有数据结构的前提下添加新函数,面向对象代码便于在不改动既有函数的前提下添加新类
- 过程式代码难以添加新的数据结构,因为必须修改所有函数。面向对象代码难以添加新函数,因为必须修改所有类
得墨忒耳律
对象不应该了解他所操作对象的内部结构
类C的方法f只应该调用以下对象的方法
- C的方法
- C的实体变量持有的对象
- 由f所创建的对象
- 作为参数传给f的对象
火车失事事件
不要使用哪种得到一个对象接着又得到另外一个对象的方法
ctxt.getOptions().getScratchDir().getAbsolutePath();
混杂
- 代码中最好不要混杂,既有过程编码又有面向对象编码
隐藏结构
数据传送对象
最为精炼的数据结构,是一个只有公共变量,没有函数的类,这种结构有时被称为数据传送对象
bean类看起来oo舒服些,但是没有任何好处
总结
- 对象暴露行为,隐藏数据。便于添加新对象类型和无需修改行为,同时也难以在既有的对象中添加新行为。
- 数据结构暴露数据,没有明显的行为