6.1 数据抽象
隐藏实现并非只是在变量之间放上一个函数层那么简单。类并不简单地用getter和setter将变量推向外间,而是暴露抽象接口,以便用户无需了解数据的实现就能操作数据本体。
如下面是一个阅读器,需要获取当前阅读进度。接口定义如下:
public interface PaperReader
{
double getTotalPages();
double getCurrentPageIndex();
}
而较好的方式是:
public interface PaperReader
{
double getCurrentProgress();
}
添加取值及赋值操作是严肅的事。
6.2 数据、对象的反对称性
过程式代码 (使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数。面向对象代码便于在不改动既有函数的前提下添加新类。
6.3 得墨忒耳律 (The law of Demeter)
类C的方法f只应该调用以下对象的方法:
.类C本身
.由f创建的对象
.作为参数传递给f的对象
.由类C的实体变量持有的对象。
6.4 数据传送对象 (DTO,Data Transfer Objects)
只有公共变量,没有函数的类,称为DTO.