# 抽象

> CIE A-Level 计算机科学 · 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u13-abstraction/

本模块讲解抽象，这是CIE 9618试卷1的核心计算思维概念。你将学习核心定义、抽象类型、如何应用抽象解决问题，以及符合考试评分要求。

**先修:** [计算思维导论](https://www.owlsprep.com/zh/study/cie-9618-u13-intro-to-computational-thinking/)

## 学习目标

- 定义抽象，并区分CIE 9618考试中常见的抽象类型
- 应用抽象过滤无关细节，简化复杂问题解决
- 识别真实计算机系统中的抽象示例
- 符合CIE抽象考题的评分要求

## 抽象的核心定义与用途

**抽象** — 从问题中移除或隐藏不必要的复杂细节，仅关注与解决问题相关信息的过程。它可以降低认知负荷，简化问题解决。

*例:* 使用文字处理器时，你不需要了解处理器如何执行机器码就能输入和编辑文本。

抽象是计算思维四大核心支柱之一，另外三个是分解、模式识别和算法思维。它通过过滤掉所有不影响你正在处理的系统或问题行为的细节来发挥作用。

**例题:** 一名学生正在设计管理学校社团报名的程序，哪些细节应该从核心程序逻辑中被抽象掉？

1. 首先，识别程序正常运行所需的相关细节：社团名称、学生姓名、报名日期、容量上限。
2. 接下来，识别不影响核心逻辑的无关细节：应用的背景颜色、运行程序的电脑品牌、存储备份数据使用的文件格式。
3. 结论：无关细节被抽象掉，只留下构建程序所需的核心信息。

> **tip**
>
> 抽象仅移除*无关*细节。会改变问题结果的相关细节始终会被保留。

> **考试提示:** 考官经常考察相关细节和无关细节的区别——请务必确认被抽象的细节不会影响解决方案。

## 常见的抽象类型

CIE 9618经常考察你区分计算机科学中不同抽象类型的能力，最常考的类型有：

- **问题抽象**：通过移除非必要细节，将现实世界问题简化为可计算表示
- **过程抽象**：隐藏过程/函数的工作原理细节，仅暴露其功能
- **数据抽象**：隐藏数据的存储细节，仅暴露可对其执行的操作
- **函数抽象**：将相似功能分组为可复用单元，隐藏实现细节

**例题:** 当你在Python中调用内置`pow()`函数计算幂时，使用的是哪种抽象？

1. 当你调用`pow(base, exponent)`时，你只需要知道它会返回`base`的`exponent`次幂。
2. 你不需要知道该函数使用什么算法计算结果，也不需要知道它在底层代码中是如何实现的。
3. 这符合过程抽象的定义：实现细节被隐藏，仅暴露函数的用途。

**概念自测**

测试你的理解：

1. 一个`BankAccount`类隐藏了余额在内存中的存储方式，仅允许你存款或取款。这属于哪种抽象？

   - 过程抽象
   - 数据抽象
   - 问题抽象

   *答案:* 数据抽象

   *解析:* 正确！数据抽象会隐藏数据的存储方式，仅暴露允许的操作。

## 真实计算机系统中的抽象

CIE经常要求你举出操作系统、网络模型、面向对象编程等知名系统中的抽象示例。我们来看一个常见例子：

**例题:** 解释抽象如何应用在TCP/IP网络分层模型中。

1. TCP/IP模型将网络通信分为4个独立的层：链路层、网络层、传输层、应用层。
2. 每一层只和直接相邻的上下层交互，隐藏其他所有层的实现细节。例如，网页开发者不需要知道数据如何通过物理铜缆路由就能构建网页应用。
3. 对底层复杂度的抽象让开发者可以只在某一层工作，而不需要理解整个网络栈，大幅降低了问题复杂度。

> **info**
>
> 面向对象编程高度依赖抽象：类暴露公共方法供交互，向类的使用者隐藏所有私有内部实现和数据细节。

> **考试提示:** 当被要求举出抽象的示例时，务必说明哪些细节被隐藏*以及*隐藏这些细节的好处，才能拿到满分。

## 抽象考题的考试要求

**考试命令词**

CIE对抽象考题使用统一的指令术语，评分要求如下：

- **Define abstraction** — 分值1-2分。移除不必要细节得1分，聚焦相关细节得1分。 *(对于1-2分的定义题，你不需要给出示例。)*

- **Explain how abstraction is used in [X]** — 分值3-4分。你必须识别出被隐藏的细节，并说明抽象的好处，才能拿到满分。 *(一定要写出好处：降低复杂度、简化开发、可复用性。)*

- **Identify details to abstract from [X]** — 只需要列出不影响问题解决的无关细节，不要包含相关细节。 *(相关细节永远不会被抽象掉。)*

## 常见错误

- **错误做法:** 将抽象定义为把问题拆分为更小的部分
  - 原因: 这描述的是分解，不是抽象。考官经常考察这个区分点。
  - 正确做法: 将抽象定义为移除不必要无关细节来简化问题的过程。
- **错误做法:** 把解决问题所需的相关细节也抽象掉
  - 原因: 抽象仅移除不影响问题结果的细节。移除相关细节会导致问题表示不完整。
  - 正确做法: 保留所有会改变问题解决方案的细节，仅移除不影响结果的细节。
- **错误做法:** 混淆过程抽象和数据抽象
  - 原因: 考生经常混淆这两种类型，CIE明确考察这个区分点。
  - 正确做法: 记住：过程抽象 = 过程的工作原理被隐藏；数据抽象 = 数据的存储方式被隐藏。
- **错误做法:** 在解释题中忘记说明抽象的好处
  - 原因: CIE评分标准中，说明抽象的好处会单独给分，考生经常漏答。
  - 正确做法: 总是在最后加一句话，说明抽象降低了复杂度，让问题解决或开发更简单。

## 速查表

| 抽象类型 | 核心描述 |
| --- | --- |
| 问题抽象 | 通过移除细节将实际问题简化为可计算表示 |
| 过程抽象 | 隐藏函数的工作原理，暴露其功能 |
| 数据抽象 | 隐藏数据的存储方式，暴露允许的操作 |
| 函数抽象 | 分组可复用功能，隐藏实现细节 |
| OOP抽象 | 隐藏类内部细节，暴露公共接口 |
| TCP/IP抽象 | 每一层都隐藏下层的实现细节 |

## 下一步

抽象是支撑计算机科学所有领域的基础概念，从编程到系统设计都离不开它。掌握抽象能帮你答对试卷1中大多数核心计算思维考题，它适用于面向对象编程、算法设计和AI问题解决等主题。接下来，你将在此基础上学习其他核心计算思维工具，然后应用这些概念解决更大、更复杂的、符合CIE 9618大纲的问题。点击下方链接继续你的备考。

- [模式识别](https://www.owlsprep.com/zh/study/cie-9618-u13-pattern-recognition/)
- [面向对象问题求解](https://www.owlsprep.com/zh/study/cie-9618-u13-object-oriented-problem-solving/)
- [陈述式问题求解](https://www.owlsprep.com/zh/study/cie-9618-u13-declarative-problem-solving/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u13-abstraction/
