cleanCode之对象和数据结构

1.对象和数据结构的区别

(1)数据结构中的对象只是数据,面向对象中的对象包括了数据和行为。

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

(3)数据结构难以添加新的的数据类型,因为需要改动所有函数,面向对象的代码则难以添加新的函数,因为需要修改所有的类。

在任何一个复杂的系统都会同时存在数据结构和对象,我们需要判断的是要添加的是新的数据类型还是新的行为函数。

2.迪米特法则:模块不应了解它所操作对象的内部情形。

类C的方法f只应调用以下对象的方法:

(1)C;

(2)由f创建的对象;

(3)作为参数传递给f的对象;

(4)由C的实体变量持有的对象;

方法不应调用由任何函数返回的对象的方法,换句话说,只和朋友说话,不和陌生人说话。以下就是违反该法则的一段代码:

final String outputDir=ctxt.getOptions().getScratchDir().getAbsolutePath();

当然,迪米特法则的前提是对象,如果是数据结构,没有什么行为,则他们自然会暴露其内部数据结构,迪米特法则也失效了。

如果数据结构只简单的拥有公共变量而没有函数,对象拥有私有变量和公共函数,这个问题就不会混淆。

你可能感兴趣的:(cleanCode之对象和数据结构)