Java程序设计教学方法与考试模式研究
2014-05-04韩慧王春玲孙俏陈志泊
韩慧 王春玲 孙俏 陈志泊
摘要:在Java理论课程教学方法的研究与实践方面,提出推行“学生为主体,教师为主导”的研究型课堂教学模式、进行对比教学、引入Java的新动向和新应用等措施激发学生的学习积极性;在实验课程教学方法的研究与实践方面,介绍如何设计由简到繁、具有原创性的实验,鼓励学生从不同的角度思考问题和实现任务,培养学生的自主学习能力;在考试模式的研究与实践方面,探讨如何采用合理的考试模式、体现过程考核的重要性、优化考试内容等,更加合理地评价学习效果。
关键词:Java程序设计;对比教学;启发式教学;类库学习
0、引言
现阶段,Java程序设计在教学方法和考试模式方面存在一些不足之处。在教学方法上,授课方式还是采用以教师为主体的教学模式,教师没有引导学生积极主动地参与到课堂教学活动中,容易导致学生被动接受和不善于思考,从而降低学生的学习主动性和积极性;教师在授课过程中与学生的讨论和沟通不够,导致教师不了解学生对所学知识点的掌握程度;课程与发展前沿、应用领域的结合不够紧密,导致学生对所学课程的应用不明确;在实验环节中,实验的设置通常是一个实验对应一个章节的知识点,跨章节的综合实验较少,导致学生在面对大的任务时没有思路,不知从哪方面人手,无法将所学内容自如地应用到实际领域中。在考试模式方面,纸制试卷考核和机考方式各有优势和不足。
针对上述问题,笔者从理论课程教学、实验课程教学和考试模式3个方面,探讨如何整合和优化Java程序设计课程的教学方法和考试模式,使其更为合理,从而有效激发学生的学习积极性,培养学生主动思考和解决问题的能力以及创新和实践能力。
1、理论课程教学方法的研究与实践
1.1 推行“学生为主体。教师为主导”的研究型课堂教学模式
现有的教学方法还是以教师讲授为主,容易导致学生学习兴趣不高,因此必须改革传统的教学方法,推行“学生为主体,教师为主导”的研究型课堂教学模式。教师授课不能只局限于让学生学会表面内容,从而停留在简单使用的阶段。教师在课堂上要采用启发式教学方式,多问为什么,培养学生主动思考问题的意识,引导学生理解课程知识点深层次的内容。对于每一个知识点,教师需要精心设置一系列巧妙的环环相扣的问题,增强教学过程的趣味性,使学生积极地参与其中,在互问互答中自觉、主动地掌握所学知识。例如,学生在学习TreeSet
……
TreeSet
//tree调用add( )方法依次添加多个字符串
tree.add("milk");
tree.add("coffee");
tree.add("apple");
tree.addCegg");
tree.add("noodle");
//使用Iterator
Iterator
while(t,hasNextO)
{
String s=t.next0;
System.out.println(s);
}
……
上述程序可以将多个字符串按照字典序由小到大输出,即apple coffee eggmilknoodle。学生基本都能编写上述程序,但是教师不能到此止步,还应继续提问:为什么tree对象中的各个字符串可以按照字典序输出?然后由此继续讨论,引出tree的结构是如图1所示的平衡排序二叉树(序号①~⑤表示tree添加各个节点的先后顺序)。
图1中,任一节点的左子树(左分支)都比该节点小,右子树(右分支)都比该节点大。读取时,要从根节点“milk”开始,向下遍历到最底层的左子树节点“apple”,之后按照图1中虚线的方向顺序读取,再按照实线的方向顺序读取,最终将字符串按照字典序读取出来。
该例子不仅让学生学会如何进行程序设计,还能让学生了解底层的原理,增强学生主动思考的意识。因此,教师需精心选择知识模块,引导学生最大限度地参与课程的各个环节,包括授课材料的搜集、讨论、筛选、讲解以及问题的释疑、分析总结等,充分调动学生的学习积极性和主动性。
1.2 进行对比教学,加强学习效果
(1)注重Java语言和先修课c++的对比教学,重点讲解两者之间不同的知识点,让学生在深刻理解Java的同时,更好地巩固c++相关原理。
①基础语法部分。教师可以重点讲解Java与C++处理数组的不同方式。C++把数组作为基本变量,在声明数组的同时为其开辟内存空间,并且数组的长度不能改变;而Java将数组作为一种特殊的类处理,使用new运算符为其开辟内存空间,并且数组的长度可变,令编程更加灵活。此外,与c++不同,Java中的基本类型变量(如int,float,double,char等)都有对应的封装类,即Java中的一切都可以当做类处理,因此Java更符合面向对象的思想,是更纯粹的面向对象编程语言。
②面向对象原理部分。教师可以重点讲解lava与C++关于继承的不同处理机制。Java支持单重继承,即一个子类只能有一个父类,其优点是程序结构比c++简单、代码的可靠性高,缺点是有些情况下不能像c++的多重继承那样将问题的复杂性表达完整。为了克服单重继承的不足,Java提出了接口(interface)的概念(其中只包含抽象方法和常量),一个类可以通过实现多个接口模拟多重继承。教师还可以将Java中的接口与c++中包含虚函数和常量的类进行对比讲解,使学生更容易掌握和理解。
(2)给定任务,鼓励学生从不同的角度思考和实现,并且将实现的结果进行对比。例如,对于正整数36168,从个位开始,依次输出每个数位上的数字。
对于上述问题,可以使用普通变量对10求余的方法实现,如下所示:
intx:
x=reader.nextInt( );//从键盘上输入一个正整数x
do{ //通过循环中的求余和除法操作可以按顺序输出个位、十位……上的数
System.out.print(x%10+”);
x=x/10:
}while(x>O);
此外,使用字符串类(String)也可以实现,如下所示:
inti:
String s=reader.nextLineO;//从键盘上输入一个正整数,将其作为字符串处理
char a[ ]=s.toCharArray( );//将字符串s转换为字符数组a,a[0]存放个位数,依此类推
for(i=O;i System.out.print(a[i]+""); 上述两种方法都可以输出“86163”,但是实现的角度不同,前者使用基础语法部分中求余的概念,后者使用常用类中的String类。通过从多种角度思考问题,学生开阔了思路,将所学知识融会贯通,加强了学习效果。 1.3 在课程中引入Java的新动向和新应用 现阶段,教师将授课重点放在对Java语法和程序设计原理的讲解上,所用案例多数都是与具体知识点对应的小例子,与Java的发展前沿、应用领域结合得不够紧密,导致学生对所学课程的作用不甚了解。教师在授课时应该将理论联系实际,从后续课程和就业市场中提炼需求,将Java的新动向、新应用、新特性及其与业界的衔接等转变为授课重点。例如,教师在讲授某个知识点时,以一个实际的应用项目为依托,向学生介绍对应知识点在项目中的具体体现,让学生体会Java与应用的密切关系,提高学习兴趣,而且相信自己学完该课程之后,也能做出可以应用于实际的项目,大大增强自信心和提高学习积极性。 2、实验课程教学方法的研究与实践 2.1 精心设计实验内容,提高学生实践能力 Java实验课程是锻炼学生将所学知识点进行综合运用,提高其动手能力和实践能力的有效途径之一,因此,如何针对学生特点设计合理的实验内容,有效地帮助学生巩固所学知识非常关键。 (1)实验课程中存在的一个显著问题是学生面临所给任务时,不知从哪方面人手,无法将所学内容自如地应用到实际领域中。针对这一问题,教师可以设计阅读为主型实验和编程为主型实验,由简到难,循序渐进地提高学生的程序设计能力。首先,学生做阅读为主型实验,给出部分源代码,学生填写剩余的源代码,培养阅读和理解源程序的能力,从而掌握其中涉及知识点的含义和用法;然后,学生做编程为主型实验,只给出任务描述,学生独立完成实验的设计和实现,加强实践能力。 (2)学生面临所给任务时,不愿意主动思考问题,而是希望从网络或者其他途径找到现成的解决方法。针对这一问题,教师在设计实验时要注意题目的原创性,令学生不能从网络上直接找到答案,即使能找到代码也必须作出较大修改,才能完成任务。例如,猜数游戏是一个经典实验案例,笔者在原案例基础上附加个性化前台界面、随机退出游戏机制、重复玩游戏机制。学生无法找到完全符合的代码,必须主动思考才能实现任务。 (3)设计合理的跨章节综合实验,或者以项目为依托,将其划分为不同的功能模块,让学生以分组的形式完成其中一个模块的设计与实现。另外,每组不能只考虑自己的模块,还需要考虑和其他模块的连接和协调,这样才能将各模块有效地整合在一起。因此,这样的实验内容可以锻炼学生的创新思维和团队协作能力。 2.2 加强类库学习,培养学生的自主学习能力 Java提供的类库性能稳定、效率高、具有很好的重用性。Java语言的各个重要知识点,如常用类、异常处理、输入/输出流、多线程、网络编程等在类库中都有对应的包(package),因此类库的学习和使用非常重要。由于课时和篇幅的限制,理论课程和教材只能对类库中一部分类的特性和方法进行介绍,其余的要靠学生自主学习。 针对上述问题,教师可以设计一些实验,其中的部分代码需要理论课程或者教材中未讲到的类实现。我们鼓励学生通过这些实验自主学习类库内容,并且结合Java运行平台的联机帮助或搜索引擎等资源,将自学内容应用到实际问题中。例如,对于输入/输出流中的对象流,教材中只讲解将已知数量的对象信息写入文件和从文件读出的操作。笔者在设计这一部分实验时,要求学生对未知数量的对象信息进行输入和输出。学生通过自主学习完成任务后,学习兴趣和自信心大大增强。 3、考试模式的研究与实践 我们在教学过程中研究适合Java程序设计课程的科学的考试模式,注重过程考核和学生能力的评价,优化考试内容,以更加有效地检验学生的学习效果。 (1)选取合理的考试模式。北京林业大学对于Java程序设计的考试模式是在2011年之前采用纸质试卷考核方式,2011年之后采用机考方式。两种考试模式各有优势和不足,前一种考试模式可以有效、细致地考查学生对所学理论知识点的掌握程度,但是无法合理地考查学生在规定时间内的程序设计能力;后一种考试模式注重考查学生在规定时间内的编程、调试、纠错、优化等能力,但是考查的知识点不够全面。因此,教师需要结合两种考试模式的优点,对学生的学习效果进行全面考查。 (2)注重过程考核。现阶段的课程考核方式是考勤+实验+期末成绩。除了传统的考核方式,教师还应适当增大阶段化学习效果在考试评价中所占的比例,注重过程考核。例如,考查学生主动参与教学环节的程度、利用工具和综合创造等技能、创新意识和分工协作能力、分组成员在团队中的工作量以及增加阶段化在线测试的次数等。 (3)优化考试内容。现有的考试内容通常是一道试题反映一个或者一部分知识点,教师应该精心设计考试内容,使其能够贯穿多个知识点,反映出Java语言的精髓。此外,适当增加能够体现Java新特性、与产业界紧密相关的试题,考查学生的综合应用能力。 4、结语 除了上述考试方法与考试模式的研究与实践外,教师还应该将教学与科研相结合,对于有兴趣和学有余力的学生,要引导他们扩展知识量,学习课程以外的内容。例如,教师可以设计附加实验,让有能力的学生完成必做实验之后,再做有一定难度的附加实验;鼓励学生参加有影响力的计算机程序设计大赛,通过富有挑战性的题目,培养学生的团队合作精神和创新意识;鼓励学生积极申报大学生创新创业训练计划项目或参与教师的科研项目,将Java作为有效工具真正应用到实际领域中,促进学生实践能力和创新性思维的培养,提高学生的应用能力,最终在实际应用中检验教师的教学效果和学生的学习成果,实现理论与实践的有效结合。