1.对象和数据结构的区别
(1)数据结构中的对象只是数据,面向对象中的对象包括了数据和行为。
(2)数据结构暴露其数据,没有提供有意义的函数;对象把数据隐藏于抽象之后,暴露操作数据的函数。
(3)数据结构难以添加新的的数据类型,因为需要改动所有函数,面向对象的代码则难以添加新的函数,因为需要修改所有的类。
在任何一个复杂的系统都会同时存在数据结构和对象,我们需要判断的是要添加的是新的数据类型还是新的行为函数。
2.迪米特法则:模块不应了解它所操作对象的内部情形。
类C的方法f只应调用以下对象的方法:
(1)C;
(2)由f创建的对象;
(3)作为参数传递给f的对象;
(4)由C的实体变量持有的对象;
方法不应调用由任何函数返回的对象的方法,换句话说,只和朋友说话,不和陌生人说话。以下就是违反该法则的一段代码:
final String outputDir=ctxt.getOptions().getScratchDir().getAbsolutePath();
当然,迪米特法则的前提是对象,如果是数据结构,没有什么行为,则他们自然会暴露其内部数据结构,迪米特法则也失效了。
如果数据结构只简单的拥有公共变量而没有函数,对象拥有私有变量和公共函数,这个问题就不会混淆。