代码整洁之道读书笔记--对象和数据结构

1.得墨忒耳律(LoD)得墨忒耳律(维基百科)认为:模块不应了解它所操作对象内部情形,对象应该隐藏数据,曝露操作,这意味着对象不应通过存取器曝露其内部结构,因为这样更像是曝露而非隐藏其内部结构。可以简单地以下面任一种方式总结: - 每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元; - 每个单元只能和它的朋友交谈:不能和陌生单元交谈; - 只和自己直接的朋友交
摘要由CSDN通过智能技术生成

对象和数据结构

1.过程式代码VS面向对象代码

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

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

2.得墨忒耳律(LoD)

得墨忒耳律(维基百科)认为:模块不应了解它所操作对象内部情形,对象应该隐藏数据,曝露操作,这意味着对象不应通过存取器曝露其内部结构,因为这样更像是曝露而非隐藏其内部结构。可以简单地以下面任一种方式总结:
- 每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元;
- 每个单元只能和它的朋友交谈:不能和陌生单元交谈;
- 只和自己直接的朋友交谈。

很多面向对象程序设计语言用”.”表示对象的域的解析算符,因此得墨忒耳定律可以简单地陈述为“只使用一个.算符”。因此,a.b.Method()违反了此定律,而a.Method()不违反此定律。一个简单例子是,人可以命令一条狗行走(walk),但是不应该直接指挥狗的腿行走,应该由狗去指挥控制它的腿如何行走。

所以下列代码违反了得墨忒耳律,因为它调用了getOptions()返回值的getScratchDir()函数,又调用了getScratchDir()返回值的getAbsolutePath()方法。
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
这类代码常被称为“火车失事”,因为它看起来就是一列火车,这类连串的调用通常被认为是肮脏的风格,上述的代码可以做如下的切分:
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值