Skip to content

Abstraction

注意:本文所讨论的Abstraction是广义的,而不仅仅局限于Abstraction (computer science)

What is abstraction?

NOTE: 其实我们每天都在进行着抽象,但是如果问: 什么是抽象?很多人都会陷入"可意会而难言传"的境地,本节就是对回答这个问题的尝试。

维基百科Abstraction给出了Abstraction的大量描述,有些是比较难以理解,下面是我认为其中比较好的描述:

Abstraction in its main sense is a conceptual process where general rules and concepts are derived from the usage and classification of specific examples, literal ("real" or "concrete") signifiers, first principles, or other methods.

这段话的简单来说是:抽象是 从"specific example"中,创建 concepts 和 general rules 的过程。那何为concept呢?这个问题是比较“抽象”的,难以进行准确描述的,后面的 创造抽象概念 章节会结合具体案例来进行说明。

"An abstraction" is the outcome of this process—a concept that acts as a common noun for all subordinate(从属) concepts, and connects any related concepts as a group, field, or category.

这段话的意思和上面的意思类似,在 创造抽象概念 章节,会结合具体实例对这段话所表述的意思进行详细分析。

Conceptual abstractions may be formed by filtering the information content of a concept or an observable phenomenon, selecting only the aspects which are relevant for a particular subjectively valued purpose.

The essence of abstractions is preserving information that is relevant in a given context, and forgetting information that is irrelevant in that context.

– John V. Guttag

抽象是概括的过程,抽象是提取公共特征的过程,它所概括的、所提取的公共特征,可以使用 concepts 来进行表示(representation),当然也有其它的表示方式。

创造抽象概念

通过创造抽象的 concept(概念)来使表述更加便利的做法是在各种学科非常普遍的,关于此的例子有:

Kernel control path

在《Understanding the Linux Kernel, 3rd Edition》的chapter 1.6.3. Reentrant Kernels中,作者创造了kernel control path概念来概括kernel中由system call由触发的kernel control path(后面简称为system call kernel control path)、由interrupt handler触发的kernel control path(后面简称interrupt handler kernel control path)以及后续随着kernel发展可能会新增的触发kernel control path。显然kernel control path概念概括了system call kernel control path、interrupt handler kernel control path的**common feature**(公共特征),如它们都能够被suspend、resume。

显然当一个表述中使用kernel control path的时候,我们就知道它可以是system call kernel control path、也可以是interrupt handler kernel control path,这就使我们的表述非常地便利。显然,system call kernel control path、interrupt handler kernel control path和kernel control path之间是Is-a关系。

Computer multitasking

Computer multitasking中创造了task概念,它表示的是computer能够并发执行的,它可以是process也可以是thread,具体是什么则由具体的实现而定。

Book-Designing-Data-Intensive-Applications

在这本书中,作者反复强调了abstraction,可以说,其中对abstraction使用涵盖了所有我们需要掌握的abstraction思想。下面是一个简单的例子,在工程Parallel-computingDistributed-computing\Theory\Abstraction\Abstraction-in-distributed-computing.md进行了详细的总结。

Data system

在Book-Designing-Data-Intensive-Applications的"CHAPTER 1Reliable, Scalable, and Maintainable Applications"中,创造了data system的概念。

If that sounds painfully obvious, that’s just because these data systems are such a successful abstraction: we use them all the time without thinking too much.

"data system"的实例有:

  • databases

  • caches

  • search indexes

  • ......

Everything is an object and everything is a file

在python中,有着everything in python is an object,显然,object是最大的抽象,是最最顶级的抽象。

在linux中,有着everything is a file,显然file是最大的抽象,是最最顶级的抽象。

创造更大的抽象

参见: Create-concept

总结

关于创造抽象概念的例子数不胜数,我们学习的所有concept其实都是抽象的结果。

Conceptual/abstraction/theory model

NOTE: 本节标题的含义是: 概念模型、抽象模型、理论模型

参见文章 Abstraction-and-model

Abstract and concrete

与abstract相对的是concrete,两者是**互相依存**的关系,存在着**转换**过程,在解决一个问题时,往往是**双向**的,这个话题在文章 Abstract-and-concrete 中进行讨论。

Abstraction在各个学科中的应用

Abstraction是科学的基础,它在各个学科中都有着广泛的应用,作为software engineer,我们重点关注的是"Abstraction in computer science"。

Abstraction in computer science

Abstraction在computer science中有着深远的影响,本节将开始对此从多个方面进行剖析。

维基百科的Abstraction (computer science)总结了计算机科学中的abstraction。虽然维基百科的Abstraction (computer science)对计算机科学中的Abstraction有了不同的描述,但是我觉得计算机科学中的abstraction本质上和前面所述的广义的abstraction是相同的,即**创建concept的过程**。

描述抽象概念的语言

在computer science,我们需要考虑的是如何来描述concept。

Concept在计算机科学的不同领域有着不同的描述方式,比如:

1) 在 object-oriented programming 中,使用class来描述concept,concept之间的relation就转换为class之间的关系了。

2) 在 Entity–relationship model 中,使用entity来描述concept。与此相关的概念有:Relational modelRelational databaseRelational algebra

连接上述两者的就是Object-relational mapping

3) Instruction set architecture是对 computer 的抽象,它描述了一个computer的功能,特性等,它使用instruction来描述。

4) Interface

Interface即接口,常被用来描述抽象概念,参见:

  • wikipedia interface (computing)
  • 工程programming-language的Theory\Programming-paradigm\Abstraction-and-polymorphism\Program-to-abstraction章节;

本质上来说,上述**描述方式**都是 语言

NOTE: 下面以abstraction来作为切入点描述abstraction在各个工程中的应用。

Abstraction in software design

参见工程software-engineering的Software-design\Principle\Abstraction章节。

Abstraction in programming language

参见:

1) 工程programming-language的Theory\Programming-paradigm\Abstraction-and-polymorphism章节

2) 工程programming-language的Theory\Programming-language\Design-of-programming-language

Abstraction in distributed computing

参见工程Parallel-computingDistributed-computing\Theory\Abstraction章节。

H