王小玲
(上海立信会计金融学院信息管理学院 上海 201620)
C++面向对象程序设计是计算机专业的核心基础课,是后续专业课程的知识基础,包括数据结构、操作系统、计算机网络、数据库技术等。这些都与程序设计有关联。目前,C++程序设计教学主要采用了理论和实验相结合的教学模式。在理论教学部分,学生主要学习面向对象理论。在上机实验时,学生主要是对所学内容进行验证。由于学生缺乏大型软件开发的经验,对面向对象的理解不够深入,加上理论学习比较枯燥,学生在学习过程中存在缺乏学习兴趣、编程能力难以提高等问题。笔者经过多年的C++面向对象程序设计教学,从教学方法和手段等方面探讨了C++程序设计教学,希望能有效解决上述教学中的问题。[1]
封装、多态、继承是面向对象的三大特征。学生从面向过程转向面向对象,思维受到限制。很多学生难以顺利接受这些概念。笔者通过实践教学的摸索,发现多多举例,尤其是利用比喻的手段让学生在概念的迁移中掌握理论知识,效果较好。具体举例如下,在封装概念的教学中,我以电脑为例,其显示器以及主机全部被面板包装(封装),无法直接操纵内部元器件(私有属性类外不可访问)。如果想控制这些部件,只能通过对外开放的面板上的按钮(公有成员函数),如Power、Zomm、亮度调节等,而不能直接使用暴力拆解这些设备(类外非法访问私有属性)。对其中的描述,对应着的概念已经在括号中给出。我再由此引出封装的好处以及知识点、术语,学生便易于接受。然后,我再让学生通过自己的思考举出类似的例子,促使学生加深对这一概念的理解。友元的理解也可以通过这种方法进行教学。友引申出朋友、闺蜜。我便向学生提问:这些人来拜访自己,可不可以邀请他们进入自己的私密空间,而不限于客厅这样的公共场合呢?答案是肯定的。这就是友元的意义所在,可以直接访问类的私有成员,提高程序效率。在整个教学中,这样的方法可以运用到很多概念上,效果比单纯讲解理论以及结论更容易让学生接受。[2]
C++语法非常重要。如果语法过关,那么编程的出错率将极大降低,给学生造成的困然也能减少很多,从而有利于学生充满自信地学习这门语言。由于有C语言的学习基础,因此,很多新概念的使用完全可以通过类比的方法进行学习。学生接受起来比较快,记得也牢,实践证明效果非常好。从类这个最基本的概念开始,与基本类型的变量做类比,从变量定义、初始化、运算、输出这几个环节做类比,学生便能轻松掌握对象的定义、对象的赋值、对象成员变量的输出。
int a;//定义
a=5;//赋值
int b=sqrt(a);//运算
cout<<b<,endl;//输出
Studnt s;//定义对象
s.setvalue(“Wang”,18);//对象赋值
//此处空白
s.show();//对象成员变量输出
指针在C++中的地位非常重要,也非常容易出错。此处也可以与变量定义、初始化、运算、输出这几个环节做类比,轻松、正确地使用指针。
Student s(“Wang”,18),*p;//定义
p=&s;//指针赋值
p-> reset(“Wang”,19);;//运算
p->show();//输出
每个概念的引入和学习都可以通过对经典案例的深入学习、反复研究,达到举一反三、提高学习效率的目的。我们要给予这些案例足够的重视,而不急于全面展开,陷入题海战术。以数组为例,其经典的案例就是排序算法。在C++中,又加入了指针、对象的概念,我们可根据对象的某个属性,对对象进行排序。例如,对学生对象按照成绩降序排序。搞清楚这个案例,学生便能极大地提高综合运用上述概念的能力。抽象类与虚函数的经典案例是几何图形的继承派生层次问题。这个问题非常好理解,对何时使用抽象类、虚函数给出了非常好的示范。学生只要吃透这个程序,遇到类似问题就可以迁移类比,很快模仿出正确的代码。类似的还有静态成员,多以班级学生总分、平均分为例。按照同样的思路,教师可给学生讲透如何分析出其中的静态数据成员,如何定义,在哪里初始化,为了访问静态成员变量该如何设计静态成员函数,为什么静态成员函数不能访问非静态成员变量等等。那么,学生对这个知识点的掌握就可以过关了。在实操过程中,教师可以一边写代码,一边引入概念,这样学生的印象才会更加深刻。另外,教师可将编译错误反馈给学生,并提出问题,从而引导学生思考和接受新的知识。[3]
笔者结合多年C++面向对象程序设计的教学经验,针对理论多、理论枯燥的问题,就如何开展更加有效的教学展开探讨,希望能提高教学效果,提高学生的学习效果。