以实例贯穿课堂的面向对象程序设计课程教学改革

时间:2022-03-31 03:58:49

以实例贯穿课堂的面向对象程序设计课程教学改革

摘要:面向对象程序设计课程是当前计算机专业学生的一门必修专业课。课程本身的复杂性与实践性,使学生无法完全理解消化并有效应用所学知识点。针对这种情况,本文研究如何设计简短精悍、适于课堂演练的实例,并将这些实例与理论学习在课堂上有机结合,使学生易于领会知识点、充分参与课堂教学,最终达到学生积极主动学习,对知识点融会贯通的目的。

关键词:面向对象程序设计;理论学习;实例设计

面向对象程序设计OOP是1990年代开始流行的一种软件编程方法,具有抽象、封装、继承与多态4个特点。因其比传统的结构化程序设计技术具有更高的代码可重用性、可扩充性和易维护的特点,所以,目前面向对象技术已成为开发大型软件的主流方法。据TIOBE编程协会2008年5月编程语言流行趋势排行榜显示,在前5位最受欢迎的编程语言中,面向对象语言占据其中4位。

随着Java、C++等面向对象语言的普及,以及社会对软件开发工程化的重视,面向对象技术已经成为程序设计的主流。鉴于此,面向对象程序设计已成为计算机应用类高年级学生及研究生必修的一门专业课,众多学校开设C++、Java等包含面向对象技术的语言设计课程。然而,另一种现象却是企业招聘不到合适的、掌握面向对象语言的人才。学习面向对象技术的学生人数日益增多,但能满足市场需求的应届生却寥寥无几,产生矛盾的原因大致可归结为以下几点。

1) 教学内容抽象、理论性强。生动灵活的程序设计知识学习成为枯燥乏味的机械记忆,这压制了学生的学习兴趣。

2) 程序设计实际应用能力不强。编程能力的培养过多依赖实验课,学生在学习理论知识后通过编程演练加深理解的环节有所欠缺。

3) 学生发散性思维缺失。教学内容和方法拘泥于教材,束缚发散性思维,人才培养模式单一。

4) 对自学能力培养的忽略。教师单方灌输知识,导致学生过于依赖教师,逐渐丢失独立思考习惯。

5) 脱离市场需求。教学内容过于保守,学生难以在课堂上接触到当今流行技术,毕业求职时感到与社会脱节并产生挫败感。

总的来说,随着时代的发展,社会对人才提出了更高的要求。企业需要理论基础扎实、动手能力强的综合型应用人才。所以,作为学校来说,在教学方法、教学过程等环节必须进行相应的改革,使学生在具备扎实的理论基础的同时,还能把书本知识与动手实践融合起来,达到相辅相成的效果。对此,本文提出把实例教学引入面向对象程序设计理论课堂,抓住学生学过理论后急于实践验证知识点的敏感期,摆脱理论课程和实验课程分离、不能衔接的困境。

1实例教学法

实例教学法也叫案例教学法或个案教学法[1],即在教师指导下,根据教学目标和内容需要,采用实例组织学生进行学习、研究、锻炼能力。它打破了以理论知识点为中心的传统教学模式,以精心设计的实例为中心,把教授和学习的重心放在实例的分析和领会上。整个教学过程强调学以致用,在应用中学习。基于实例的教学必须注意以下5个方面。

1) 实例的连贯性[2]。若知识点相关,则采用同一系列实例进行扩展,即题目内容相近,但针对不同知识点做局部改变扩展,使学生能快速理解实例,并专注于教学点。

2) 适当采用实例的归纳、对比、类比等方法。如穷举法,通过多种实例类比,说明何种问题可以用穷举法解决;又如面向对象程序架构与程序设计思想,通过对同一问题进行结构化设计和面向对象设计的对比。

3) 伴随教学进度分解一个复杂的综合实例,逐步讲解程序设计方法思想。采用问题引导的方法,由综合实例的某个步骤提出问题,引出新知识点,改进程序,层次推进至最终完成问题。

4) 每讲完一次课程,都为学生总结本次课程的语法知识点和程序设计思想,提示下堂课涉及的前序知识点,以及与下堂课有直接关系的前序实例,并提出预备问题。布置与课堂实例的算法相似的程序作业,并做到学生能通过知识的直接迁移来完成作业。

5) 要求学生在课余根据相应知识点进行实例自学。系统学习并练习相应实例,达到进一步练习和提高的目的。

2设计行之有效的实例

从上述介绍中,我们看到在理论课上引入巧妙设计的实例可以使课堂教学化繁为简,使学生实践能力得到锻炼,前后知识点得以贯穿;反之,不恰当的实例会加大教师讲解难度,使学生逻辑思维混乱,知识学习无法条理化。总之,如何设计简练切题、难易适中的实例,并使实例既有一定难度,又将难度控制在通过思考、引导便能解决的程度内是面向对象程序设计课程引入实例的关键。

教师的理论教学和学生的知识学习都以教材为依托。为方便教师讲解和学生记笔记,本文建议扩充现有教材每个章节的实例。在加深知识点理解的实例基础上,增加扩充程序功能的题目,以使学生在复习旧知识点和编程题目时演练新知识点。这个举措改变了学生仅通过读程序来学习知识的传统授课形式,把动手能力培养引入理论课,这更加符合学习理论-学习理论如何应用-实践理论如何应用的认知规律,并把握住了在理论学习后立即消化吸收的最好时机。

实例的设计应遵照培养创新性人才的原则,结合整改后的教材重新整合教学内容。在课堂上引入有助学生理解面向对象思想的程序设计题目,力求学生在掌握知识点的同时,强化对面向对象思想的宏观把握能力,以达到提高学生再学习的能力。下面以一个摘自清华大学出版社的《面向对象程序设计与visual c++6.0教程》[3]中第4.7.2节的例子来阐明本文的观点。程序代码如下:

【例4-20】 类作用域及生存期举例。

(1) #include

(2) #include

(3) class Test

(4) { public:

(5) Test(int a)

(6) { i=a;

(7) cout

(8) private:

(9) int i;};

(10) void fun1(int n)

(11) { static Test t1(n); //定义静态对象t1

(12) cout

(13) void main()

(14) { Test t2(188);

(15) fun1(18);

(16) fun1(28);}

本书通过一个在函数中定义静态对象t1的例子并演示其执行结果,旨在让学生加深掌握本节的核心知识点:对象的生存期。这个例子的局限性在于:它只向学生展示了静态对象的创建与终止时间,而缺乏对其他对象的生存期及作用域的关注。为了使例子涵盖更全面的知识点、承担更多的教学功能,本文对其做如下4个延展。

1) 在Test类定义中插入一个输出i当前值的display无参函数,并在第15行后插入t1.display();语句。使例子涵盖与生存期密不可分的作用域知识点。

2) 在第12行后插入Test g_t(33);语句。全局对象g_t的添加改变了执行结果,学生可以从中掌握静态对象之外的其他对象的生存期。

3) 在原程序上添加析构函数的定义。这个延展既复习4.4.2节析构函数的定义,又以静态对象与全局对象的生存期知识为铺垫,考察学生对析构函数调用时机的掌握。

4) 定义一个同名不同内容的Test类引起命名冲突,以引入4.8名空间的内容。

本文为例4-20添加两个知识难点的应用:全局对象的生存期;作用域与生存期的区别。复习前面的知识重点:析构函数。引入后继的课程内容:名空间。这4项扩充使原本一个单一功能的例子包含更多的知识难点,并具有承前启后的作用。

3实例在课堂上的应用法则

在理论课程中以实例教学为主导是本文的研究重心和特色。为使实例在教学中的效果达到最大化,做到真正提高学生综合能力和创新能力、加强学生的自学能力,我们需要在教材建设、教学内容、教学模式3方面进行改革,以完善面向对象程序设计课程的教学体系改革。

教学内容与教材建设的改革是提高教学质量的重要保证和前提,恰当的教学模式是取得良好教学效果的桥梁[4]。在实施教学模式、方法与手段改革的过程中,让教师转变教学观念,在教学过程中树立以学生为主体的教学思想,正确处理传授知识与培养能力、提高素质之间的关系;改变 “教师单向灌输”的教学模式,开展启发式、讨论式和研究式教学;可根据学生水平进行分级教学、因材施教。此外,结合当前流行技术,进行以案例教学为内容的研究式教学模式的探索。具体来说,就是教师结合教学内容设计编程题目的教材整改,在理论课上要求学生认知所学知识点和理解相关实例后,解答相关问题或完成编程题目的编写,以完成理论认知到实践应用的转化。在学生完成任务的过程中,教师除了要强化过程管理与规范课程的过程监控之外,还要给予学生恰当的协助指导,在不影响学生独立思考和分析总结的前提下,帮助学生把握解题的宏观方向。

在第3节的例子中,本文为例4-20添加了4项功能延展。第1项延展中教师为例子添加一个函数定义与函数调用,要求学生给出程序执行结果,以考察学生对静态对象的作用域的掌握,由上一个知识点――静态对象的生存期自然过渡而来。因为作用域与生存期是两个关系紧密有极易混淆的概念,绝大多数教材都把它们放在同一章节利用对比法进行介绍,所以学生通过实例观察静态对象的生存期后,容易联想到它的作用域问题。此时教师不需引导启发就可以让学生独立解决这个问题。第2项延展让学生对添加一个全局对象后的例子给出执行结果,加深学生对生存期的理解。虽然学生已经掌握了静态对象的生存期,但全局对象是否等同于静态对象对学生是需要思考的问题,这时教师要巧设疑问,以激发学生创新能动性,鼓励学生通过类比静态类型与全局类型的关系来解决当下的问题。第3项延展要求学生改写程序,在类定义中添加析构函数定义后,说出对程序执行结果的影响。定义析构函数属于复习旧知识点,随后在这个例子中提出静态对象与全局对象的析构函数自动调用时机问题。对学生来说,这是没有接触过的新内容,需要教师在学生思考3到5分钟后做出适当的讲解。第4项延展需要学生思考如何解决命名冲突问题,从而引入名空间的概念。教师可以以提出任务的方式引发学生积极思考解决方法。

通过上述分析,我们可以看出,改编后的实例为学生设计了4个难度的问题,它符合学习规律的认知梯度,对学生能力提出不同的考验,因此,老师要应对不同的指导方式,创设符合课堂实际境况的实践氛围。相应地,我们可以把设计的实例以及教师指导模式归纳为如下4类。

第1类:驾轻就熟型。教师可以放手让学生独立完成,尽量不去干扰学生的思路,让学生体验独立完成任务的成就感。上面提到的第1项延展即属于此类。根据教学安排与题目难度,学生能毫不费力地给出题目答案。教师把这类题目放在前面,给予学生继续答题的兴趣与克服困难的自信心。

第2类:稍加思索型。教师在保证学生充分思考的前提下,可以给出简单提示,尽可能让学生在解决问题的过程中少走弯路。比如上述第2项延展考查的是全局对象的生存期,学生容易把静态对象生存期问题生搬硬套到此题目,这时,教师要引导学生回顾前面学习过的静态变量与全局变量的区别。

第3类:绞尽脑汁型。这类问题不局限于课本知识,对学生来说难度较大,教师需要将其当做新知识并以任务驱动的方式详细讲解。上述第3项延展就属于此类问题,学生要根据析构函数的作用与对象的生存期推导出答案。这对学生的分析总结能力提出一定考验,至少半数学生会对此问题一筹莫展。对此问题,教师仅仅公布答案并简单讲解还远远不够,而需要将其作为重点难点为学生分析解题方法和思路。

第4类:无计可施型。这类问题设计的目的是为了激发学生好奇心,以引出后面的内容。教师可以以轻松的互动模式,让学生在他们现有知识基础上充分发挥创造性,提出自己的解决方案。老师要对这些方案给予及时的归纳总结。比如教师在上述第4项延展中提出命名冲突问题,此时并不期望学生以现有能力加以解决,它只是让学生留意到这个常见并易忽略的编程方法,从而引出后面要学的知识。

4结语

本文研究目标旨在改革现有的面向对象程序设计课程教学内容与模式,以培养高素质的创新型人才为出发点,切实提高学生的思考能力和动手实践能力,进而保证该课程教学的高质量并保持高校培养人才面向市场的特色。为达到这个目的,我们对教材实践部分进行扩充和教学方法改进,使教学内容充实化、教学模式多样化和学生学习兴趣最大化,进而提高学生的动手能力和创新能力,力求使学生更符合当今市场需求,并为后续课程的学习和研究打下基础。

参考文献:

[1] 叶卫华. 浅谈案例教学法的作用[J]. 职业圈现代软科学,2007(10):22-23.

[2] 张静华. 大学编程语言课实例教学探讨[J]. 计算机教育,2009(8):72-74.

[3] 陈天华. 面向对象程序设计与Visual C++6.0教程[M]. 北京:清华大学出版社,2006:128-129.

[4] 黄勤,李楠,甘思源,等. 计算机硬件技术基础课程建设的探讨[J]. 理工科教学指导通讯,2005(1):47-48.

Teaching Reform of Object-oriented Programming Course with Instance

WANG Wenbing, LI Hui

(School of Computer and Communication, Zhengzhou University of Light Industry, Zhengzhou 450002, China)

Abstract: Object-oriented programming(OOP) is a professional compulsory course for current students whose major is computer science. As complexity and practicality of this course, students have difficulty to learn it or apply it effectively. In response, the paper concentrates on how to design the short and capable instances adapting to class practice. Besides, we pose application mode of these instance in teaching process. By the proposal, students get more active attitude and flexible learning method for OOP course.

Key words: object-oriented programming; theory learning; instance design

上一篇:再谈计算机思维 下一篇:考研知识点在计算机组成原理日常教学中的应用