李海波
(华侨大学计算机科学与技术学院 福建厦门 361021)
大学新生面向对象编程能力的提高方法
李海波
(华侨大学计算机科学与技术学院 福建厦门 361021)
面向对象编程通常是大学新生的必修课,是重要的计算机专业基础课。针对近几年教学过程中暴露出的种种问题,通过分析大学新生的思维特点以及该课程特点,提出相应的对策,即从转变思维模式入手,训练编程能力,再加强课程实训环节,三位一体从根本上提高新生的编程能力。通过对比,几届新生的编程能力有明显提升。
面向对象;编程;大学新生
面向对象编程是计算机科学与技术、软件工程学科的一门重要的基础必修课,也是未来从事这些专业的程序开发基础[1]。面向对象(Object Oriented,OO)是一种程序设计模式和思想,是上个世纪90年代软件开发方法的主流,也是当前计算机界关心的重点[2]。目前,面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围[3]。支持面向对象的语言很多,对大学新生来说,所接触的第一个面向对象编程语言就是C++语言。在教学过程中我们发现,大多数学生反映这门课非常难,面对程序语句不知所措,而且经常无法摆脱数学上的习惯,比如一些符号和概念,学到面向对象核心部分时,至少一半学生处于掉队状态。因此,思维模式的扭转必须潜移默化地融入到这门课的教学中,才能提高新生对面向对象以及C++语言的理解能力,为其他后续课程打好基础。本文首先分析大学新生存在的一些问题,然后从几个方面探讨和研究如何提高新生面向对象的编程能力,并提出具体的方法改善该门课的教学质量。
大学新生刚刚结束高中时代步入大学,学习方式仍然以老师教为主,尚未建立主动思考和自学的习惯,而且潜意识里“范围”的概念根深蒂固,教学大纲、教材内容的范围演化为思维模式的限制,问题就更加严重,久而久之,滋生惰性。面向对象编程这门课中,C++的语法规则是固定的,但由此演绎出的编程思路是无穷的,从这点意义上讲,该门课更需要创造精神和创造力。
通过多年的教学经验,基本概念的讲解是面向对象编程启蒙阶段的重点。面向对象程序设计教材在讲解基础知识时,虽然章节编排上尽量保证知识理解的循序渐进,但内容上不可避免地会有交叉,比如函数一章虽然重点讲函数的语法规则以及编写方法,但第一章就会出现一个主函数main(),这就不得不在第一章简单解释“函数”这一概念。
(一)建立高级语言的规则
新生在编写C++程序时,运用表达式时仍然受数学的影响,比如课堂练习时,经常把除法写成“÷”,上机训练时仍然试图把π、∑、≠、√等数学符号写入程序,经常想当然地认为C++中的各种数据类型和数学的差不多,遇到数值类型转换的时候自然难以理解。究其原因,主要还是数学习惯在作怪,但C++初学时采用的例子、算法等大多是数学公式,这更加深了学生的混淆。面对这样的情况,我们还是应该强化基本表达式的训练,努力扭转数学符号的习惯,在新生的头脑中建立起一套高级语言的规则。
(二)理解面向对象
面向对象编程(Object-Oriented Programming OOP)提供了一种新的模型。在这种模型里,编程的思考方式不再是针对功能的先后步骤而是完成某项功能的要素与参与对象。它倾向于仿真模拟现实世界,提出了类和对象这两个概念,我们将现实世界中实际存在的事物按类划分,同类中的事物具有相同的属性。面向对象的本质是更接近于一种人类认知事物所采用的哲学观计算模型[4]。在具体编程过程中,我们并不急于去研究功能,而首先分析完成这项功能所需要的要素。
这是一种思维模式的巨大转变,这种转变甚至可以概括成:面向过程的编程模式做的是动词(功能)的分解,面向对象编程做的是名词(对象)的分解。若要理解面向对象思想,首先要理解抽象的概念和方法,这是学习面向对象编程的前提和基础,因为面向对象是一种思想和模式,远高于编程语言本身。抽象是具体到一般的过程。虽然它是一个简单的概念或者方法,但是要领悟其中的涵义不能单停留在编程语言上,应该用一种逻辑思维的角度来思考抽象是什么。接下来考虑实现抽象的方法,比如分类,就是一种抽象,除了对静态属性特征抽象外,还要考虑类的行为特征以及类间的交互方式,这样的抽象才较完整。抽象的思想建立以后,就容易理解继承和多态。最后,要让学生了解这些知识的最终目的,比如软件复用、需求的变化,这都是抽象的主要目的。
(一)注重程序思维的形成
新生头脑里几乎没有程序的思维习惯。按照奥苏贝尔的认知结构学习理论和构建主义的学习理论,学生作为学习的主体,与学习客体的交互中,构建自己的知识结构[5]。教师在教学过程中必须让学生具有明确分析和解决问题的整体思路,而不仅仅是知识点的传授。程序设计思维并不是一朝一夕就能够形成的,依赖于理性的事件。学生要运用算法描述自己的解题思路,并通过计算机表达出来,最后经调试才能验证思路的正确性。按照西蒙的观点,学习就是系统在不断重复的工作中,对本身能力的增强或者改进,使得系统在下一次执行任务或者类似任务时,会比现在做得更好或效率更高[6]。因此,只有反复上机实验才能训练程序思维。
(二)训练题目分析能力
在编程训练过程中还存在这样的情况:程序设计语言已熟练掌握,范例程序也能读懂,简单的数值性计算问题也可以独立编程求解,但是面对一个真正的应用问题时,仍不知从何入手。他们所反映出来的问题就是逻辑思维能力的欠缺。面向对象程序设计教材里,绝大多数习题都已给出明显的算法,比如1到100的累加和、华氏温度到摄氏温度的转换等题目,从软件工程角度,这类题目的需求分析和系统设计已完成,学生的任务就是程序实现。但还有一些应用题目并没有给出明显的实现方法,需要经历需求分析和系统设计两个步骤,比如“猴子选大王”问题。用程序实现这类问题,就是要训练学生的问题分析。
(三)训练逻辑思维能力
从初学者看待编程,往往注重语句和语法,并认为照搬教材例子就可以编出程序。一旦要求用程序去实现新的类型题目时,往往无从下手,没有任何思路,或者仍旧照搬那些早已不合时宜的例子。其真正原因还是没有把逻辑架构和编程解题思路放在学习重点上,不具备编程的抽象思维能力。程序设计是逻辑思维比较缜密的一门学科,需要勤加思考,只读别人的程序或者没有自己的分析都是不可取的,通常建议新生在做编程练习时暂时摆脱教材,独立思考。此外,程序设计是一门涉及知识领域比较宽泛的学科,软件从业者更是从工程的角度来看待一个软件的设计和生产过程。教师在教学过程中应该不断地灌输这种思想。
(四)加强上机实验环节
编程能力不仅体现在思路上,还体现在动手能力上。动手能力差是新生普遍存在的问题,程序编译时出错后不知所措,更觉得老师没讲过计算机英语,看不懂英文错误提示理所应当。久而久之就会演变成不喜欢动手,最后造就了众多的编程“思想家”,调试程序则蜕变过成了“想程序”。衡量编写程序能力的一个重要指标就是调试程序的能力,这要求教师在实验指导书中要明确程序调试的目的和要求,并在学生上机实验时亲自指导,获得学生上机的第一手反馈才能知道问题所在,才能不断改善理论课的教学方法。
(五)精选实验题目并提高趣味性
学习态度决定最终的学习效果,新生刚入学,学习态度都很认真,一旦在该门课陷入困境并产生厌烦情绪,学习由主动骤然变为被动,学习效果可想而知。为了提高编程能力,加强学习热情和兴趣,在编程题目的选择上要下足工夫。教材上提供的基础编程,基本都是已给出算法,学生的任务就是实现算法,无需做需求分析,不仅枯燥而且也缺乏挑战性和趣味性。应该选取一些有实际应用的题目,经简化后作为实验题目,明确程序的用途后,可调动学生的思维积极思考需求。
培养新生运用所学知识解决实际问题,并增强对程序设计的理解并体验团队的合作精神,可通过课程综合实训的方式进行[7]。对于综合实训的内容安排、指导以及考核都要以综合实训为目的。在对实训内容安排上,综合考虑题目难度、实用价值以及学生的兴趣,由学生按小组自由选取题目,最后形成实验报告。此外,有些学生思想活跃,希望按照自己的想法实现自拟题目,可由教师把关并给予大力支持。
实训环节做得好,可促使新生强烈的成就感和自豪感,这是最好的原动力,可以很好地激发他们的潜能,使他们的算法设计能力、程序设计能力和程序调试能力得到快速的提升,因此确定一个能激发学生兴趣的题目很重要。
对比几届的新生的实施效果看,通过注重初学教育,加强课内实践,重视综合实训,并且严格实训组织和内容选择,不仅能提高学生对面向对象的理解,还能提高程序设计的兴趣,并极大加强了学生的实践动手能力以及解决问题的能力,培养了学生的创新精神。
[1]吕雅丽.面向对象的数据结构课程教学改革的研究与探索[J].现代企业教育,2012(20):123-124.
[2]张海林.计算机专业中的C语言教改方案探讨[J].中国校外教育,2010(4):168.
[3]Booch,G.面向对象分析与设计(第3版)[M].北京:电子工业出版社,2012:20.
[4]龙军.面向对象程序设计中类和对象教学方法的探讨[J].新教育,2012(10):50.
[5]王鹏远,苏虹.高校非计算机专业C语言教学改革和实践[J].计算机教育,2011(2):15-18.
[6]刘儒德,陈琦.当代教育心理学[M].北京师范大学出版社,2007(7):119-120.
[7]朱建凯.普通高校计算机专业实训教改探索[J].长沙大学学报,2009(5):112-113.
An approach to improve object-oriented programming ability of freshmen
Li Hai-bo
(College of Computer Science&Technology, Huaqiao University,Xiamen Fujian,361021, China)
Object-oriented programming is usually a required course for freshmen, is an important foundation of computer science courses. In recent years, aiming at many exposed problems in teaching process, by analyzing the characteristics of college freshmen thinking and course characteristics, some appropriate countermeasures are proposed. That is, starting from the transformation of mode of thinking, training, programming skills, reinforcing training curriculum. The approach can trinity improve freshmen programming capabilities fundamentally. By contrast, the programming capability of several sessions freshmen has improved significantly.
Object-Oriented; programming; freshman
G645
A
1000-9795(2014)02-0143-02
[责任编辑:刘丽杰]
2013-12-15
李海波(1972-),男,黑龙江哈尔滨人,副教授,从事计算机应用技术研究。