究竟什么是抽象

封装是一种典型的抽象模式。除了上面提到的函数封装,面向对象中的“类”也是一种封装形式。这里不详谈面向对象,也就不给出例子了。

那么,具体什么是“抽象(abstraction)”?

抽象是人类构建复杂事物的基本方式。这不仅局限于编程,甚至也不仅局限在计算机科学上。当我们使用自然数计数时,实际上就已经是一种抽象。当我们使用计算机编程时,其实也有很多抽象层级在起作用,从硬件层的电子元件到电信号抽象,到操作系统层的硬件到软件的抽象,再到编程语言从机器语言到易于人类理解的高级语言的抽象,这都是抽象。抽象不是什么复杂与深奥的概念,恰恰相反,它是一个非常基本与简单的概念,是抽象组成了我们现代化的世界。

在具体的编码过程中,我们首先将重复的代码段抽象为“函数(Function)”(或者换一种颇有历史意味的说法,过程),然后对于某些执行特定功能的、具有“状态(State)”的、难以抽象为函数的部分,抽象为对象(事实上,对象最重要的地方就在于其具有状态)。

再往上,我们发现许多对象、函数之间的组织形式都是相似的。因此,我们将这些组织对象、函数的惯例归纳为“设计模式(Design Patterns)”。

1994 年,出版了第一本具有广泛影响力的,有关于设计模式的书《设计模式:可复用面向对象软件的基础》,这本书由四位共同作者 Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John 编写,因此后来人们将这四位作者称为“四人帮(Gang of Four, GoF)”,并将这本书中提到的 23 种设计模式称为“GoF 的 23 种设计模式”。

但是,设计模式当然不只是“23 种”。事实上,很多人都将设计模式等同于 GoF 设计模式。然而,作为一种组织代码的“惯例”,设计模式显然是无限的,而不只有这 23 种。因此,我们要清楚 GoF 的 23 种设计模式是经典且应该了解的,但也要知道 GoF 当初提出 23 种设计模式只是为了“抛砖引玉”,引导人们总结出更多“设计模式”,而绝非将设计模式限制在“23 种”。

再往上一些,人们将通用的、不同软件具有的相似的形式称为“软件架构(Software Architecture)”,或者将这个英文单词翻译为另一种形式,即“软件体系结构”,它们指的实际上是一种东西,只不过工业界常常使用前一种翻译,而学术界采用后一种。

很难说在未来,当软件变得更加复杂,是否会出现比架构更高一级的抽象形式,或许它会叫“元架构”?没人知道。但是我们应当明白,抽象是我们构建软件的基本方式,我们应当理解并记住在程序设计的过程中使用抽象。

Last updated