黄国辉
摘 要 C++语言是计算机相关专业的重要课程,具有较高的理论性和较强的实践操作性,如何提高该课程的教学质量一直是一线教师十分关心的问题。文章介绍了在C++语言教学中存在的主要问题,结合自己的思考、体会与实践,就如何改进教学手段与教学方法、突出实践动手能力与改革考核方式等方面提出了自己的观点。
关键词 教学改革 C++语言 动手能力
中图分类号:G642.3 文献标识码:A
1 C++语言课程概述
C++语言课程是我院信息管理与信息系统专业的一门专业选修课程。主要讲述面向对象程序设计的思想和方法,由浅入深的指导学生了解和掌握如何利用C++程序设计语言进行程序设计,提高学生的动手能力,做到理论和实践相结合,培养学生理解、分析程序、编写、调试程序的能力,使之能把程序设计应用到今后的专业学习和工作中。
2 C++语言教学中存在的主要问题
2.1 C++语言本身的特征给学生的学习带来难度
C++既可用于面向过程的结构化程序设计, 又可用于面向对象的程序设计, 是一种功能强大的混合型的程序设计语言,由于我院通常是在大一开设C语言来作为学生的第一门入门语言,而C++语言是作为大三学生对面向对象程序设计进行学习的一门选修课,面向过程和面向对象教学时间跨度大,不利于学生掌握C++的面向对象程序设计思想。
2.2学生抽象思维能力差,对C++面向对象程序设计的理论理解困难
C++语言课程中的两个主要概念是类和对象,需要学生掌握的基本技能之一就是按照对象的特征进行数据抽象和功能抽象,而学生的思维停留在以前学习过的C语言中面向过程的程序设计,对C++中类和对象的抽象,类和对象的关系理解不够透彻。
2.3 C++语言的结课考核方式仍然以试卷的理论考试为主,导致学生实践能力差
一直以来,我院的C++语言的期末考试是以试卷形式来考核。作为一门实践编程语言,考试时理论知识考得多,动手能力考的少,而学生学习一般都为了应付考试,这就使得大多数学生不注重实践动手能力的培养,而仅仅是靠做题和背题来通过考试,殊不知动手能力才是第一位的,也是以后就业的保障,只有在实际的编程锻炼中,才能更好地掌握C++语言。
3 C++语言教学改革与实践的几点建议
3.1针对重点、难点的概念进行过渡对比式教学
类的概念很重要,类跟C语言中的结构体有些相识的地方,实际上可以看做类是结构体的扩充,因此在教授C++语言中的类的定义时,可以先以结构体的定义作为入口。从C过渡到C++,从结构体过渡到类。
结构体是一个简单的封装,可以认为结构体中只是封装了对象的数据,没有封装对象的操作,而類不仅封装了对象的数据,还封装了对对象的操作。教师可以在介绍类的定义是,先让学生回忆在C语言中,结构体的定义语法为:
struct 结构体名
{
数据成员;
}
而在C++中,类的定义语法为:
class 类名
{
private:
//私有类型数据成员和成员函数说明
protected:
//保护类型数据成员和成员函数说明
public:
//公有数据类型成员和成员函数说明
};
从中可以让学生体会到语法的不同在于如下方面:
(1)类语法中类体中包含两部分成分:数据成员和成员函数。
(2)类中的成员可以指定三种权限,而结构体中没有权限的指定,可以推出其为public权限,从而进一步阐释权限的作用,以及C++中引入权限的目的和意义。
(3)结构体只是一种相关数据的组合体,类才是体现了真正的封装,能保证数据的安全。
3.2从C++语言本身的内在需求来解释一些相关的概念
程序设计语言的教学过程中大多时间是说明它有什么规则,并且向学生解释为什么提供这项规则的说明,这种对语言本身需求的说明在课程全程中无处不在。例如:类将数据和动作捆绑在一起使得数据变成聪明的数据,不同的对象各自悠闲地行动;友元是通往私有数据的后门,为密切相关者提供方便;引用是形神兼备继而在函数通信中大显身手;虚基类是解决多继承引起的二义性问题等等。在此,强调一下往往被忽视的有关多态性的需求说明:继承呼唤多态。
虚函数的定义语法和调用规则要求都很好理解,难以理解的是为什么要做这件事。说明这个问题首先要从赋值兼容规则开始:派生类的对象可以赋值给基类对象;派生类对象的地址可以赋值给基类指针;派生类的对象可以初始化基类的引用。接下来进行同化效应的说明,即基类对象、指针和引用是可以接纳派生类对象,然而赋值之后派生类的特征就完全消失了。以如下代码及运行结果进行说明。
#include
using namespace std;
class Base
{public:
void show()
{ cout<<" Base \n"; }
};
class Derived :public Base
{public:
void show()
{ cout<<" Derived \n"; }
};
void fun(Base& x){x.show();}
int main()
{ Base b, *pb;
Derived d;
fun(d);
pb=&d;
pb->show();
b=d;
b.show();
return 0;
}
执行结果为:
Base
Base
Base
解释语言本身的内在需求一方面有助于提高学生们的学习兴趣,他们不再有莫名其妙的困惑;另一方面,由于了解需求的同时也清楚了该语法规则的应用场合,有助于在他们碰到类似的实际问题时能用相应的方法来解决。
3.3建立完善的课程学习交流平台
学生的学习任务重,接受能力有限,因此课后交流就显得尤为重要,但下课后老师就离开了,有问题想找老师交流的话存在很大的不便,慢慢的愿意跟老师进行课间和课后交流的学生的人越来越少了。建立一个快捷,方便,界面友好的课后交流平台就十分必要了。
我校建设了网络教学综合平台,通过该平臺上教师可以把教师的个人信息,课程的介绍,教学大纲、教学日历,教学课件以及课程相关的一些资料等上传,学生可以浏览和下载这些相关的资料,在最重要的师生互动方面,平台提供了发布课程通知,答疑讨论区,课程问卷,布置作业以及在线测试等,通过该课程平台,弥补了教师和学生在课堂以及课间不能很好交流互动的不足。
3.4改革课程的考核方式,增加实践动手能力的考核
本课程的学习不仅仅是为了让学生掌握C++编程的语法知识,更重要的是培养学生利用C++语言编程解决实际问题的能力。为了更客观全面地反映学生的学习情况,更合理地对学生的学习效果进行评价,真正发挥“以考促学”的作用,本课程考核采用了“平时成绩+课程结课报告”相结合的考核模式,课程的最终成绩由平时成绩和课程结课报告成绩共同决定。平时成绩包括课堂考勤、上课提问、作业以及实验考勤、实验报告等,课程结课报告包含两方面的内容,一方面是学生对该课程学习后内容和知识的理解、体会等;另一方面是学生对该课程做的一个课后程序报告,类似于课程设计报告,按照软件工程的流程完成一个小型项目,且以答辩验收的方式来评价学习效果,考核学生的综合应用能力。该方式重视对学生学习过程及实际动手能力的考核,侧重考核学生对知识的融会贯通和灵活运用能力。
4结语
本文对在C++语言教学过程中遇到的问题进行思考与分析,从教学方式和方法、课后交流和考核方式等多方面入手,提出了一些教学方法。C++语言课程的教学涉及诸多方面的因素,需要我们在今后的教学过程中不断进行探索与实践,改进教学思路与教学方法,更好地促进该课程教学质量的提高。
参考文献
[1] 钱能. C++程序设计教程(第二版)[M].北京:清华大学出版社,2005.
[2] 孙伟峰,王艳.高校C++程序设计教学探讨[J]科教导刊,2012(05):109-110.
[3] 熊启军,宁彬,屈俊峰,曹文平. C++面向对象程序设计教学探讨[J].电脑知识与技术,2014,10(13):3037-3039.
[4] 龙满生.C++面向对象程序设计课程教学改革与实践[J].中国电力教育,2011(28):84-85.endprint