盧慧雅,王 磊
(北京信息科技大學 信息管理學院,北京 100192)
理工類院校的面向對象程序設計課程普遍選取Java 作為授課語言,Java 具有語法嚴謹、與平臺無關、安全性和健壯性良好等特點,同時也是JavaWeb 開發的前導課程。傳統的實驗教學模式是在理論授課結束后,安排一定學時的綜合實驗,試圖達到理解和鞏固知識模塊、提高設計與編碼的能力。然而,部分實驗存在過程單一、內容枯燥乏味、綜合拓展不足的問題,造成學生興趣下降,教師的教學效果和學生的動手能力都不盡如人意。
以信管專業面向對象程序設計課程的綜合實驗為例,通常教師下發實驗任務后不再手把手指導,學生依據需求規格說明自行設計、編碼、調試、發布。學生反映知識點龐雜、晦澀,設計理念不清晰,不知從何著手,普遍感到邏輯思維難度大,基本都是以“做完”實驗為目的,而不是追求“做好”實驗。實驗答辯審核時,教師限于時間和精力,也是快速檢查學生的系統功能和界面是否符合要求,很少關注編碼細節。學生的設計思路五花八門,代碼質量參差不齊,很難達到實驗設定目標。傳統的實驗步驟如下:首先對系統需求進行功能梳理,沒有模塊化設計,少數類文件承擔全部功能;接著完成臃腫的源程序編碼,對系統功能進行抽樣檢查;最后發布可能有隱患的系統。
出現上述問題的主要原因在于:雖然某些章節結束后會有對應的實驗課時,但不是綜合實驗,知識點串結較少,僅需少量源文件就能完成功能要求,系統設計隨意、粗糙。最后在綜合實驗環節,學生還沒有訓練好軟件工程化的思想,不懂得模塊的概念和重要性,自然沒有能力進行分層設計,軟件質量差強人意。
實驗初期,教師不刻意教授模塊化設計思想,讓學生通過自主探索或者依據經驗進行系統設計和開發,當大部分同學出現思維混亂、編碼亂套的時候,教師適當介入,引導學生思考問題出現的原因,查閱資料并討論可行的解決方案。
教師此時引入一種基于MVC 思想[1]的設計方案,讓學生初步認知概念和模式。MVC 是model,view,controller 的簡稱,強調以業務功能為核心,將系統在邏輯上分為視圖表現層、業務控制層和實體模型層,各層彼此獨立又相互協作。不同層各司其職,有利于通過工程化、工具化管理程序代碼,可維護性好、復用性高、部署快速,具有較低的生命周期成本。
優化后的實驗步驟在梳理系統功能后,進行模塊劃分和組件設計,對模塊實施迭代編碼,接著開展單元測試,測試通過才能持續集成,直至系統功能檢查無誤,然后發布穩定的系統。
實驗內容強化模塊化思想,結合案例驅動[2]或者項目導向[3]的教學模式,引導學生理解設計模式,訓練學生一步步迭代完成實驗。
實驗方式由原先的線下編碼、線下提交、教師人工審核升級為線下編碼、線上提交、平臺自動審核。考慮信管專業特點,選取信息處理類的典型實驗案例,經過裁剪、整合后部署到學院的實訓教育平臺[4]上。系統經過科學的模塊化設計,每個模塊再被拆分為若干子任務,子任務有順序要求,掛接在里程碑節點上。按照軟件工程化的要求,依次進行迭代開發,學生不能任意選擇某個節點,必須嚴格按照開發流程進行。教師從繁瑣的輔導和答疑中解脫出來,隨時在后臺查看實驗進展情況,有針對性地提醒和講解,能夠專注于實驗案例的業務規則定制,提高教學效率。實驗進度如圖1 所示。

圖1 實驗進度
課題組選擇模擬文本界面的“團隊開發人員調度軟件”作為綜合實驗案例,系統以實現員工顯示及團隊人員調度為目標,以數組作為存儲數據的載體,完成數組的創建、顯示、查詢、增加、刪除等操作,考查多個知識點的掌握情況:多態、對象的關聯、異常的發生與處理[5]等。學生在實驗過程中理解面向接口的編程方法,學習模塊化設計。實驗過程采取單人單組、獨立開發的方式,要求實現以下功能。
(1)軟件采用單級菜單方式工作。當軟件運行時,在主界面根據指定的數據顯示公司所有成員列表。
(2)根據菜單提示,基于現有的公司成員,組建一個開發團隊。組建過程包括將成員插入團隊中,或從團隊中刪除某成員,還可以列出團隊中現有成員。
(3)開發團隊成員包括架構師、設計師和程序員,既有總人數限制,也有人員類型數量限制,如果操作不符合預設規則,將觸發和拋出自定義異常。
(4)菜單某項操作成功后,按回車鍵將重新顯示主界面。
教師依托實訓教育平臺,詳細講解模塊化分層的概念和設計方案,指導學生完成實驗步驟的調整,即將系統劃分為list 視圖模塊(對應表現層V)、manage 管理模塊(對應控制層C)和domain 實體模塊(對應模型層M),如圖2 所示。

圖2 系統模塊分層結構
其中list 視圖模塊為主控模塊,由界面顯示類負責顯示菜單和退出系統,通過調用服務模塊提供的方法完成人機交互功能;manage 管理模塊為實體對象的管理層,響應視圖模塊發送的請求,由公司員工管理類維護公司員工、團隊人員管理類維護團隊成員,同時處理由異常類傳遞的各種失敗信息;domain 實體模塊包含員工類及使用的設備信息,起到基礎數據支撐作用。這里體現了分而治之的MVC 設計思想,組織結構清晰、系統功能明確,使學生基于問題驅動加深認識和理解模塊化的軟件工程思想。
每個模塊再依據子任務,設計不同數量的組件類即單元文件。學生在“學練問”的過程中腦海已有比較清晰的認識,所以組件類的創建就不感覺難度了。指導學生繼續完成實驗步驟的調整,即每一個單元文件迭代編碼結束后都使用模擬數據進行測試,檢查功能是否正確和健壯,既要選擇合理的模擬數據驗證功能是否完整,還要使用非法的模擬數據檢驗異常的捕獲和處理情況。學生在不同場景中深刻理解異常的發生原因,能夠掌握異常的捕獲和處理方法,同時也能滲透單元測試[6]的概念和方法,體會軟件質量的重要性。
節點分配的任務經過編碼和測試后,進行線上提交,實訓教育平臺預置的評價規則對源文件自動審核,若不符合規范將拒絕提交操作,直至學生的修改符合要求為止。經過若干任務的迭代,系統搭建比較完整了,實驗進入驗收和總結階段。
MVC 設計思想在高年級的Java Web 課程才會詳細講解,嘗試將知識點進行適度前移,并與實驗融合,以問題為導向激發學生對模塊分層的興趣,理解“良好的設計是成功的一半”“MVC設計思想是系統的核心”[7]。
實驗依托實訓教育平臺,將系統功能劃分為若干模塊,使用分層迭代的軟件開發思路,模塊結構符合MVC 設計思想,為學生以后進行Java Web 的學習打下扎實基礎,起到水平提升和能力拔高的作用。
教師在實驗過程中循序漸進地引導學生發現問題,培養學生主動思考的習慣,能夠有效提升Java 實驗教學的質量和效果,使學生真正具備解決復雜問題的工程能力。
該實驗案例已應用在信管專業不同年級的實驗教學中,實驗學時可自適應裁剪和擴充。考慮低年級學生的理解程度與知識儲備,可以選取前4 學時作為章節實驗,只完成公司員工的列表功能,即將靜態字符串數組中的數據逐項構建為具有繼承結構的員工對象,加載到動態對象數組中,由公司員工管理類負責把對象信息打印在屏幕上。團隊人員管理類和異常類不參加系統工作,也沒有人機交互功能,但MVC 設計思想依然能夠嵌入實驗目標和內容里;還可以將完整項目放入高年級的專業實訓中,合計16 學時作為綜合實驗,要求實現全部業務邏輯,即系統提供數組的維護操作,從而完成團隊的人員調度。團隊人員管理類和異常類參加系統工作,人機交互功能豐富,MVC 設計思想更加深入。
教學實踐表明,大部分學生普遍感到實驗的形式有趣、內容新穎,對理論知識的掌握以及對動手能力的提高幫助很大,同時能夠進一步消化理解抽象的模塊化編程理念,熟悉軟件項目的工程化規范。
教學模式與信息技術與時俱進,可以繼續探討如果實訓教育平臺使用大數據的方式,采集和存儲多維教學信息,輔以人工智能進行決策分析,個性化的教學效果和反饋會更加突出,以便盡早實現專業知識與技能素養的雙向思維貫通。