C++语言教学思考

时间:2022-10-13 07:30:44

C++语言教学思考

[摘要] C++程序设计语言是许多大学计算机等相关专业的核心课程。本文分析了当前C++程序设计语言教学中存在的问题,在此基础上结合教学的内容、教学手段等方面提出了一种整合化的教学新思路。

[关键词] C++程序设计 编程语言 教学

C++程序设计语言是许多大学计算机等相关专业的核心课程。学好C++语言,对于相关专业的教学实践具有重要意义。C++程序设计语言的一个重要特点是综合性。作为C语言的扩展,它兼有高级程序设计语言的抽象性与低级程序设计语言的高度实现性。C++课程与上至软件开发方法,下至计算机组成与系统结构的许多课程存在紧密的相关性。学好C++不仅需要学习C++的语法、语义,也需要对上述课程中的许多问题有一定程度的认识。

正是因为C++语言综合性强的特点,才使得这门语言比其它许多语言更加难学。简单地向学生灌输各种语法,往往难以取得好的教学效果。必须使学生知其然,且知其所以然。为此,就需要向学生讲述一些C++中相关的其它课程方面的知识。这往往很难做到,一方面,为保证学生能掌握一门编程语言,以为后继课程奠定基础,C++课程必须尽早开设,在此之前,不可能预先开设后期的各种课程;另一方面,这些后续课程并不比C++容易,前期开设未必能取得好的教学效果。

如何在C++语言教学的同时,兼授与之相关的其它课程的内容,使学生真正把握C++的来龙去脉,更深入地理解各种语言现象,是C++教学的主要挑战之一。针对此问题,本文结合作者在教学过程中的一些经验,提出了一种整合化的教学新思路。主要的思想是在讲授C++的过程中,通过抽象、简化的方式,简明扼要地兼授其它课程中的相关内容,以方便学生对于C++的理解。

本文后继部分首先分析了C++程序设计语言与其它课程的关系,然后以此为依据提出了我们的教学新思路,并总结了全文。

一、C++课程与相关课程的关系

作为一种能够同时支持高层应用开发与底层系统开发的编程语言,C++中直接或间接的体现了计算机软硬件领域的许多概念。本章初步分析了与C++相关的课程,讨论了其中哪些内容与C++课程是紧密相关的,后续章节将基于此分析,探讨整合化教学的新思路。

与C++紧密相关的首先是硬件相关课程,包括计算机组成原理与系统结构等。组成原理中的存储器结构、数据表示、输入输出实现等对理解C++中包括变量、各种数据类型及其比较转换、输入输出流在内的许多问题有重要意义。系统结构方面,了解冯•诺依曼结构等内容,可以帮助学生更好地理解程序的运行,理解计算机计算的特点。

除了硬件类的课程外,操作系统、编译原理等系统软件相关课程也与C++教学紧密相关。理解操作系统中的进程管理、内存管理、文件管理,可以帮助学生更好地了解程序执行的过程,理解C++语言中的内存分配、文件操作等。而编译原理的相关知识贯穿于C++课程始终。C++中有许多规则看似难以消化,但如果使学生了解编译过程,就能更好地帮助他们理解C++语言中的许多设计选择,使那些看似毫无线索的语法规定,变得理所当然。

再一类与C++相关的课程是偏数学类课程,如离散数学、数据结构、算法分析与设计等。离散数学中的布尔逻辑等是理解C++中许多运算的基础,而集合、图等概念,对于理解C++教学中的许多程序实例,以及学生编程实践都具有重要意义。数据结构中的链表等也往往出现在数组、指针等内容的学习中,不了解基本的数据结构概念,将使这些问题的学习变得困难。算法分析与设计也是一个重要的相关课程。在C++语言的学习中也开始涉及一些基本的算法,如排序、查找等,给学生讲解一些经典的算法设计思想,将能使学生更容易理解相关例子,也便于培养解决问题能力。

与C++相关的重要课程还有程序设计语言原理。对于许多高校,这甚至是研究生阶段才开设的高级课程,但在讲授C++课程时,从更高的抽象层面,简要介绍程序设计语言原理中类型、面向对象、异常等重要概念,可以更好地帮助学生理解C++中的相关语法设施,使之明白C++为什么会这样,不这样将会如何等。

另有一类与C++相关的课程常常被忽略,这类课程包括软件开发方法、面向对象分析与设计等。C++课程一般开设在大学一年级,该阶段的许多学生对编程一无所知。常有些学生,对于给定的编程问题感到无法入手。如果在教C++同时向学生阐述一些软件分析设计方面的技术,就能使学生更快地解决问题。

上述课程与C++课程大多存在循环依赖的问题,理解这些课程需要具有一定的编程基础,学习C++又需要了解一些上述课程的内容。几乎不可能将这些课程开设在C++课程之前,这使得如何在C++学习中处理上述课程相关的内容,成为一大难题。

二、整合化教学

分析C++程序设计语言教学中存在的问题,我们提出了一种整合化教学的新思路,即不是单独讲授C++程序设计语言本身,而是与此同时简明扼要地兼授其它课程的相关内容。

1.在理论教学中强调整合

C++教学的整合,首先体现在理论教学方面。在这方面,我们强调抽象、简化与C++相关的内容进行讲授。对于硬件、系统等方面的课程,它们主要在概念上与C++相关,细节方面相关性相对较弱。因此,授课时主要采用的方式是将相关软硬件结构模型化,在模型层面上讲解计算机的工作方式。以内存、CPU为核心,屏蔽重要程度低的设备,重点探讨程序如何启动、运转、结束,变量在哪、如何操作,函数如何调用等;而不是深入细节,探讨存储器有多少级结构,CPU指令是什么形态等问题。刚开始学习计算机的学生,习惯从数学的角度来思考程序中的函数、赋值等概念,容易将它们与数学里的相关概念混淆。通过展示计算机的体系结构、程序流转的基本原理,可以促进学生尽早入门。当然,在抽象、简化的同时,我们尽可能地保证抽象出来的结构能够兼容后继课程,不至于使学生产生矛盾。

对于偏数学类课程,如数据结构、算法分析与设计等,C++中涉及的相关内容并不多,但这些内容往往非常关键。因此,我们选择对直接相关的内容作较为深入的探讨。比如对于链表,虽然它是数据结构课程的核心内容,但C++课程中频繁涉及此概念,因此,我们将对其作比较深入的展开,学生在理解链表的特点后,在编写与之相关的程序时,明显比之前更得心应手。算法分析与设计虽然不直接与C++课程相关,但C++教材中大量的实例都体现了各种各样的算法思想,特别地,暴力法(brute-force)、分治法、动态规划法常常出现。对此,学生往往能看懂例子,但自己编写程序时,却存在较多困难,通过向学生灌输上述算法的基本思想,对不同例子进行总结归类,学生对上述例子的消化将更加透彻。

编译原理与高级程序设计语言原理课程与C++非常相关,但难度较高,直接讲授,学生一般难以接受。对于这部分内容,我们结合了两种教学方式,一种是体验式教学,主要通过原理阐述,案例分析与感受来理解相关内容。对于函数调用、栈内存等编译原理中非常相关的内容,我们将为相关问题建立一个比较抽象的描述模型,然后据此进行较为深入的讲解。通过这种抽象但仍保持一定深度的讲解,可以给学生以更深刻的印象,避免他们犯错。

软件开发方法、面向对象分析与设计等方面的内容,主要体现在C++教学的案例与实践环节中。这里,我们主要的思路是从软件开发方法中抽象出一些基本的方法、原理,将其在案例分析中阐述给学生,使其尽可能地明白一个程序的编制由来。在理解教材中的案例时,做到先自己设计,再阅读材料,而不是直接读书,不做深入思考,不分析由来。软件开发方法中许多方法主要针对大型工程,看似与C++教学无关。但对于刚涉猎计算机领域的学生,每个小例子,都是大项目。深入地分析设计开发方法,有利于培养学生分析、解决问题的能力。

抽象、简化进行讲授的同时,我们还强调启发教学。要求学生不停留于书本内容,不停留与抽象模型,积极提出问题,利用课余时间丰富对相关模型的理解。

2.在实践教学中强调整合

除了在理论教学中整合,我们还强调同样要在实践过程中进行整合。以往C++上机实践过程中,要求学生编写的都是一些简单的控制台程序,基于与系统无关的一些函数库来实现相关功能。这些案例可以提高学生对书本知识的巩固,但是难以充分调动学生的兴趣,特别是在当今计算机如此普及的形势下。

为提高学生兴趣,我们在实践过程中,适当结合了少量超出C++教学范畴外的内容,向学生提供一些操作系统的编程接口,图形界面库等,教学生编制一些具有美观界面,甚至可以实现多媒体功能的小程序。这些小程序往往并不复杂,教师不讲解,也不强求学生掌握。只提供给学生模仿,并启发一些可以改进的点,学生通过模仿学习,即使不能充分了解背后的知识,也可以极大的提高学习热情。

三、小结

本文针对C++程序设计语言课程的一些特点,提出一种整合化的教学新思路,大部分内容来源于已有的教学实践。新思路在教学过程中取得了较好的效果,特别是对C++相关的许多问题的探讨,能启发学生积极思考,这对于培养创新型人才是有益的。

参考文献:

[1]皮德常.C++程序设计教程[M].北京:机械工业出版社,2009.

[2]B.Stroustrup(裘宗燕译).C++语言的设计和演化[M].北京:机械工业出版社,2001.

[3]王珊珊.C++程序设计教程[M].北京:机械工业出版社,2006.

[4]吴乃陵.面向对象C++程序设计教学改革[J].电气电子教学学报,2003,25(02):9-11.

上一篇:详细的xp修复控制台命令和用法归结 下一篇:试析具象油画艺术中色彩的运用