司慧琳,李 素
(北京工商大學 計算機學院,北京 100048)
面向對象程序設計是一門理論性和實踐性均較強的課程,對學生編程能力要求較高,屬于計算機科學與技術等專業的基礎課程。該課程主要介紹面向對象的概念和設計方法,圍繞面向對象的封裝性、繼承性和多態性,重點介紹類和對象、友元和靜態、繼承和組合、重載與多態性、異常處理等基本語法[1]。該課程側重于學生面向對象編程語法理解和實踐的編程能力培養,使其能夠運用面向對象思想和方法分析和求解計算機領域應用軟件設計與開發問題。
北京工商大學自2014年開始在計算機科學與技術專業開設面向對象程序設計課程,采用C++語言,基于Moodle(Modular Object-Oriented Dynamic Learning Environment)平臺上的面向對象編程題庫進行教學。基于此,本文分析當前面向對象程序設計課程教學中存在的問題,并提出針對性改革措施,以期提高教學效果和人才培養質量。
作為C語言程序設計的后續課程,面向對象程序設計課程肩負著承上(兼容C,但C++以對象為中心,側重軟件應用)、啟下(為Java及后續編程實訓課程打基礎)的作用,需要持續激發學生的編程熱情。教學早期有些學生對封裝語法掌握比較薄弱,只能機械地重復書本上的源碼示例;通過課堂講授、編程練習和師生互動,教學中期大多數學生能夠跟上課程進度,但繼承和多態的語法比封裝更難以理解,且代碼編寫量更大,此時有些學生開始力不從心,逐漸掉隊,喪失學習興趣和積極性。究其原因,傳統教學存在學生編程練習量少、教師反饋不及時、未能實時了解每個學生練習情況等弊端。
北京工商大學開設的面向對象程序設計課程于大一下學期開課,此時學生掌握的C代碼短而簡單,而C++語言編寫的面向對象代碼長且復雜。學生在編程過程中碰到語法錯誤時,即使開發工具給出了錯誤提示,部分學生也不具備糾錯能力。隨著課程深入,學生出現的程序邏輯錯誤增多,有些學生無從下手,難以完成編程訓練,影響編程能力提升。出現這種現象的原因是學生編程訓練量不夠,而代碼糾錯和調試能力訓練是一個長期過程。
在在線判題(Online Judge,OJ)系統中,用戶可以在線提交程序源代碼,系統對源代碼進行編譯和執行,并通過預先設計的測試數據檢驗程序源代碼的正確性。能提供在線編程評測的OJ平臺有很多,例如:ITbegin作為一個在線編程與互動教學相結合的網站,提供了基于C++的面向對象課程和相關編程題,但題量偏少,且只能對源代碼提供編譯和執行功能,不提供測試數據檢驗程序源代碼的正確性;LeetCode 平臺上題目豐富,可以進行在線測試,能夠指出錯誤數據,并支持多種主流語言(C/C++、Python、Java等),但該平臺大部分題目側重于經典算法或數據結構的編程訓練,不涉及基于C++的面向對象編程題訓練;Moodle平臺是一款免費開源教育平臺,其面向對象的模塊化動態學習環境既適合在線教學,又可作為傳統教學的補充,同時也適合構建混合式教學模式,在開源學習系統中獲得了較高評價[2]。
2012年,北京工商大學C語言程序設計課程組在Moodle平臺上創建了一個C語言題庫,對學生的C語言編程能力提升起到了良好的促進作用。面向對象程序設計課程作為后續課程,采用Moodle平臺訓練和教學是順理成章的設想,能持續有效地提高學生的學習興趣和編程訓練熱情,鞏固和提升編程能力。2014年,課題組篩選傳統教學中面向對象程序設計的經典編程題目[1,3],依托Moodle平臺題庫進行呈現,運用前置或后置預設代碼等手段限定其以面向對象語法實現,配備多組測試用例校驗源代碼的正確性,在Moodle平臺上建立了一個支持C++的面向對象編程題庫以訓練學生面向對象的編程能力。通過在教學實踐中不斷完善,目前該題庫已擁有120個左右面向對象編程題目。為完成該題庫訓練,學生需要編寫的代碼約有4 000行,訓練量比傳統教學大得多。掌握一門程序設計語言的最佳途徑就是多練習,大量編程訓練有利于學生掌握面向對象的語法和提升面向對象的編程能力。
2014年,課題組將面向對象編程題庫運用到課程教學中后,深感現有教材不具有輔助學生完成平臺編程練習的針對性,因此重新編寫并出版了一本教材,該教材側重面向對象的編程訓練。為明確訓練具體語法主題,所有示例和習題都提供了相應的輸入輸出測試用例,部分習題還預設了前置或后置代碼,限定學生所寫的代碼需采用面向對象實現。該配套教材還附有4套模擬卷和從多年教學實踐中收集整理的初學者面向對象編程問題集[4]。
2.3.1 基于Moodle平臺的教學互動
教學互動手段分為面對面答疑、Moodle平臺討論區及微信群或QQ群在線答疑等,其中Moodle平臺討論區是互動交流的主要場所,師生通過發帖和回帖的方式在線交流,其他學生可通過瀏覽帖子旁觀和參與解決問題,這是獲得編程經驗的途徑之一。Moodle平臺上的編程題目通過多組測試用例、成績分值設定、折扣比例和提交截止時間等方式有效激發學生編程熱情,學生為了在規定時間內通過平臺用例測試拿到滿分會主動向老師提問。這意味著基于Moodle平臺題庫進行授課的教師不僅需要更多時間和精力去答疑,而且需要隨時關注和及時回復學生提問,并隨之調整課程進度。
2.3.2 基于 Moodle平臺的實時反饋評價體系
Moodle平臺自帶GCC、G++等編譯器,學生在該平臺上提交程序,平臺自動評判所提交代碼并給予分數反饋,既給教師節省了大量批改作業的精力和時間,又能保證每個參加編程訓練的學生得到實時反饋評價。Moodle平臺在系統中記錄學生完成編程訓練的各項成績,并且提供了多樣化成績計算方式及彈性分值調整功能,以便教師對學生編程訓練情況進行實時有效的監控。Moodle平臺還提供了將學生練習成績導出為Excel文件的功能,教師可對學生成績進一步分析,獲取其練習詳情,針對學生普遍存在的問題及時調整教學內容。此外,教師還可在Moodle平臺的討論區公布學生每周練習題目完成情況,督促學生完成編程練習。然而,Moodle平臺的自動評分方式也存在局限性,例如Moodle平臺會對符合C++語法,以及用例和預設代碼所需的代碼自動判滿分,至于提交的代碼實現方法是否滿足面向對象設計要求,是否滿足題目要求,其判定不甚準確。
2.3.3 基于混合學習的教學模式
線上+線下的混合式教學可將學習者引入深度學習[5]。教學過程中以Moodle平臺題庫訓練為主,輔以課堂提問、課后筆試練習和筆試小測驗等傳統教學方法,將平臺在線學習與面授相結合,構建了一種既能發揮課堂學習中教師主導作用,又能使學生通過自我學習建構知識體系的學習方式。
采用機考與筆試結合的課程考核評價方法。教學早期利用Moodle平臺實時反饋和評價的優勢,以機考形式督促學生進行編程訓練;中期需完成1套筆試模擬卷;后期除在Moodle平臺進行編程訓練外,還需完成2~3套筆試模擬卷。期末考試以筆試方式考核學生對語法概念的掌握程度。面向對象程序設計課程混合式教學目標與相應措施如表1所示。

Table 1 The content of curriculum objectives and corresponding measures表1 課程教學目標與對應措施
改革方案實施后取得較好教學效果。2017-2021年間面向對象程序設計課程的學評教成績如表2所示(數據來源于學校教務管理系統)??梢钥闯?,5年間該課程的學評教成績均在90分以上,學生對課程的總體滿意程度較高。

Table 2 Assessment of teaching results表2 學評教成績
2017-2021年間面向對象程序設計課程的總評成績如表3所示(數據來源于學校教務管理系統)??梢钥闯?,平臺題庫訓練對于學生掌握課程內容大有裨益,即使2020年春季受疫情影響全程采用線上授課,與其他4年的線下教學相比,學生平均成績和最高分差異性不大,教學質量比較穩定,說明教學改革達到了預期效果。

Table 3 Analysis of students' overall course assessment results表3 學生課程總評成績分析
針對面向對象程序設計課程傳統教學中存在的一系列問題,課題組建立了基于Moodle平臺的編程題庫,以提高學生學習興趣,增強其代碼調試、糾錯和項目開發能力;基于Moodle平臺題庫編寫了配套教材,提供面向平臺題庫的針對性輔導;開展了混合式教學探索,基于Moodle平臺的教學互動和實時反饋評價調整教學內容與進度,取得了優異的教學成效,即使期間受到疫情影響,學生成績依然保持穩中有升。后續將進一步完善編程題庫,充分與實際應用相結合,以提升學生解決現實問題的能力。