肖志嬌, 劉士俊, 徐 婧
(深圳大學 計算機與軟件學院, 廣東 深圳 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 代碼實現的圖形化展示
基于游戲的面向對象程序設計課程實驗系統要求學生在固定框架下,按照各個實驗考查的知識點,編寫并提交相應代碼。系統將在線編譯、分析、測試和運行提交的代碼,并在前臺結合角色扮演游戲,顯示正確實現的功能,以趣味化的方式,加深學生對面向對象程序設計課程中各個概念的理解和掌握。