上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.5.2 软件中的分层抽象
越是复杂的问题越需要分层抽象,分层是分而治之,抽象是对问题域的合理划分和概念语义的表达。不同层次提供不同的抽象结果,下层对上层隐藏实现细节,通过这种层次结构,我们才有可能应对像网络通信、云计算等超级复杂的问题。
网络通信是互联网最重要的基础设施之一,但同时它又是一个很复杂的过程,你既要知道把数据包传给谁——IP协议,还要知道一旦在这个不可靠的网络上出现状况要怎么办——TCP协议。有这么多的事情需要处理,我们可不可以在一个层次中都实现呢?当然是可以的,但显然不科学。因此,国际标准化组织(ISO)制定了网络通信的七层参考模型(OSI),每一层只处理一件事情,下层为上层提供服务,直到应用层把HTTP、FTP等方便理解和使用的协议暴露给用户,如图1-10所示。
图1-10 网络协议的分层抽象
编程语言的发展史也是一部典型的分层抽象的演化史。
机器能理解的只有机器语言,即各种二进制的01指令。如果我们采用01的输入方式,其编程效率极低。学过数字电路的读者应该还记得用开关实现加减法的实验,反正我当时拨了半天,才勉强把3+4的答案算对。所以之后我们用汇编语言抽象了二进制指令,然而即使是简单的3+4,使用汇编指令实现也比较麻烦,示例如下:
于是我们进一步用C语言抽象了汇编语言,而高级编程语言Java是对类似于C这样低级语言的进一步抽象,这种逐层抽象显著提升了编程效率,如图1-11所示。
图1-11 编程语言的分层抽象