0 引言
C++语言是在C语言的基础上扩充了面向对象的概念及相应的处理机制而形成的一种混合型程序设计语言[1]。我院信息与计算科学专业课程安排是,先C语言程序设计,再C++面向对象程序设计。很多在C语言中出现的概念或原理在C++语言中又有新的相应的处理机制,但是以往的教学经验表明,很多学生学完C++语言中相关概念之后并没有彻底分清两套机制的区别,不能将C++相关处理机制与C语言中的相应处理机制相联系,所以为了让学生不混淆这些相关概念及相应的处理机制,本文提出了“X+2”教学方法。
1 “X+2”方法
“X+2”方法中的“X”方法指的是根据不同的知识点使用不同的方法。例如类比法、事例法、编程举例法、项目驱动法、扩充法等。该方法中的“2”指的是问题教学法和归纳演绎教学法。问题教学法,就是在教学过程中教师根据相关内容创设问题情境,把问题作为载体,贯穿整个课堂教学过程,让学生主动参加其中,提出解决这些问题方法的一种教学方法。由于C++的概念多,语法比较复杂,内容十分广泛,在教学过程中,问题教学法可以提高学生上课的注意力和集中力,活跃课堂气氛,能使学生求知欲由潜伏状态转入活跃状态,有力地调动其思维的积极性和主动性,是开启学生思维器官的钥匙,充分体现其主体地位。问题教学法可以使用课堂提问的方法;或者使用激情的方法,激发学生保持探求问题的热情,课后思考问题给出答案;或者使用演示的方法,使学生因为惊叹结果的微妙而去推论问题的原因;或者使用故意改错的方法,让学生在笑过之后再反思其中的问题等等。
学习有两种过程,一个是归纳过程,即同学们应用新的观察结果来推导出规则与理论;另一个是演绎过程,即从这些推导出的规则与理论得出推论,灵活地应用并且以实验来验证这些推论与应用,从而检验前面归纳出的规则与理论。这就是归纳演绎教学法。如果教的得法,就可帮助学生学会做好这两个过程。因此我们说到归纳演绎教学法时,并非完全排除讲课,完全靠学生自己来发现问题,而是采用一种先进行归纳再演绎的教学方法。我们很赞成布兰斯福德(Bransford)所说的:“有时候,通常是在人们先已靠自己抓住了问题关键之后再直接点破要教的东西,会取得极佳的效果[2]。”
归纳演绎法可以让学生掌握概念和语法的核心内容,加深他们对繁多复杂的概念和语法的理解,并能将其应用于编程,不至于像以往编程时遇到语法错误就产生畏惧的心理,出错时可能会因为错误信息是英文的而看不懂;或者即使看懂了,但错误产生的原因并非如此,机器只会给出大概出错的原因,如果语法概念掌握得牢固,就可以使学生避免畏惧心理,正确处理编程中的语法错误。
下面通过举例来讲解“X+2”方法的应用。
2 应用举例
2.1 动态内存的申请与释放
⑴ “X”方法
在讲解该知识点时,“X”方法使用类比法、编程举例法[3]。由于C语言中也出现过“动态内存的申请与释放”,首先让学生思考C语言中是如何实现该原理的,然后提问,让一个学生来回答,得出C语言中使用两个函数malloc和free来实现该机制,引出C++语言除了继承C语言的这套机制外,本身又有自己的一套机制:new和delete,接着编写两个程序实现相同的功能,即基本数据类型动态内存的申请与释放。
2.2 引用
⑴ “X”方法
在讲解“引用”这个知识点时,如果就理论讲理论,照本宣科,只会使学生厌倦疲劳,昏昏欲睡,他们不但记不住,还会产生逆反心理,所以讲解“引用”时“X”方法采用事例法、类比法、扩充法、编程举例法等。由于“引用”概念在C语言中没有出现过,学生第一次接触该概念,授课时应尽量用他们能够理解并且熟悉的事例来解释,这样可以使学生快速并且牢固地掌握抽象概念本质及其现实意义。首先询问哪些同学有别名,别名和姓名都表示自身,而编程操作对象即变量名也可以有别名吗?结论是可以,这样学生就明白了“引用”就是C++语言的一个特殊的数据类型描述,用于在程序的不同部分使用两个以上的变量名指向同一地址,使得对其中任一个变量的操作实际上都是对同一地址单元进行的操作。在两个以上变量名的关系上,被声明为引用类型的变量名则是实际变量名的别名。
⑵ 提问
⑶ 归纳
2.3 数组引用
⑴ “X”方法
此知识点的“X”方法使用扩充法,把引用运用于数组中,对书本知识进行扩充。由于引用不是变量,所以不能说明引用的引用,也不能说明数组元素的类型为引用,或指向引用的指针,例如:
⑵ 提问
请学生再看看这段程序:
3 结束语
在面向对象程序设计语言的教学过程中,为了使学生掌握繁杂的语法概念,并与面向过程设计语言相关概念区分开,在实际教学过程中,提出了“X+2”方法,经过前三轮的教学,C++的省二级考试通过率明显高于课程改革前的通过率,实践证明,教学达到了预期的目标。
参考文献:
[1] 温秀梅.Visual C++面向对象程序设计教程与实验(第二版)[M].清华大学出版社,2009.
[2] [美]迈克尔J.普林斯,理查德M.菲尔德,王立人译.归纳式教学法的定义、比较与研究基础(上)[J].高等工程教育研究,2009.3:15-28
[3] [美]迈克尔J.普林斯,理查德M.菲尔德,王立人译. 归纳式教学法的定义、比较与研究 基础(下)[J].高等工程教育研究,2009.4:13-18