代码整洁之道

6.2 数据、对象的反对称性

对象把数据隐藏于抽象之后,暴露操作数据的函数。数据结构暴露其数据,没有提供有意义的函数。

对象与数据结构之间的二分原理:

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

反过来讲也说得通:

过程式代码难以添加新数据结构,因为必须修改所有函数。面向对象代码难以添加新函数,因为必须修改所有的类。

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

在任何一个复杂系统中,都会有需要添加新数据类型而不是新函数的时候。这时,对象和面向对象就比较适合。另一方面,也会有想要添加新函数而不是数据类型的时候。在这种情况下,过程式代码和数据结构更合适。

6.3 得墨忒耳定律

模块不应了解它所操作对象的内部情形。类C的方法f只应该调用以下对象的方法:

C

f创建的对象

作为参数传递给f的对象

C的实体变量持有的对象

方法不应调用由任何函数返回的对象的方法:

final String outputDir = ctxy.getOptions().getScatchDir().getAbsolutePath();

注:要避免这样的代码,可能需要对调用初衷进行包装。

final String outputDir = ctxy.getOptions().getScatchDir().getAbsolutePath();

String outFile = outputDir + ”/” + className.replace(‘.’, ’/’) + ”.class”;

FileOutputStream fout = new FileOutputStream(outFile);

BufferedOutputStream bos = new BufferedOutputStream(fout);

ctxy.createScatchFileStream(classFileName);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值