肖志娇, 刘士俊, 徐 婧
(深圳大学 计算机与软件学院, 广东 深圳 518060)
面向对象程序设计课程的教学内容在逻辑上较难理解,内容相对枯燥[1-3];而在教学中,一定的学习情境会激发学生的学习兴趣[3-4]。基于游戏的教学方法将知识点融入游戏中,为学生提供一个充满乐趣和挑战的学习环境,能加快学生对知识的理解[5],提高学习效率和效果[6-7]。
面向对象程序设计课程的教学目标是使学生系统地掌握面向对象编程的基本原理,能够利用面向对象程序开发语言进行编程和分析现实问题[8]。为了提高课程实验的趣味性,笔者将在线代码评测系统与游戏实验案例相结合,开发了一个基于游戏的面向对象程序设计(C++)的课程实验系统。该系统基于一个简单的角色扮演类的对打游戏,让学生在指定的框架下编写各个知识点关键代码,通过后台系统分析与编译后,将编写的功能转换到图形界面展现。通过该实验系统,学生可以直观地看到所写代码的效果,提高了学习效率,效果良好。
在面向对象程序设计课程中,涉及到一系列与面向过程编程所不同的概念,如类、对象、属性、操作、继承、多态等。这些概念比较抽象,学生初学时难以理解和把握。而角色扮演游戏能较好地反映面向对象程序设计的特点,能让学生在娱乐中学习这些基本概念。面向对象程序设计课程的教学一般是按照类的封装性、继承性、多态性的顺序组织内容[9]。为此,笔者结合角色扮演游戏的特点,将面向对象的程序设计课程实验划分为以下3部分内容[10-11]:
(1) 封装:该部分实验要求学生掌握和应用类的建立、对象的声明和使用等知识,要求学生定义2个类——怪兽(Monster)类和英雄(Hero)类,并实现其基本属性和操作。基本类图如图1所示。
图1 基本类图
(2) 继承:该部分实验要求学生掌握和应用类的继承机制,实现Monster类和大怪兽(Boss)类之间的继承关系,如图2所示。
(3) 多态:该部分实验要求学生掌握和应用多态的实现机制,实现Monster类和Boss类的对象操作的多态,如图3所示。
图2 继承关系类图图3 多态机制类图
在以上实验的基础上,还可以扩展运算符重载、模板等实验内容。
基于游戏的面向对象程序设计课程实验系统以实现一个简单的对打游戏为背景,根据该课程的教学内容和教学进度要求,对游戏阶段进行划分,构造针对不同内容的实验题目,逐步开放。每个实验题目都要求学生在已有的固定程序框架下填入自行编写的代码,实现所要求的程序功能。
学生提交代码后,系统首先将学生编写的代码与程序框架进行合并,随后采用后台在线编译工具进行整体编译,查找是否存在语法错误。若有,则返回错误信息;否则,利用代码分析工具对代码进行分析,检查是否已实现所要求实现的功能,是否实现选做功能。随后,系统进行代码测试,检查是否存在运行错误。最后运行模块将正确实现的功能在前台显示出来。
前台将读取后台代码的实现情况,以图形界面的方式显示已正确定义的类和对象,并为对象提供后台代码正确实现的操作。根据后台代码定义的游戏流程,实现与学生的互动游戏,并在游戏中让学生发现所写代码中缺少的功能,更好地体会每一部分代码的功能和效果。
实验系统的模块设计如图4所示。
图4 实验系统模块图
(1) 代码编译模块将抽取实验题目的固定框架代码与学生提交的代码进行拼接,调用在线编译器MinGW对合并后的代码进行编译。若无错误,将代码交予代码分析模块进行语义分析。
(2) 代码分析模块针对不同游戏阶段的要求,规定类名、函数名等的标准,要求学生所提交的代码的名称以此为依据。运行时,分析模块对学生提交代码进行分析,提取关键类、函数等,与命名标准做对比,逐一排查是否实现对应功能。
(3) 代码测试模块针对学生程序设计完成情况,利用预先定义好的后台数据,进行测试分析并生成相应的测试报告。
(4) 代码运行模块在对固定框架和学生代码合并后的程序进行分析测试后,对程序进行修改,创建socket连接,使其具备通信功能,并在内部加入了通信协议解析,解析从前台传来的指令协议。
(5) 通信模块负责通过socket在后台与前台之间进行数据与指令的传输。在收到请求后,首先创建连接线程,实现后台程序和前台显示两端的通信,将代码功能以图形化的效果展示。
(6) 前台模块提供教师模式和学生模式,为用户提供各类功能使用的图形化界面。系统前台模块如图5所示。
在教师模式下,教师可以对题库、作业、成绩进行管理,增加或修改实验题目,发布或结束实验作业,查看学生代码和提交情况,查看和管理学生的成绩。
图5 实验系统前台模块图
在学生模式下,在线答题模块让学生可以查看作业、根据要求在线编写代码并提交。若代码通过,可以进入在线游戏。若在游戏中发现功能的缺失,可以修改代码并再次提交。在线游戏模块通过通信模块连接前后台,将经过系统分析与编译的学生提交代码的实现情况传输给游戏模块。游戏模块根据收到的数据,在游戏场景下生成对应的角色,激活已正确实现的相关操作,转化在图形界面上展现出来,并根据编写的程序流程与用户进行游戏互动,让学生在游戏中体会代码经过编译后,实际被执行的效果。
基于游戏的面向对象程序设计实验系统为学生提供了趣味性的实验过程。在系统固定的实验流程框架下,学生在线编写并提交考查关键知识点的代码,系统后台自动在线对代码进行整合、编译、分析等。如图6所示,系统对学生提交的类的实现代码进行分析测试,对实现异常的函数进行标注。
图6 函数测试结果输出
学生提交代码通过后,系统提供在线游戏的功能,让学生直观感受所编写代码的效果,如图7所示。正确实现的类和对象及其相关的属性和操作、类的继承情况等被显示出来,而出现异常的信息则无法显示。
图7 代码实现的图形化展示
基于游戏的面向对象程序设计课程实验系统要求学生在固定框架下,按照各个实验考查的知识点,编写并提交相应代码。系统将在线编译、分析、测试和运行提交的代码,并在前台结合角色扮演游戏,显示正确实现的功能,以趣味化的方式,加深学生对面向对象程序设计课程中各个概念的理解和掌握。