.. Kenneth Lee 版权所有 2022
:Authors: Kenneth Lee :Version: 1.0 :Date: 2022-03-17 :Status: Draft
抽象和细节的信息屏障
看这段描述:
下面是软件角度描述的这个行为:
.. code-block::c
a = (int16_t *)4660; a[1] = a[0] + 10;
来,让我们聚焦到这两段描述的信息细节上看问题,它们有什么相似的地方吗?我认为没 有。丢开我们脑子里的那些一一关联的连线,它们表达的信息完全不一样。
只有我们额外补充了整个C语言对机器行为的一一对应,我们才能建立两者的关联。后者是 前者在某种C语言实现基础上对前者的抽象。
但前者包含了后者的所有信息吗?如果不带上那个一一对应关系,前者完全可以放飞自我, 比如变成成这样:
这个发展还能用上面的软件抽象来表达吗?
不能,细节可以完全按自己的逻辑发展,脱离抽象对它的约束。但如果我们的目的在抽象 上,比如我们就是要计算a[1]=a[0]+10的结果,那没有高层抽象,我们就会失去这个目标。
这里我们证明的是:有人认为我们只要丢上所有的细节,“抽象”自然就包含在这个信息里 面了,这其实是一厢情愿。