APP下载

兴趣导向的第三方库案例教学探索与实践
——以经管类专业Java程序设计课程为例

2023-07-16韩延明

软件导刊 2023年6期
关键词:经管类程序设计程序

韩延明

(西南财经大学 计算机与人工智能学院,四川 成都 610074)

0 引言

Java程序设计课程不但是计算机相关专业的专业基础课,还是许多经管类专业的一门热门选修课。计算机相关专业开设Java程序设计课程的目的是使学生能建立面向对象编程的计算思维,实现以Java为核心的应用程序开发。经管类专业开设Java程序设计课程的主要目的是满足信息化素养培养需求,使学生经过学习与训练,具备用程序语言编写具有一定实用价值的数据处理、文件操作等实用程序的能力[1]。针对这些素养和能力要求,Java程序设计课程教学模式必须进行变革,教师须改变传统的教育理念,在课程教学与实践中注重提升学生学习兴趣,培养学生的各项能力。

国内多所高校针对程序设计课程教学模式进行相应改革,并取得了一系列成果。石文兵等[2]在教学过程中构建、实施了一种高级语言程序设计的智能化教学框架,促进了课程教学质量的全面提升。李飞等[3]针对非计算机专业学生的特点,给出一种基于教学内容特点的混合式教学体系,提高了学生的学习积极性和兴趣,进而提高学生的学习效率。张文慧[4]在非计算机专业C语言程序设计教学中,为提高学生学习兴趣,培养学生用计算机解决实际问题的能力,进行混合式教学改革。罗迅等[5]围绕程序设计基础能力培养目标,调整开课计划,丰富教学内容,增加实践环节,加强了在线教学平台的使用。通过这种改革,有效提高了学生代码的数量与质量。李胜岚等[6]改进了Java课程授课形式和考核方式,致力于培养应用型人才。然而,无论是智能化教学框架或是混合式教学改革,都是在增强线上教学环节上做文章,随着线上授课的增加,教师和学生在课堂上面对面交流随之减少,教师和学生都无法充分体验和感受大学课堂的真正意义。冯向萍[7]将斯坦福大学编程类课程教学模式应用于Java课程教学中,激发学生学习兴趣,锻炼学生编程技能。但是,计算机专业的教学模式并不完全适合经管类专业的学生。黄天羽等[8]在Python课程教学中提出“以图形牵引兴趣,开展Python案例教学”的教学观点,图形化的案例有助于学生保持较高的学习热情,取得良好的教学效果。Python语言的生态资源丰富,Python程序设计教材可提供丰富的图形案例吸引学生的学习兴趣,但Java程序设计教材上可吸引学生兴趣的案例较少,有必要引入第三方库充实教学案例,让课堂更有趣。

本文就西南财经大学经管类专业Java语言程序设计教学中存在的问题进行分析并尝试改进教学模式,探索和尝试在Java程序设计教学中引入第三方库,以更好地激发学生的学习兴趣并提高其学习效率。

1 Java程序设计课程教学现状分析

程序设计及应用是西南财经大学经管类专业一年级学生的通识基础课,有Visual Basic、Python、C++和Java四门语言供学生选修,四门语言的教学实施方案有公共的部分,包括高级程序设计语言的基本元素、程序的基本结构、数组和文件操作,其他内容为各门语言的特色部分。

Java语言涉及的知识点和概念较多,再加上学时有限,学习难度相对较大,学生面对抽象的概念和复杂的语法规则,往往不知所措,产生畏难情绪,这时需要进行科学有效的引导,让学生尽快度过编程语言的难关,体验到学习带来的成就感。教学中的两条主线是理论和实践。在理论教学中要选取恰当的案例,通过对案例的讲解分析,让学生分层次地理解相关理论知识。实践主要是让学生独立或在教师指导下完成与理论内容紧密联系的上机任务,巩固所学知识,提高动手能力,加深对理论的理解。

在Java教学实践过程中,存在以下问题:

(1)教学时间短、知识点过多、教学进度过快、缺乏学习乐趣、考试成为教学重点,导致部分学生对Java语言产生畏难情绪,实践能力得不到充分培养。2019年之前,学校执行每学年三学期制,春季学期和秋季学期的教学时间只有16周,每周3课时,如果凑巧赶上公共假期,总教学时数往往只有13~14周。最初制定教学大纲时对知识点又贪多求全,教学中教师授课的进度一直比较快,未充分考虑学生的接受能力,学生在学习中没有享受到学习的快乐,反而对Java语言产生了一定畏难情绪。再加上部分学生未能深入理解程序设计课程的教学目标,学习的主要目标是拿到满意的成绩,对教师设计的案例和布置的任务兴趣不浓,考试成了教学的指挥棒,教师不得不把大部分精力用于讲解教纲要求的考核内容,放松了对学生实践能力的培养和训练。

(2)部分学生缺乏主动性,对开放任务不知所措,不愿意主动获取知识,只关注教学大纲范围内的内容。部分学生学习比较被动,教师讲什么,就跟着做什么,如果教师布置了开放性的任务,不指定具体做什么、如何做,学生往往不知所措。还有部分学生不愿主动获取知识,如果教学内容不在教学大纲范围,学生就没有太多兴趣去学习了解。

(3)课程时间短,教学案例过时,学生缺乏实践机会,导致对Java语言实用价值产生疑问。由于课时相对较少,等学生储备了足够的知识和技能时已临近期末,学生要忙于期末备考,没有时间精力认真完成后期布置的实践任务。此外,课程选用的教学案例多年未变:在屏幕上打印HelloWorld、输出九九乘法表、求解一元二次方程等,这些案例多数基于字符界面,与现有电子产品的图形化界面差距巨大,学生完成相关任务时,经常会质疑“Java语言是否有实用价值”,面对这样的疑问,“Java能编写跨平台应用程序”之类的回答显得苍白无力。

在日常教学中,课程组采用多种教学手段:为加强课堂互动,部分内容采用翻转课堂教学模式;为培养学生理论联系实际的能力,在课堂讲授中采用案例教学;为激发学生学习积极性,在上机实验中采用任务驱动式教学。

综上所述,Java程序设计课程教学中出现的这些问题与学生的学习兴趣和热情密切相关,问题的关键是找到合适的案例和任务激发学生的兴趣。案例和任务要既能体现知识点,又能提升学生的学习兴趣,如果选取能够激发学生学习兴趣的案例和实例作为课堂讲授的示例和学生的上机任务,可以吸引学生主动参与到教学过程中。笔者在国内率先尝试在经管类专业的程序设计课程教学实践中引入Java第三方库,用丰富的教学案例激发学生学习的兴趣。

2 教学实践中引入Java第三方库

2.1 在Java程序设计教学中引入第三方库的缘由

Java语言入门稍难,想成为熟练的程序员需要较长时间的训练。对于非计算机专业学生而言,Python语言语法简洁,入门很快,但就软件本身的结构而言,Java更灵活、更精确,Python的优势在于丰富的第三方库,但Python第三方库的安装配置略显复杂。其实,Java也有很多第三方库,作为近10年的首选编程语言,Java的优势更明显。学习编程,不一定非要从无到有,从0开始构造所有代码,好比建造楼房,早就不需要一砖一瓦修建了,很多模块化的预制件可以在建筑工地之外做好。约书亚·布洛赫(Joshua Bloch)在《Effective Java》中说过:“重新发明轮子没有意义!我们宁愿使用久经考验的库,也不要时不时编写我们自己的例程[9]。”经管类专业的Java程序设计课程没有必要贪多求全,建立起基本的面向对象程序设计概念后,任课教师可以针对学生的专业特点选择合适的教学内容,对非必须掌握的内容,没有必要让学生从无到有构建完整的程序,教师可以事先搭好程序框架,引入第三方库,让学生自行添加“关键代码”,降低Java程序设计课程的入门难度,让学生更有兴趣和成就感。

2.2 Java的第三方库

Java语言从1995年正式发布至今已有27年,经过多年发展,Java语言的生态环境非常健全,几乎可以完成任何场景下的软件开发任务。Java语言的生态体系非常庞大,除Oracle公司提供的JDK环境外,Apache、Google、Spring等公司(或组织)提供了非常成熟的第三方库,Java开发者可以利用这些优秀的第三方库解决各种通用问题,提高开发效率。

Java语言的第三方库可以分为Java核心扩展、Web框架、数据库、JSON、图表和Office文档处理等几类[10]。常用的Java第三方库在各种应用程序中被广泛使用,计算机专业的学生需要熟悉Web框架、数据库(持久层)等系统开发第三方库,经管类专业的学生侧重于数据处理和数据分析,在教学中可以将Java核心扩展、图表和Office文档处理这几个第三方库作为教学案例的补充内容。

除常见的第三方库外,斯坦福大学和JTF工作组在Java教学中也开发了用于程序设计教学的卡雷尔库和JTF ACM库。

2.3 案例1:卡雷尔机器人的世界

20世纪70年代,斯坦福大学研究生Rich Pattis设计了一个简单的Java编程环境,在这个环境里,程序员可以给一个名字叫卡雷尔(Karel)的机器人发送消息,卡雷尔根据消息作出回应。卡雷尔(Karel)是捷克剧作家,他的作品Rossum's Universal Robots为英语世界带来了Robot(机器人)这个单词[11]。

卡雷尔机器人只能在一个矩形世界里活动,图1所示是一个简单的矩形世界,左下角就是卡雷尔机器人,卡雷尔右边的菱形是蜂鸣器(Beeper),卡雷尔可以接受前进(move())、左转(turnLeft())、放下蜂鸣器(putBeeper())和拾起蜂鸣器(pickBeeper())这几个命令,通过调用这4个命令让卡雷尔在它的世界里行走、放下或拾起蜂鸣器,学生可以据此设计实现一些简单又有趣的游戏。

Fig.1 Karel’s simple world图1 卡雷尔的简单世界

卡雷尔机器人是一个典型的对象,它能接受的命令就是对象的方法,借助于卡雷尔机器人对象,学生可以轻松地掌握如何调用方法,与游戏相似的界面和场景激发了学生的学习兴趣,学生在娱乐中接受了面向对象编程思想的培养和训练。

卡雷尔机器人的矩形世界的大小、障碍物等可以自行定义。图2所示是卡雷尔的跨栏世界,如果只用move()、turnLeft()两个方法实现跨栏程序,需要80多行语句才能实现,而利用循环语句和自定义方法,只需要20多行代码就能实现完整的功能。通过编写跨栏程序,学生可以充分理解3种程序结构和自定义方法对相关功能的封装的必要性。此外,卡雷尔的世界可以有很多变化,每个学生都可以自行定义自己的卡雷尔世界。案例1对学生的要求是自定义卡雷尔世界并使用控制语句控制move()、turn-Left()等方法设计游戏,大部分学生都能独立完成任务,对Java程序设计有了全新的认识。

Fig.2 Karel’s hurdles world图2 卡雷尔的跨栏世界

2.4 JTF ACM库及其在教学中的应用

2.4.1 JTF ACM库

Java的JTF ACM库是ACM Java工作组(the ACM Java Task Force)从计算入门教育的角度对Java语言相关语法、API和工具进行简化,是为Java语言初学者开发的稳定的教学资源。通过使用ACM库,让初学Java语言的学生免于记忆复杂的Java语法规则,使得Java学习变得容易上手,而不至于因这些复杂规则而让初学Java编程的学生不知所措。

Java语言作为能够跨平台使用的计算机语言,在所有编程语言中长期名列前茅,但是Java的语法规则相比Python等语言又比较复杂,这种复杂性可能成为学生在尝试理解语言结构时的重大障碍。

Brian Kernighan和Dennis Ritchie在他们的经典教材《The C Programming Language》的第一章指出:学习一种新的编程语言的唯一方法是用它编写程序,对于所有语言的初学者而言,编写的第一个程序几乎都是相同的,即:

请打印出下列内容

hello,world

本课程选用的Java教材的第一个程序也正是这样的HelloWorld程序。在控制台上打印一条消息,在20世纪90年代初可能是一个适合的例子,但如今的学生已经习惯了在具有精美的交互式图形界面的电子设备上运行各式各样的程序,他们很难理解,都进入21世纪了,为什么教材的大部分内容都是基于字符界面的控制台程序。

当然,像Java这样现代化的面向对象语言,应该可以做得更好。JTF ACM包提供了强大的图形界面接口,让Java初学者可以用简单的语法,快速编写基于图形界面的程序,告别单调的字符界面,让学生对Java程序设计这门课程的学习产生浓厚的学习兴趣和强烈的学习欲望。要在项目中使用JTF ACM库,与使用其他第三方库的方法类似,在项目的类路径中包含JTF ACM库的JAR包即可使用。

JTF ACM库包括:acm.program(简单的面向对象程序模型)、acm.io(对称处理传统控制台I/O和对话I/O的输入输出模型)、acm.graphics(图形对象的扩充库)、acm.gui(支持图形用户界面开发的一些新类)等,这些包里包含若干继承自JDK的基础类库。[12]

2.4.2 案例2:代替传统Hello World程序的JTF ACM库入门实例

JTF ACM包里的类封装了复杂性,调用方法非常简便,本文以HelloWorld程序为例介绍JTF ACM包的使用,如下列3个程序片段和图3—图5所示运行结果。

Fig.3 Running result of HelloConsole.java图3 HelloConsole.java运行结果

Fig.4 Running result of HelloDialog.java图4 HelloDialog.java运行结果

Fig.5 Running result of HelloGraphics.java图5 HelloGraphics.java运行结果

类HelloConsole、HelloDialog和HelloGraphics分别继承了ConsoleProgram、DialogProgram和GraphicsProgram这3个类,均源自ACM包里定义的Program类。HelloConsole和HelloDialog的实现代码完全相同,区别在于继承的父类不同。HelloGraphics的实现也比传统的Java Swing简洁,初学者只需要知道如何用类的构造方法创建新对象实例和调用setFont和setColor等方法,就能很方便地改变文字的坐标、字号、字体和颜色。案例2要求学生验证3个程序,并选择自己喜欢的界面风格,学生对HelloGraphics更感兴趣,兴致勃勃地变换文字的位置,修改文字的字体、大小并改变其颜色。通过编写验证案例2程序,学生发现Java坐标系和数学课上坐标系的不同:原点在左上角。Console-Program和GraphicsProgram这两个类的引入,使得Java程序设计课堂能够远离字符界面,在丰富多彩的图形用户界面下展示各种应用。

2.4.3 案例3:绘图与动画效果

acm.graphics包提供了丰富的绘图工具,与Java Graphics类的实现方式不同,acm.graphics包直接提供用于绘图和各种图形类:GLine(画线段)、GRect(画矩形)、GPolygon(画多边形)、GImage(处理图像)等,这些类均继承自JObject类,除绘制图形和设置颜色的方法外,还有move()(移动)和pause()(延时)这两个方法配合实现动画效果。在教学过程中,学生掌握类的实例化知识后,就可以利用这些类创建图形对象,绘制丰富的图形。

美丽校园案例程序使用GRect类和GOval类绘制了矩形和圆,如图6所示。程序主要代码片段如下:

Fig.6 Running result of beautiful campus case program图6 美丽校园案例程序执行结果

run方法中,前4条语句绘制了一个矩形框:

(1)使用GRect构造方法生成新的GRect实例,其中RECT_X、RECT_Y、RECT_WIDTH、RECT_HEIGHT为控制矩形的常量:(RECT_X,RECT_Y)为矩形坐标,RECT_WIDTH、RECT_HEIGHT为矩形的长和宽。

(2)setColor和setFilled方法给矩形对象发送消息,与案例2类似,setColor消息可以改变矩形颜色,setFilled决定矩形的填充方式。

(3)add方法将矩形添加到图形窗口对象。

与前4条语句类似,后5条语句绘制了一个圆。

move方法可以调整图形图像的位置,pause方法可以让程序暂停指定毫秒的时间,调用pause方法对于实现动画是必不可少的步骤,计算机运行得如此迅速,如果不减缓移动速度,肉眼无法看到移动效果。将以下包含move()和pause()方法的代码加入美丽校园程序的run方法内,可实现圆向右下方移动50像素的动画效果,如图7所示。

Fig.7 Animation effect of beautiful campus case program图7 美丽校园案例程序动画效果

案例3的示例程序对学生的吸引力非常明显,案例3的任务是自己动手绘制图形(或调用GImage类操控图像)、设计运动轨迹和控制动画对象,该案例极大地激发了学生的兴趣和创造力,绝大多数学生自行设计了背景和运动对象,重新规划了运动轨迹。案例3的示例巩固了程序控制语句和类与对象的相关知识,并介绍了计算机动画的基本原理,吸引学生进一步地深入学习相关知识,提升编程能力。

2.4.4 案例4:随机数案例

RandomGenerator类实现了一个简单的随机数生成器,该生成器允许客户端生成伪随机整数:双精度浮点数、布尔型和颜色。RandomGenerator类来自acm.util包,继承自java.util.Random。随机数案例程序使用GRect类绘制矩形,利用RandomGenerator类生成随机颜色,利用pause方法实现时延,程序在窗口中间放置一个正方形并每秒随机改变一种颜色,运行结果如图8所示,程序绘制矩形的代码和案例3类似,主要区别是颜色利用RandomGenerator类的nextColor方法设置。

Fig.8 Running result of random number case program图8 随机数案例程序执行结果

经管类专业分析研究的前提是要有数据,做模拟或者测试时总会用到大量的随机数据。JDK提供的Math.random()方法和Random类可以生成随机数,但对向量与矩阵运算稍显吃力。apache-commons-math3是Java的一种科学计算类库,提供了很多类和方法用于向量与矩阵运算,其中也有RandomGenerator类用于随机数的生成。案例4的扩展任务是阅读apache-commons-math3的相关文档,结合自身专业特点,探讨随机向量和矩阵的生成及计算,为以后经管类专业的分析研究做相关技术储备。

3 结语

对于任何学科而言,合适的案例总能给学生带来必要帮助。引入第三方库,丰富教学案例的目的是吸引学生的兴趣,同时也是传统案例教学法的拓展。直观的图形、生动的动画,第三方案例对Java语言能力进行了充分展示,使学生重新认识了Java语言,对程序设计课程也有了新的理解,更重要的是兴趣提升,越来越多的学生乐于动手编程,学习更具有主动性,部分学生对计算机专业产生了浓厚兴趣。西南财经大学2022年转专业相关数据显示,全校有18位学生申请转到计算机科学与技术专业。

在教学实践中,案例不是教学设计的全部,引入第三方库的案例教学,不仅仅是教学内容的重构,也为教学设计带来了更多的灵活性。信息技术更新迭代提速,程序设计课程在满足基本教学目标的前提下,引入新的第三方库案例能够让课程教学内容与时俱进,不仅仅局限于语言本身,而是在课程中展示完整的计算生态。

在经管类专业Java程序设计课程教学中,引入第三方库案例的Java程序设计课程教学效果良好。学校近两年课程教学中期评价表数据显示,86.7%的学生认为案例或作业等对学习效果提升很好。两年前程序设计及应用(Java)课程的开课班数仅剩3个,而2022年春季学期开课班数达到6个。期末考核暂时仍采用传统的闭卷考试,根据试卷分析表可知,多数学生能够理解并掌握面向对象的基本概念,各教学班的平均分数为81.2,也较2021年的79.3有所提升,也证明了这种教学方法的有效性。

猜你喜欢

经管类程序设计程序
基于SPOC的经管类专业混合式教学模式实践探索
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
试论我国未决羁押程序的立法完善
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
高职高专院校C语言程序设计教学改革探索
创卫暗访程序有待改进
PLC梯形图程序设计技巧及应用