任务驱动+过程反馈的Java教学方法研究

2021-03-15 05:31曹文平宁彬
教育教学论坛 2021年4期
关键词:任务驱动

曹文平 宁彬

[摘 要] Java程序设计课程是计算机专业的重要课程,不仅要学习Java的相关编程知识,更承担了让学生从面向过程到面向对象编程思想转变的任务。既要有理论知识的讲解,又要有Jdk内容的学习,一直是学生学习的难点课程。文章通过对教学过程中学生频繁出现问题的分析,设计了一套针对Java教学的方案,提出了任务驱动和过程反馈相结合的教学方式,针对不同的阶段设计相应的实例,并针对学生的反馈进行及时的修正,使学生更好地理解面向对象的基本概念和Java程序设计方法。

[关键词] Java教学;任务驱动;过程反馈

[中图分类号] G642.0   [文献标识码] A   [文章编号] 1674-9324(2021)04-0165-04    [收稿日期] 2020-07-16

一、前言

Java程序设计课程是系统介绍Java语言的基础知识及编程方法,使学生理解“面向对象的程序设计”思想的课程。这门课程要求学生在已经具有了面向过程的程序设计能力基础上,能够用面向对象的思想去分析解决问题。因此,课程不再是一门纯粹的语言类课程,而要承担转变学生思维方式的任务;同时由于Jdk库提供了丰富的类库,涉及GUI编程、网络编程、数据库编程和多线程编程,学生学习的难度较大。正是由于Java程序设计课程的这种特殊性,其教学过程有别于其他专业课。如何达到教学目的,让学生从整体和细节上掌握分析和解决问题的方法,让学生能够独立完成一个小型Java项目的设计和编程,是Java教学中的一个难点,也是一个重点。教学方法成为Java教学中重要的研究课题。

传统的教学方法已经不适应当前的人才培养模式。由于程序设计类课程的特殊性,即使将以教师为中心的教学模式变为以学生为中心的教学模式也无法达到人才培养的要求,因此应该结合多种教学平台和教学方式,形成合理的教学模式。目前很多教师进行了相关的研究:①引入了OBE的教学理念,设计了可以覆盖所有知识点的项目贯穿整个教学过程[1];②针对在专业课教学中存在的学生学习主动性不足和传统教学模式不能适应学生的差异化需求等问题,提出了一种个性化教学模式[2];③提出以项目教学为驱动的程序设计实践课程的翻转课堂+SPOC教学模式[3];④提出了“课程模块化+技能化”教学理念,以“懂、编、用”为教学目标,搭建完整的课程知识体系,保证“学、用”不断线,形成课程学习链[4];⑤提出以校企共建課程为依托的“项目引领、任务驱动、工学结合”分步更迭教学法[5]。笔者总结多年的Java教学实践经验,提出任务驱动、过程反馈的教学模式,通过学生每一轮的学习反馈,有针对性地进行下一轮学习,使学生能够较好地掌握相关内容。由于面向对象是一种思想,不局限于Java程序设计,具有通用性,因此本文从面向对象教学和Java程序设计教学两个方面进行论述。

二、面向对象的教学方法

面向对象是一种思想,是基于面向过程而言的。有别于程序设计的教学,重点在于理解面向对象的三大特征:封装性、继承性和多态性。思想的理解也需要Java程序为载体,所以教学中二者要结合起来。作为目前主流的设计思想,学生掌握该方法有很大的难度。在教学实践中,很多学生无法理解该思想,对于一些具体的问题仍然停留在面向过程的设计思想上。实际教学中面向对象的思想训练被很多教师忽视,将重点集中于Java的语法上,使学生无法完成从面向过程到面向对象思想的转变。

(一)面向对象的任务驱动

任务分为两个阶段,一是对封装性形式上的理解,完成形式上面向对象思想的转化;二是对封装性的实质理解和面向对象有别于面向过程的继承性和多态性的理解。具体内容如表1所示。

1.封装性的形式理解封装性的形式理解是对面向对象形式上的理解,使学生以最简单的方式来理解面向对象,从而初步具有面向对象的设计思想。可以从C语言的结构体引出面向对象形式上的封装,使学生自然地完成到面向对象的过渡。这一阶段强调的是形式上将数据及对数据的操作合为一体,类的抽象是这个阶段的关键点。

2.封装性的实质理解。在完成封装性形式上的理解后,需要理解封装的实质内容,即封装的真正作用是完成访问层次的设定。封装在语法实现上是通过控制访问权限来控制类成员的封装程度,如何控制访问权限成为理解封装性的关键点。

3.继承性的理解。继承性是面向对象思想的重要特性,反映了两个类之间的父子关系。从形式上理解继承性提高了软件的开发效率,从实质上理解继承中子类的构造过程。子类的构造通过增加新成员、覆盖父类成员而形成。理解子类构造时必须先构造父类的逻辑,同时理解覆盖父类成员后子类的内存空间示意图,从而理解整个继承链的层次关系。

4.多态性的理解。多态性是面向对象思想最重要的应用,反映了程序不同的抽象层次。从形式上理解多态性形成的语法形式,从实质上理解多态性在现实问题中的逻辑抽象,真正理解程序的抽象层次及其作用。

(二)面向对象的过程反馈及实例设计

面向对象思想的讲解从理论上是抽象的。如何将抽象的理论让学生具体地感性理解,需要设计多层次的实例。每一层的实例通过学生的训练反馈后进入高一层的实例,完成对学生理解偏差的纠错和概念的加深,让学生真正深入理解面向对象设计思想。过程反馈实例设计如表2所示。

1.封装性的形式理解。第一轮实例让学生理解封装的形式及基本的面向对象设计思想,理解抽象出类的基本方法,同时理解类的抽象方法不唯一;第二轮实例让学生理解抽象类的过程中应当考虑的因素,理解类中数据成员和方法成员的关系,从而理解类的封装本质上是对数据和该数据操作的封装。

2.封装的实质理解。第一轮实例让学生理解成员的可见性范围的设计思想,从而理解设计成员访问权限的控制时考虑的因素;第二轮实例让学生理解成员权限和类权限的扩展是如何完成的。

3.继承性的理解。第一轮实例让学生理解子类继承父类的成员,结合访问权限控制理解子类能够继承的父类成员的限制;第二轮实例让学生理解子类可以改写父类成员完成扩展,为后续多态性的运行做准备。

4.多态性的理解。第一轮实例让学生理解多态性在形式上的实现,其基础是继承和覆盖,其实现是父类引用指向子类对象;第二轮实例让学生理解多态性的实质作用是形成不同抽象层次的程序,从而让不同层次的变化封闭在相应的层次中,保证了高抽象层次程序的稳定性。

以上对于实例的设计只是一部分,更多的实例设计思想基于任务及循序渐进的思想,目的是让学生逐步进入面向对象的思想中来,降低学生的学习难度,提高学生的学习兴趣。

三、Java程序设计的教学方法

(一)Java程序设计的任务驱动

由于Java语法和C语言语法接近,所以Java教学的重点在于异常处理、GUI、数据库编程、网络编程和多线程。这些内容的理论性低于面向对象部分,在理解相关理论的基础上,更多的是掌握Jdk提供的相关类的使用。具体内容如表3所示。

1.异常处理。有别于面向过程的错误处理,面向对象的异常处理分离了接收和处理错误代码。这个功能理清了编程者的思路,也帮助代码增强了可读性,方便了维护者的阅读和理解。异常处理提供了处理程序运行时出现的任何意外或异常情况的方法。理解这一点,让学生能理解Java提供的异常处理块的语法规定。

2.GUI。基本概念在于Java事件处理机制,正确理解事件处理机制等于完成了GUI程序设计的大部分内容。对于Jdk提供的大量的控件,要求学生掌握最常用的控件即可。如果后续需要,则学生具备了理论知识,更容易完成自学任务。

3.数据库编程。理解数据库驱动程序的框架,熟悉数据库编程的步骤即可。

4.网络编程。理解Socket的基本概念,熟悉TCP和UDP编程的基本步骤。

5.多线程。多线程是Java程序设计中重要的内容。虽然操作系统包含了相关概念,但学生仍然停留在基本概念的阶段,甚至没有理解多线程概念。由于多线程执行顺序的不确定性,导致调试结果具有不可再现性,因此学生往往理解不了多线程的概念和应用。这一部分应重点理解多线程的概念和特点,在此基础上熟悉相关多线程的类的使用。

(二)Java程序设计的过程反馈及实例设计

Java程序设计教学中涉及基本概念和应用两个方面。由于Jdk类的数量庞大、应用面广泛,对Jdk的讲解不能做到全覆盖,因此应当让学生具备自学的基础。Jdk类第一轮的案例设计要足够简单,使学生更容易理解基本概念;第二轮甚至第三轮的案例设计侧重实际应用和Jdk类的熟悉。其过程反馈及实例设计如表4所示。

1.异常处理。第一轮实例让学生理解异常处理的类型及处理机制,重点是理解异常对象的产生和捕获、异常对象向上传递的路径;第二轮实例让学生深入理解异常类的层次结构及实际应用。

2.GUI。第一轮实例让学生理解Java事件处理的机制及相关语法;第二轮实例让学生熟悉Java类库提供的常用控件。

3.数据库编程。第一轮实例让学生熟悉Jdbc各层次包含的类及数据库编程的基本步骤,重点在于数据库的连接;第二轮实例让学生掌握数据库编程中常用方法及编程技巧。

4.网络编程。第一轮实例让学生结合计算机网络知识和IO知识理解网络信息的传输过程及步骤,重点在于理解在服务器和客户端生成Socket对象的区别以及输入输出流对象的生成;第二轮实例让学生以实际项目全方位熟悉网络编程。

5.多线程。第一轮实例让学生熟悉线程对象的生成方法以及线程执行的特点,理解多线程执行结果的随机性;第二轮实例让学生结合操作系统知识熟悉多线程环境下同步的重要性及解决方法。

以多线程为例,内容的讲解可以分为提出问题、讲解、加深提问、点评学生的反馈、内容推进五个步骤实施。首先提出如何解决两个线程交替打印连续数字的基础问题,结合操作系统的互斥概念及解决方法,讲解Java提供的线程互斥的方法,使得学生掌握基本的多线程概念及实现方法;在此基础上,提出生产者消费者问题,给出提示并让学生思考如何实现线程间的通信问题。从学生给出的实现方案中可以了解学生对多线程基础知识的掌握情况及进一步解决新问题的能力,通过对这些方案的点评,学生对多线程基础知识进行了巩固,为下一步内容的推进打好基础。五个步骤可以根据具体教学内容进行删减或循环。

四、总结和结论

任务驱动和过程反馈相结合的教学方法符合教育心理学的规律。任务驱动让学生有明确的目标去完成,给予学生足够的成就感,改变了传统“填鸭式”教学方法的枯燥,增强了学生学习的积极性。教学过程中根据学生掌握知识层次的不同,采用分层次的案例及课外扩展作业,使得学生能够循序渐进地掌握相关知識,让学生感觉Java程序设计的学习不再困难。过程反馈是该教学方法关键的一环。明确让学生进行反馈,不仅能对学生所学的知识进行查缺补漏,还能使学生对反馈具有期许性。如果这种期许是正向的,会大大提高学生学习的积极性,从而改变目前大学普遍存在的学生自学能力不足的现象。实践表明,在实际教学中应用该方法,能主动提问的学生数量大大增加,课余时间用于编程的时间大大增加,甚至学生自发地组成学习小组进行讨论,而最终的考核也表明学生的成绩有了明显的提高。

参考文献

[1]王慧,李雷孝,邢红梅.基于OBE理念的Java程序设计课程教学改革探索[J].计算机教育,2020(02):54-57.

[2]李永飞,李芙玲,王养廷.基于个性化教学的Java程序设计课程教学研究[J].计算机教育,2020(03):148-152.

[3]常燕,刘嘉敏,朱世铁,于霞.项目驱动的程序设计实践课程的“翻转课堂”+SPOC教学研究[J].教育教学论坛,2019(01):157-159.

[4]吴金舟.《java程序设计》课程教学改革研究与实践[J].教育教学论坛,2016(45):93-95.

[5]寿周翔,胡则辉.分步迭代教学法在Java程序设计课程应用的研究与探索[J].计算机时代,2020(05):70-73.

猜你喜欢
任务驱动
开放教学,提升效率
《游戏进课堂——PPT游戏》教学设计与反思
浅谈任务驱动教学法在计算机教学中的运用
任务驱动, 启发学生自学