第6章-对象和数据结构

6.1 数据抽象

于对象而言我们应该隐藏实现细节,保护数据的隐私性;应提供出合理的抽象操作方法、取值器、赋值器。

隐藏实现并非只是在变量之间放上一个函数层那么简单。隐藏实现关乎于抽象!类并不简单地用取值器和赋值器将其变量推向外间,而是曝露露抽象接口,以便用户无需了解数据的实现就能操作数据本体

6.2 数据、对象的反对称性

对象:把数据隐藏于抽象之后,曝露操作数据的函数
数据结构:曝露数据,没有提供有意义的函数
通过对象和数据结构本质对比体现出 数据 与 对象 是对立的:

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

老练的程序员知道,一切都是对象只是一个传说。有时候你真的想要在简单数据结构上做一些过程式的操作

6.3 得墨忒定律

只跟朋友谈话,不与陌生人谈话

模块不应了解它所操作对象的内部情况。对象隐藏数据,曝露操作。这意味着对象不应通过存取器曝露其内部结构,因为这样更像是曝露而非隐藏其内部结构。

通过存取器曝露其内部结构代码例子:ctxt.getOptions().getScratchDir().getAbsolutePath()

如果ctxt、Options、ScratchDir 只是数据结构,没有任何行为,则它们自然会曝露其内部结构,得墨忒耳律也就不适用了

隐藏其内部结构代码例子:ctxt.createScratchFileStream(classFileName)
直接将这一过程职责划分给对象,由对象直接完成这件事。

数据传送对象

最为精炼的数据结构,是一个只有公共变量、没有函数的类。这种数据结构有时被称为数据传送对象,或DTO

对于没有行为(函数)的数据结构对象,所有变量应该公开权限,不设有存取器。

    原文作者:yw_cf67
    原文地址: https://www.jianshu.com/p/633cce6713a6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞