返回介绍

10.1 抽象本质上的一致性

发布于 2024-12-15 23:01:48 字数 2791 浏览 0 评论 0 收藏 0

所有被计算的数据,我们要么看做是顺序存储的值,要么看成是散列存储的“名/值”。但这只是对数据全体的一个认识。针对其中一个局部,例如某几个地址上的连续数据,或某几个“名/值”数据,我们又如何认识它呢?它们在数据概念上又是什么?

在顺序存储中,我们已经为这样的数据找到了一个“看起来合理”的名字:结构类型/结构体。基于这一存储方式的特点,我们对结构体中的“字段名”并不敏感,例如说:

1
2
3
4
5
  // C Syntax
  struct info {
         char first[10];
         int age;
  };

这个结构有 firstage 两个字段名,但忽视这两个字段名,我们以下面的结构体来操作它:

1
2
3
  struct info {
         char data[14];
  };

也没有什么不同。更进一步,它与一个字节数组也没有什么不同 1

1
  byte info[14];

但是散列存储中的 某几个“名/值”数据 就不可能这样消化掉了。例如:

1
2
3
4
5
  // JavaScript Syntax
  info = {
    name: 'Tom',
    age: '32'
  };

其中 nameage 这两个名值对,其内部是有依存关系的——它们分别是 info 的不同性质;也有其外延,即可以作为其他的数据的性质,例如:

1
2
3
4
  aMan = {
    baseinfo: info,
    snsinfo: ...
  };

如我们此前讨论的, nameage (以及更多个)这样的名/值构成了一个数据系列,并满足了我们对数据的内涵与外延的定义,因此它必然可以被理解为数据。而其作为数据,其 何种系列的抽象 ,亦必将为一种数据结构。

这种系列的抽象,我们称为 对象 。对象是一种数据结构,其每一个分量数据为一个 属性 ,属性可以是对象、索引数组、关联数组,或它们基础的、延伸的数据类型之任一。

对象可以看成是关联数组的一个自然延伸。我们知道,关联数组在概念上与“去除存储限制的”索引数组可作类比;与此相似,对象与“去掉存储限制的”结构体也可作类比,图 18 表明了这样的关系。

图 18 “结构”与“对象”在抽象本质上的一致性

可见,数据的最终抽象,究竟是“结构体”还是“对象”,只是缘于我们在“如何找到数据”这个问题上的不同选择 2 而已。除开这一点,二者殊途同归,在其抽象本质上是一样的 3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文