跳至内容
Topos Uranos

摘要

这一篇不是又一节课,而是课程的最终回顾:它重温课程计划在开始时提出的七项学习目标,用一幅图展示每个单元的每一课被分配给了哪一项目标,解释每项目标在八个内容单元中是如何训练的,区分拥有自己单元的目标和贯穿整门课程的目标,汇集课程在 C++ 之外留下的东西,教人解读按目标划分的自我测评(它汇总各次结业测评的首次作答),并指出课程留给 C++ 程序设计 II 的内容。

学习目标

  1. 陈述课程的七项总体目标,并辨认每项目标在哪些单元和哪些课中得到训练。
  2. 区分拥有自己单元的目标和贯穿多个单元的目标,特别是伴随反复编译与调试的问题求解,以及规格说明与测试,并解释后面这些目标是如何得到练习的。
  3. 在课程所学的内容中,把适用于任何语言的东西与它在 C++ 中的形式区分开,并解释课程把什么留给了 C++ 程序设计 II。
  4. 根据按目标划分的自我测评、图以及每节总结课的挑战题,决定应当复习哪些单元和哪些课。

课程的宗旨

课程诞生时有一个总的宗旨:教人从零开始编写正确的程序,以程序设计本身而不是某一种语言为对象。为此,它选择了一件要求严格的工具,即 C++,因为它不隐藏机器:它强制声明类型,把编译与执行分开,让内存、复制的代价和每个数的极限变得可见,并用未定义行为惩罚其他语言所掩盖的东西。关于 课程计划 的那一课把这一宗旨展开为七项总体学习目标;不妨按图中引用它们时的编号把它们列在眼前:

  1. 用程序解决问题:规定输入什么、输出什么,设计算法,手工执行它,并编写、编译、运行和调试它,同时解读编译器的消息和警告。
  2. 为每个数据选择合适的类型,并对其表示的极限进行推理:整数的取值范围、溢出、浮点数的舍入以及文本的编码。
  3. 构造正确的表达式,了解优先级、类型转换、副作用以及标准未加定义的情形。
  4. 用正确且会终止的判断和循环设计流程控制,并用不变式论证其正确性。
  5. 把问题分解为接口清晰的函数,选择参数的传递方式,并用递归解决问题。
  6. 用基本算法和标准库表示并处理复合数据(序列、表格、记录、文本和文件),并估计其代价。
  7. 把较大的程序组织到多个文件中,用前置条件和后置条件对其加以规约,系统地测试它们,并论证其正确性。

此外,课程的每一课都说明了自己的具体目标。各课并不说明每个具体目标服务于哪项总体目标;这种对应是从外部所做的解读,采用与本网站其他课程相同的方法。每个具体目标被分配给一项主要的总体目标,如果它还涉及其他目标,再分配给若干次要目标;每个具体目标在其主要目标中计一整份,在每个次要目标中计半份;一节课以权重最大的那项总体目标为主要目标,以其他获得权重的目标为次要目标。如果两项目标权重相同,则取本单元的目标;如果两者都不是本单元的目标,则取编号较小的那项。因此,变量与内存 一课的目标在目标 1 和目标 2 之间平分,它被连到目标 2,因为那是它所在单元的目标。导言课遵循同样的规则。总结课则遵循自己的标准:其主要目标是所在单元的目标,因为它的概念链、结业测评和大部分挑战题汇集了该单元所教的内容;文本与文件单元没有自己的目标,计入目标 6,因为它的四节课中有三节属于目标 6。若是如此,整门课程就呈现为一条脊柱的形状:头部是总的宗旨;中轴是各单元的顺序,每个单元占一段;每节课是该段上的一个节点,与其主要目标相连;七项目标环绕中轴浮动,由滋养它们的各课支撑。