6.1 数据抽象

  • 隐藏实现?

    6.2 数据、对象的反对称性

    过程式代码 (使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数· 面向对象代码 便于在不改动既有函数的前提下添加新类·

反过来讲也说得通:

过程式代码 难以添加新数据结构,因为必须修改所有函数(函数里考虑新增加的数据结构) 面向对象 代码难以添加新函数,因为必须修改所有类(要在每个类添加新函数)

所以,对于面向对象较难的事,对于过程式代码却较容易,反之亦然!

在任何一个复杂系统中,都会有需要添加新数据类型而不是新函数的时候。这时,对象

和面向对象就比较适合。另一方面,也会有想要添加新函数而不是数据类型的时候。在这种

情况下,过程式代码和数据结构更合适。

6.3 得墨忒耳律

方法不应调用由任何函数返回的对象的方法。(那个方法是那个对象所有的)。只跟朋友谈话,不跟陌生人谈话。

  1. // 错误示范
  2. final String outputDir = ctxt.getOptions().getScratchOptions.getAbsolutePath();

对象 :公共函数,私有变量,适用于德墨忒尔律
数据结构 :公共变量,没有函数

6.4 数据传送对象

DTO 只有公共变量,没有函数的类。
与数据库通信,解析套接字传递的消息之类场景。
豆结构 拥有由赋值器和取值器操作的私有变量(save, find等浏览方法)。

image.png