Karel在面向对象程序设计课程教学中的应用


打开文本图片集

文章编号:1672-5913(2015)11-0061-06

中图分类号:G642

摘要:探讨教育编程语言Karel在面向对象程序设计课程入门介绍中的应用,通过实践和调查指出教育编程语言可以降低学习难度,利用Karel设计的游戏竞赛可以显著提高Java初学编程者的兴趣。

关键词:面向对象;教育编程语言Karel;程序设计;编程初学者;游戏竞赛

0 引 言

随着计算机编程技术的发展,面向对象的程序设计(obj ect-oriented program,OOP)是目前软件开发人员所必须掌握的一项基本技术,因此面向对象的编程语言如面向对象的C++、Java也成为软件工程专业的基础课程。面向对象程序设计理念以“对象”代表一个客观世界中的具体事物,而将具有相同属性和操作的对象集合定义为“类”的概念,每个对象是类的实例化。另外,与过程式编程语言相比,OOP加入了继承性和多态性,这些基本概念如对象、类、继承和派生等往往是编程初学者的“拦路虎”。对于教师而言,在入门介绍时单纯地讲解概念一般得不到很好的教学效果;对于学生而言,晦涩的概念和枯燥的语法很容易打击他们的学习积极性;另外,对于软件工程专业来说,编程基础是整个课程体系的基础,由此可见面向对象程序设计课程的重要性。

对于以实践操作为主、技术性较强的计算机语言来说,面向对象程序设计课程教学需要一种理论和实践融合的教学方法和模式,以培养学生根据实际问题动手的能力。结合现场编程和启发式的教学方式是比较常见的,案例教学被认为是一种具有发展潜力的教学方法。虽然案例教学对初学者学习编程具有一定的作用,但是学生在选择案例材料并以此进行课程设计时则感觉比较困难。针对编程入门课程,国外大学引入竞争模式和团队合作项目,这种模式对于增强课程的趣味性有一定帮助。通过对程序设计类课程的教学特点和方法进行研究,结合国内外的教学经验,我们在面向对象程序设计课程的入门介绍中引入教育编程语言。教育编程语言是一种教育性质的程序设计语言,每种语言都建立在其他语言的基础上,使得学生能够适应从简单又易于理解的娱乐性编程环境到专业开发环境的转变。适用于学习OOP的教育编程语言,第一个被引入的是Karel。Karel给编程初学者提供一个简单直观的环境,使得他们能摆脱大多数编程语言复杂的特性,学习基本的编程思想。在这个思路上,类似的教学编程语言还包括Jeroo等。

1 课程特点及难点

1.1 课程间的联动性

面向对象程序设计方法是在吸收了软件工程领域实践经验的基础上而发展起来的一种软件开发方法,它集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发出模块化,数据抽象程度高,体现信息隐蔽、可复用、易修改和扩充等特性的程序。面向对象程序设计课程是软件工程专业基础课程,由于和Java编程与应用结合紧密,因此可将Java语言作为学生学习面向对象程序设计方法的途径。由于Java的特性给其他课程如数据库原理、算法与数据结构、移动计算等的学习提供了方便,而课程之间具有联动性,因此学生学习该课程的效果可能会直接影响其他课程的教学效果。

1.2 入门介绍的复杂性

“万事开头难”,编程语言的入门介绍往往比较困难。传统的入门介绍往往从简单的程序开始如“Hello World”,逐渐地引入复杂的编程案例和项目。这种传统的入门介绍方法提供了一个平缓的学习曲线,能为学习者递增地提供吸收和构建知识结构的时间。然而,我们认为在进行面向对象程序设计课程的入门介绍时,应该考虑以下几点。

首先需要考虑授课对象。大学低年级的编程初学者往往具有参差不齐的能力和分散的兴趣点,因而一种能激起所有学生积极参与的教学方式对于改进教学效果有很大的帮助。在编程入门介绍课程中,教学方式往往具有多样性,然而这些教学方式有一个共同点,就是刺激初学者使其能更加积极主动地学习。我们认为,游戏竞争的方式可以激发初学者积极参与的动力。

其次需要考虑授课内容。面向对象的程序设计涉及内容太多、太杂,分散了学生的精力和学习重点。我们根据教学经验发现,编程初学者往往对面向对象编程语言所提出的新概念如类、对象、继承等难以掌握。例如,如何设计一个类、对象是如何使用的、怎么区分过程式编程语言(如C)和面向对象编程语言(如Java)等问题。除了基本的概念,异常处理、I/O、网络通信、数据库访问、GUI编程等都是面向对象编程语言的难点。

最后是预期的教学结果。对于编程初学者而言,具有浓厚的编程兴趣和具备基本的编程技能是教学结果最大的预期。

将以上几点融人课程设计中才是一个好的入门介绍。培养学习兴趣是入门介绍中最重要的输出。

1.3 竞赛中的趣味性

编程能力的培养需要从编程理念和实际动手能力的培养两方面出发。动手能力差是很多初学者普遍存在的问题,有时一个“;”都会令很多学生找不到问题所在,最终导致他们对编程丧失兴趣。在编译出错后,一些学生根据英文的错误提示往往能定位出大部分的错误,这也是需要大量的实践积累才能获得的经验。在这种情况下,选择合适的上机内容并提高趣味性,对于提高学生的动手能力非常重要。很多学生学习积极性差,却在游戏竞技方面显现出浓厚的兴趣,因而将游戏引入到面向对象程序设计过程中使学习更加有趣,不失为一个促进学习的好方法。文献中介绍了如何将游戏引入编程课程并取得了一定的成果。

2 教育编程语言的应用

教育编程语言是教育性质的程序设计语言,是与用于编写真实环境下应用程序的编程语言不大相同的一种编程语言。理解编程概念最好的方式就是将其转化成现实中的东西,教育性编程语言往往有很强大的可视化/图形组件,帮助面向对象的初学者“看”到实际对象。

2.1 Karel小机器人

小机器人Karel作为一门教育编程语言被设计用来帮助面向对象编程的初学者。在编程基础的教学中,学生需要摆脱大多数编程语言复杂的特性,学习基本的编程思想。面向对象编程语言中的语法限制很少,最大的特点是具有可拖拽的界面,操作性强。Karel的原理使其自身产生了多个变种,随着Java的流行,新的Karel设计兼容Java及其集成开发环境(IDE) Eclipse。作为一个入门编程环境,Karel具有简单易用的界面,能让学生教一个机器人解决简单的问题。

Karel生活在一个简单的世界中(如图1所示),这个世界是由墙壁Wall、水平和垂直的街道、Karel机器人以及蜂鸣器Beeper组成。

简单的Karel具有4种功能/方法:①move()往前单步走;②turnLeft()Karel左转90°;③putBeeper()在Karel所处的位置放置一个蜂鸣器;④pickBeeper()Karel将所在位置的蜂鸣器捡走。Karel的世界是由墙壁包围起来的,Karel不能穿过墙壁,而只能在墙的周边走动,整个世界的大小可以随着需求而作调节。当Karel试图穿墙或捡起不存在的蜂鸣器时,就会出现错误提示。

预定义的命令和语法规则定义了Karel编程语言。类似于孩童玩的乐高玩具,利用Karel编程所做的工作就是将Karel所具有的功能组合成更高级的功能并执行某些任务。

2.2 Karel在面向对象编程入门上的应用

该课程的一个重要目的是让初学者学习和理解面向对象的概念,如继承、多态、类、异常等,这些概念使得面向对象的编程语言区别于基于过程的编程语言,也是多数学生容易产生困惑的地方。大多数时候,该课程在入门时的授课内容常局限于利用办公软件PPT进行举例讲解,然而,我们发现学生对于这些概念往往是在后期的实践中辅以实际的编程经验才会慢慢理解。因此,我们引入Karel用以介绍面向对象的基本概念,通过游戏竞争的方式让学生自己领悟编程基础,对面向对象的基础概念有初步了解,方便后续内容的介绍。在教学环节上,除了理论课教学、课内实验、课外作业等,我们还分配12个课内学时用以入门介绍,包括面向对象基本思想、语法特性、基本概念以及方法与技术。

在引入Karel后,我们期待学生能有一定的收获。首先,他们可以了解Java的集成开发环境Eclipse,作为主要的开发工具,Eclipse的使用不需要过多地介绍界面,真正需要的是熟练使用,因此通过使用Karel,学生可以在实践中慢慢地熟悉Eclipse;其次,在Karel编程中,学生可以学习基本的编程语言规则,如循环语句、判断语句、函数/方法等,另外,由于良好的可视化界面,学生可以通过Karel理解面向对象编程语言中的基本概念,如类、对象、继承等;最后,解决问题的能力是最重要的收获,通过简单的语法和界面,学生可以学习从宏观的角度利用编程语言解决问题,完成任务。

2.3 基于Karel的程序设计实践

在学习了Eclipse和Karel的基本概念以后,我们设计了4个阶段的程序设计实践环节,通过循序渐进的方式让学生了解、掌握并精通Karel的程序设计方法。基于Karel的程序设计实践要求学生以小组形式完成,这一方面有助于减少初学者的畏惧心理,另一方面可以增加团队合作和竞争的趣味性。

1)基础版。

基础版的程序设计中,我们首先要求每个小组设计一个10×10大小的迷宫,Karel初始状态在左下角;然后每个小组在自己设计的迷宫上,利用Karel基本的方法如move()、turnLeft()等编写程序,使得Karel走到迷宫右上角,学生可以有半小时的练习时间;接着,各个小组之间交换迷宫,使得每个小组都是在其他组的迷宫上完成任务。此次竞赛的获胜标准是时间,哪组最快地完成任务将获胜。由于时间是决胜关键,因此团队间需要分工合作,有人负责将其他组的迷宫画出来、有人可以将路线通过编程语言表述出来、有人负责验证等。

基础版程序设计实践的内容比较简单,初学者只需要会运用Karel的基本函数,是否有编程基础对结果的影响不是很大。此竞赛容易调动初学者的兴趣,不会令初学者在开始的时候被一堆概念所吓倒。

2)提升版。

提升版的程序设计实践是基础版的升级。我们设定所有组在同一个迷宫上以最少的代码完成任务的组将赢得竞赛,这需要学生在编程过程中思考,学习运用循环结构和方法的概念。举例来说(如图2所示),基本的Karel没有提供右转的方法,我们可以通过3个左转完成一个右转;通过Karel提供的单步走move(),我们可以设计多步走的函数moveSteps()。

提升版的程序设计实践需要学生开始思考,通过自己设计方法了解方法( method)的定义、方法之间的调用关系等,此处渐渐引入了编程的基础概念。

3)高级版。

在基础版和提升版程序设计实践的基础上,我们还设计了一个提高版的问题。Karel中除了简单版的Karel类,还有一个SuperKarel类,该类中包含的功能更多,如可以判断前方是否有阻碍frontIsClear()等。学生可以在课后考虑利用SuperKarel类设计一段适用于所有迷宫场景的代码,这个思考题需要学生学习算法的概念。算法也是编程语言中需要学习的一个重要概念,通过此题,学生可以理解算法在解决问题中的作用。

再深入地,我们借由Karel可以引入面向对象编程语言的一些基本概念如类。机器人Karel就是一个类,这个类集合了所有Karel对象的共同行为和状态属性;SuperKarel也是一个类,这个类继承了Karel类的所有功能,但同时还具有Karel类所没有的功能;我们自己设计的类也继承了Karel类。一个类的实例即对象可以通过它在空间中的位置、面向的方向、所拥有蜂鸣器的个数等一些特性指定;对象也具有行为,即它在世界中响应来自其他对象的命令的方法,每个小组设计的迷宫中的Karel机器人就是一个对象。

3 教学效果

为了了解学生对于在面向对象程序设计课程中引入教育编程语言Karel的反应和教学效果,我们设计了一份问卷调查并进行总结整理。参与调查问卷的为学习该课程的学生,有效的问卷为58份。其中,63.8%为男性,36.2%为女性;曾经学习过一门编程语言的占67.2%;100%的参与者认为在课程中引入竞赛机制使用Karel比较有意思。问卷调查统计后部分结果如图3所示,其中支持Karel用于教学的支持度(10%~30%、30%-60%、60%-90%、>90%)的比例如图3 (a),支持度在90%以上的占调查人群的65.40%;在教学中引入Karel之后,学生的兴趣显著提高(图3(b)),兴趣大增的占调查人群的52.80%。

另外,我们分析了编程基础与引入Karel后编程兴趣提高之间的关系,以及参与者编程基础对于Karel的支持程度的影响。从图3(c)和3(d)可知,没有编程基础的参与者在引入Karel后编程兴趣明显提高,有编程基础的有5.4%的参与者认为Karel没有提高他们的编程兴趣,其余的人则认为有提高;在对Karel的支持度方面,同样也是没有基础的参与者给予的支持力度比有基础的参与者高。从两个结果可知,Karel对于入门级编程者的作用更大一点。

在引入Karel后,40%的学生对Java的集成开发环境(IDE)工具Eclipse有了更深一步的了解,26.7%的参与者认为自己对Java语言的语法规范有了更深的认识,22.7%的人了解了Java原理。对于面向对象程序设计中的基本概念如类、对象、方法、继承性、多态性等,70.7%的参与者有模糊、基础的认识,20.7%的人则认为非常了解。通过这些数据和分析,我们发现Karel在面向对象程序设计课程中对于提高学生学习兴趣和教学效果有积极的作用。

4 相关讨论

面向对象的基础概念(如对象实例化、方法调用、继承等)在课程中出现的时机往往很难把握。过早地介绍概念,学生没有足够的时间消化,过晚地介绍使得很多其他的概念得不到很好地解释,因此在整个课程教学中,教师往往需要不停地讲解这些概念。学生虽然可能熟知名词,但是不一定能真正理解面向对象的设计理念。

我们在授课过程中发现给编程初学者进行入门介绍非常关键。如果入门介绍过多地关注理论概念,学生的接受程度不是很高;而启发式或案例式的教学方式需要合适的案例供学生进行讨论和分析,为入门级概念选取合适的案例具有一定挑战性。目前,也有用教育编程软件为初学编程者提供入门级介绍。教育编程软件Karel在斯坦福大学计算机一年级课程CSI上的成功应用给了我们启发,我们在面向对象的程序设计课程中引入Java版的Karel。由于用Karel编程降低了编程初学者所面临的复杂细节,提供了对象的设计方法以及可视化的界面,因而可以降低初学者在入门初期的学习难度。在授课过程中,采用竞赛的方式介绍理论知识还比较少见,我们认为竞争意识和游戏会给学生带来激情和创造力,也能吸引学生注意力。通过问卷调查,学生对课程中引入Karel的支持度也得到了证实。在后期的工作中,我们将在课程中完善基于Karel的程序设计实践部分,不止是单纯的迷宫找路线游戏,还会将引入Karel之后的学生成绩进行分析,通过统计分析更确凿地验证课程中引入Karel后的实质作用。

5 结语

在面向对象的程序设计这门课程中,面向对象的基础(如类、对象、继承等)和传统过程式编程基础(如循环、迭代、选择等)给教师和学生都带来了挑战。我们介绍了在课程入门阶段引入教育编程软件Karel,通过问卷调查的方式对其在编程初学者接纳编程语言时的作用进行了统计分析,结果证明Karel给教师和学生都带来了学习编程的快乐,使学生更容易理解编程语言的设计理念,提高了编程初学者对编程的兴趣,取得了一定的教学效果。

推荐访问:程序设计 面向对象 课程 教学中 Karel