“基础优先”策略下的高职Java语言课程教学改革探讨

2017-03-26 12:09杨晨霞涂风涛
职教论坛 2017年5期
关键词:问题驱动教学改革

杨晨霞+涂风涛

摘 要:“对象优先法”在历届SIGCSE(计算机科学教育)会议上一直受到鼓吹,而提倡“基础优先法”的呼声却很微弱。但近年來随着“对象优先法”在高职院校Java语言教学过程中遇到挫折,这一切才得以扭转。文章主要探讨在高职Java语言课程教学改革中采用“基础优先”的方法,并且以问题驱动的方式教授程序设计的概念和技术。通过实践检验,该教学方式提高了学生的面向对象编程能力。

关键词:基础优先法;问题驱动;教学改革

作者简介:杨晨霞(1978-),女,江西瑞金人,南昌师范高等专科学校讲师,研究方向为计算机应用;涂风涛(1976-),男,江西南昌人,南昌师范高等专科学校讲师,研究方向为网络安全。

基金项目:江西省高等学校教学改革研究课题“基于CDIO理念的创新型高技能人才培养模式的研究与实践——以高职院校软件专业为例”(编号:JXJG-14-41-5),主持人:涂风涛。

中图分类号:G712 文献标识码:A 文章编号:1001-7518(2017)05-0071-03

随着全球软件服务外包和国内第三产业的快速发展,我国的软件行业成长迅猛,产业对人才需求旺盛。高职软件专业迎来发展机遇。Java是一种被广泛使用的面向对象程序语言(Object-Oriented Programming Language),有许多研究机构和公司采用Java来发展各种用于科学计算和商业的大型应用软件。因此,很多高职院校都把《Java语言程序设计》作为程序设计的第一门课程,使得学生可以站在计算机应用的前沿,并与计算机其它课程的学习相辅相成。由于Java在动态网页开发和安卓操作系统上的广泛应用,随着Internet的发展和终端智能手机的大量普及,每年我国有大量的IT企业需要招聘Java软件开发人员,但高职院校培养的计算机软件专业学生的程序开发能力与企业的要求存在很大的差距,因此进行Java语言课程的教学改革势在必行。

一、教学改革

(一)传统的教学策略——对象优先教学法

对象优先教学法从一开始就强调面向对象的编程和设计原则,这种教学法直接从对象和继承开始,然后才介绍程序设计的结构[1]。即在面向对象设计的环境中学习所有内容,包括学习程序设计的结构。它的优点是学习者能够在学习初段建立起面向对象设计概念,有利于后续的相关专业课程的学习。但它的缺点是提高了程序设计课程的入门难度,不仅要求学习者要掌握数据类型、变量、引用等基本概念,还需理解面向对象程序设计中的类的抽象和封装、继承和多态等抽象概念。就像大部分学生说的,对象优先教学法对我们来说是一种极大的挑战,需要在学习的开始就要掌握许多面向对象思想、概念与编程技能。但从整个教学反馈来看,一部分学生从开始充满兴趣,到感觉自己已经很努力了,编程能力却没有提高,从而产生畏难情绪,如果一旦没有跟上老师的教学进度,甚至会放弃。

(二)基础优先教学法

基础优先教学法是指在学习对象和类之前,首先介绍基本程序设计的概念和技术。在整个教学改革中采用了基础优先的方法,并且以问题驱动的方式教授程序设计的概念和技术。首先是学习程序设计的基础知识,其次学习面向对象程序设计的相关概念和内容,最后再使用面向对象设计方法构建具有异常处理功能和某些高级特性的图形用户程序(GUI)及applet。因此,对课程的教学内容进行重新规划(见图1)。

实践证明,对于初学编程的学生来说,首先学习语言基础逻辑、循环和数组这样的基本编程技术,并逐步精通是非常重要的。如果学生不能很好地完成过程化程序代码的编写,也将无法学好面向对象程序设计,学生扎实地掌握数据类型、控制语句、数组和方法会为学习面向对象程序设计打下牢固基础[2]。

在以基础优先策略教学时,首先使用过程化方案来解决某个问题,然后再演示如何使用面向对象设计方法来进行改进[3],从而使学生更好地理解面向对象程序设计思想,使他们从中学到如何更高效地使用面向对象程序设计方法。例如在介绍第一部分“程序设计基础”中的“基本数据类型和基本操作”时,我们设计了一个“计算圆面积”的简单程序。该程序读入圆的半径并显示其面积。程序将用变量存储圆的半径和面积,使用表达式来计算面积。教学目的是让学生掌握编写程序需要设计算法和数据结构,并要把算法(algorithm)转换为程序代码。通过问题我们让学生知道算法其实就是描述如何执行一系列操作来解决一个实际问题,它指定操作的执行顺序。算法可以帮助程序设计者在用程序设计语言编写程序之前进行规划。由此,学生可以很快地写出该程序的算法描述:①读入半径;②利用公式计算圆面积:面积=半径×半径×π;③显示面积,并完成相应代码的编写。

在讲解第二部分“面向对象程序设计”中的“对象和类”时,教师使用统一建模语言(Unified Modeling Language, UML)描述了一个与前例功能相似的Circle类和建立的对象,图2为使用UML图形符号表示的类和对象。

根据两个问题的对比,让学生明白像Java等面向对象语言不仅仍然具有面向过程语言的特点(程序=数据结构+算法),而且它还通过类的抽象和封装、继承以及多态增加了程序的模块性、清晰性、重用性和灵活性等有益特性。由于在面向过程程序设计中,数据和操作是分离的,所以需要把数据传递到方法中。而在面向对象程序设计中,却把数据和对于它们的操作放进一个叫做对象(object)的实体里,这种设计避免了许多在面向过程程序设计中遇到的问题。在对象的世界里,所有对象都与属性和活动联系在一起,因此面向对象程序设计是一种更贴切真实世界的模型组织程序[4]。因为使用对象可以增强程序的可重用性,方便软件的开发与维护,所以学生今后很自然都会以对象的观点来考虑Java程序设计,并把Java程序看成是相互合作的对象所构成的集合。通过Circle这个案例,就把面向对象程序设计是软件方法的发展必然这个问题向学生们非常形象地解释清楚了。

在学习“异常处理”时,我们把第二部分的Circle类的setRadius方法的参数newRadius设置为负数,这样在運行时会引起异常(exception),并导致程序非正常终止。通过实验我们告诉学生,作为一名合格的Java程序员,必需利用Java提供的异常处理功能去捕获和处理那些在程序运行时产生的异常,让程序更加强壮和稳定。所以要求学生对Circle类的setRadius方法进行改写,让该方法抛出一个illegalArgumentException异常,告知用户不能把半径设置成负数。通过该问题的解决,让学生掌握如何使用这些抽象类和接口,并按照它们的规范标准来设计应用程序。

在整个教学过程中,我们要让学生明白,程序设计的关键是解决问题,语法、类和对象只是其中一部分,而循环、数组和方法是解决问题的基本技术。从基本程序设计技术到面向对象程序设计存在着多种抽象层次,类只是其中一种抽象层次,在软件项目的设计和实现过程中应用抽象的概念是软件开发的关键[5]。因此,学生在解决问题时能够使用多种层次的抽象进行分析成为我们最重要的教学目标。所以,我们设计的教学案例和任务都是以解决问题为中心,这些例子很好地培养了学生们开发可重用类和方法,以及利用它们构建实用程序的思想[6]。

程序设计课程不同于其他课程,学生要从例子中学习、从实践中学习、从错误中学习,这需要花费大量的时间编写程序、调试程序并修改错误[7]。对于刚接触程序设计的学生来说,学习程序设计的基本目的就是培养描述问题的程序化解决方案的关键技能,并通过条件语句、循环和方法将方案转变成程序[8]。在教学过程中,学生如果掌握了循环、数组和方法等编写程序的基本技能,就能顺利地进入到面向对象程序设计的学习中,学习使用类的封装、继承和多态来开发面向对象的程序。学生如果理解了面向对象程序设计思想,学习Java编程就变成了学习Java的API,而让学生模仿例子并进行练习是学习Java API的最好办法。

实践证明,学习基本逻辑以及循环和逐步求精这样的基本程序设计技术,对于学生非常重要。像循环、方法和数组这样的基本概念和技术都是程序设计的基础,它们为学生进一步学习面向对象程序设计、GUI、数据库和Web程序设计做好了充分准备。

(三)问题驱动

问题驱动意味着教师把教学的重点放在问题的解决而不是语法上。通过使用一些有趣的问题使得程序设计的介绍也变得更加有趣。为了支持以问题驱动的方式来讲授程序设计,教师设计了大量不同难度的问题来激发学生的兴趣。这些问题涉及了很多应用领域,包括数学、科学、商业、金融、游戏、动画以及多媒体等。例如,在讲解多线程时,设计了一个储蓄程序,假设在程序中创建并启动100个线程,每个线程都是往同一个账户中存入一笔固定的金额。当所有的线程都完成时,却看到帐户显示的余额不正确,而且还发现余额的结果并不是可以预测的。这个问题向学生演示了当所有线程同时访问同一个数据源时,就会出现数据破坏的情况。其实这是多线程程序中的一个普遍问题,称为竞争状态(race condition)。经过学生们的一番讨论,我们得出要避免竞争状态,就是应该防止多个线程同时进入程序的某一特定部分,这个部分我们称之为临界区(critical region)。从而引入新课“线程同步”的概念。通过问题的解决,让学生掌握为了避免线程破坏共享资源,可以使用同步的方法或块,并帮助他们更好地理解一些抽象难懂的概念,像“同步方法在执行前需要获得一个锁。当同步方法是实例方法时,锁是在调用方法的对象上;当同步方法是静态方法时,锁是在方法所在的类上。”等内容。

二、教改效果

通过Java语言课程的教学改革与实践,学生的基础知识和编程解决问题的操作能力得到了提高,学习的主动性和积极性改善明显。学生能够运用面向对象程序设计的思想来分析问题,并将其进行抽象,辅以代码方式完成。通过教学改革,取得的主要教学成果有:

(一)提高了学生的计算思维能力

大学应以培养学生的计算思维为核心,使计算思维如同实证思维、逻辑思维一样,成为每个学生应具备的基本科学思维能力[9]。通过教学改革,提高了学生对实际问题进行概念抽象、问题求解和程式化描述的能力[10],这也是进行教学改革的一项重要内容,其中的关键就是计算思维能力的培养。

(二)提高了学生的动手实践能力

学习程序设计的窍门就是实践、实践、再实践,这充分说明Java语言程序设计是一门实践性很强的课程。通过布置由简到繁的任务,使学生建立起上机操作的勇气和信心,并让他们获得了解决问题后的成功感,培养了他们的动手能力和操作意识,提高了他们解决实际问题的能力。

(三)提高了学生的创新能力

在教学过程中采用了问题驱动方式,学生的主观能动性被充分地调动起来,学生更加积极地参与教学活动,这也激发了学生的创新能力,学生制作的部分软件作品在省内比赛中获奖,并且得到了相关企业的好评。

参考文献:

[1]王秀平.试论计算机科学入门课程中的对象优先教学法[J].现代计算机,2008(2):50-51.

[2][4]叶乃文,王丹.Java语言程序设计教程[M].北京:机械工业出版社,2010.

[3][5][6]梁勇.Java语言程序设计[M].北京:机械工业出版社,2008.

[7]陈昊.Java语言实验教学改革探讨[J].计算机教育,2009(10):148-150.

[8]刘松青.构建“Java面向对象程序设计”实践教学体系[J].计算机教育,2009(2):8-10.

[9]李廉.计算思维——概念与挑战[J].中国大学教学,2012(1):7-12.

[10]王卫生.基于CDIO教学模式的《Java程序设计》课程开发实践[J].软件工程师,2010(12):60-63.

责任编辑 时红兵

猜你喜欢
问题驱动教学改革
浅论教师课堂管理与调控能力的提升
优化初中语文阅读教学中的课堂提问策略
以问题驱动改进随机变量分布的教学
以计算思维为中心的数据结构教学方法探讨
“问题驱动式”生物高效课堂打造的做法
“问题驱动+能力提升”卓越课程建设与实践
中职学校“生本课堂”的调查研究与实践
高校三维动画课程教学方法研究
基于人才培养的技工学校德育实效性研究
现代信息技术在高职数学教学改革中的应用研究