盧慧雅,王 磊
(北京信息科技大學 信息管理學院,北京 100192)
理工類院校的面向對象程序設計課程普遍選取Java 作為授課語言,Java 具有語法嚴謹、與平臺無關、安全性和健壯性良好等特點,同時也是JavaWeb 開發(fā)的前導課程。傳統(tǒng)的實驗教學模式是在理論授課結束后,安排一定學時的綜合實驗,試圖達到理解和鞏固知識模塊、提高設計與編碼的能力。然而,部分實驗存在過程單一、內容枯燥乏味、綜合拓展不足的問題,造成學生興趣下降,教師的教學效果和學生的動手能力都不盡如人意。
以信管專業(yè)面向對象程序設計課程的綜合實驗為例,通常教師下發(fā)實驗任務后不再手把手指導,學生依據(jù)需求規(guī)格說明自行設計、編碼、調試、發(fā)布。學生反映知識點龐雜、晦澀,設計理念不清晰,不知從何著手,普遍感到邏輯思維難度大,基本都是以“做完”實驗為目的,而不是追求“做好”實驗。實驗答辯審核時,教師限于時間和精力,也是快速檢查學生的系統(tǒng)功能和界面是否符合要求,很少關注編碼細節(jié)。學生的設計思路五花八門,代碼質量參差不齊,很難達到實驗設定目標。傳統(tǒng)的實驗步驟如下:首先對系統(tǒng)需求進行功能梳理,沒有模塊化設計,少數(shù)類文件承擔全部功能;接著完成臃腫的源程序編碼,對系統(tǒng)功能進行抽樣檢查;最后發(fā)布可能有隱患的系統(tǒng)。
出現(xiàn)上述問題的主要原因在于:雖然某些章節(jié)結束后會有對應的實驗課時,但不是綜合實驗,知識點串結較少,僅需少量源文件就能完成功能要求,系統(tǒng)設計隨意、粗糙。最后在綜合實驗環(huán)節(jié),學生還沒有訓練好軟件工程化的思想,不懂得模塊的概念和重要性,自然沒有能力進行分層設計,軟件質量差強人意。
實驗初期,教師不刻意教授模塊化設計思想,讓學生通過自主探索或者依據(jù)經驗進行系統(tǒng)設計和開發(fā),當大部分同學出現(xiàn)思維混亂、編碼亂套的時候,教師適當介入,引導學生思考問題出現(xiàn)的原因,查閱資料并討論可行的解決方案。
教師此時引入一種基于MVC 思想[1]的設計方案,讓學生初步認知概念和模式。MVC 是model,view,controller 的簡稱,強調以業(yè)務功能為核心,將系統(tǒng)在邏輯上分為視圖表現(xiàn)層、業(yè)務控制層和實體模型層,各層彼此獨立又相互協(xié)作。不同層各司其職,有利于通過工程化、工具化管理程序代碼,可維護性好、復用性高、部署快速,具有較低的生命周期成本。
優(yōu)化后的實驗步驟在梳理系統(tǒng)功能后,進行模塊劃分和組件設計,對模塊實施迭代編碼,接著開展單元測試,測試通過才能持續(xù)集成,直至系統(tǒng)功能檢查無誤,然后發(fā)布穩(wěn)定的系統(tǒng)。
實驗內容強化模塊化思想,結合案例驅動[2]或者項目導向[3]的教學模式,引導學生理解設計模式,訓練學生一步步迭代完成實驗。
實驗方式由原先的線下編碼、線下提交、教師人工審核升級為線下編碼、線上提交、平臺自動審核。考慮信管專業(yè)特點,選取信息處理類的典型實驗案例,經過裁剪、整合后部署到學院的實訓教育平臺[4]上。系統(tǒng)經過科學的模塊化設計,每個模塊再被拆分為若干子任務,子任務有順序要求,掛接在里程碑節(jié)點上。按照軟件工程化的要求,依次進行迭代開發(fā),學生不能任意選擇某個節(jié)點,必須嚴格按照開發(fā)流程進行。教師從繁瑣的輔導和答疑中解脫出來,隨時在后臺查看實驗進展情況,有針對性地提醒和講解,能夠專注于實驗案例的業(yè)務規(guī)則定制,提高教學效率。實驗進度如圖1 所示。
圖1 實驗進度
課題組選擇模擬文本界面的“團隊開發(fā)人員調度軟件”作為綜合實驗案例,系統(tǒng)以實現(xiàn)員工顯示及團隊人員調度為目標,以數(shù)組作為存儲數(shù)據(jù)的載體,完成數(shù)組的創(chuàng)建、顯示、查詢、增加、刪除等操作,考查多個知識點的掌握情況:多態(tài)、對象的關聯(lián)、異常的發(fā)生與處理[5]等。學生在實驗過程中理解面向接口的編程方法,學習模塊化設計。實驗過程采取單人單組、獨立開發(fā)的方式,要求實現(xiàn)以下功能。
(1)軟件采用單級菜單方式工作。當軟件運行時,在主界面根據(jù)指定的數(shù)據(jù)顯示公司所有成員列表。
(2)根據(jù)菜單提示,基于現(xiàn)有的公司成員,組建一個開發(fā)團隊。組建過程包括將成員插入團隊中,或從團隊中刪除某成員,還可以列出團隊中現(xiàn)有成員。
(3)開發(fā)團隊成員包括架構師、設計師和程序員,既有總人數(shù)限制,也有人員類型數(shù)量限制,如果操作不符合預設規(guī)則,將觸發(fā)和拋出自定義異常。
(4)菜單某項操作成功后,按回車鍵將重新顯示主界面。
教師依托實訓教育平臺,詳細講解模塊化分層的概念和設計方案,指導學生完成實驗步驟的調整,即將系統(tǒng)劃分為list 視圖模塊(對應表現(xiàn)層V)、manage 管理模塊(對應控制層C)和domain 實體模塊(對應模型層M),如圖2 所示。
圖2 系統(tǒng)模塊分層結構
其中l(wèi)ist 視圖模塊為主控模塊,由界面顯示類負責顯示菜單和退出系統(tǒng),通過調用服務模塊提供的方法完成人機交互功能;manage 管理模塊為實體對象的管理層,響應視圖模塊發(fā)送的請求,由公司員工管理類維護公司員工、團隊人員管理類維護團隊成員,同時處理由異常類傳遞的各種失敗信息;domain 實體模塊包含員工類及使用的設備信息,起到基礎數(shù)據(jù)支撐作用。這里體現(xiàn)了分而治之的MVC 設計思想,組織結構清晰、系統(tǒng)功能明確,使學生基于問題驅動加深認識和理解模塊化的軟件工程思想。
每個模塊再依據(jù)子任務,設計不同數(shù)量的組件類即單元文件。學生在“學練問”的過程中腦海已有比較清晰的認識,所以組件類的創(chuàng)建就不感覺難度了。指導學生繼續(xù)完成實驗步驟的調整,即每一個單元文件迭代編碼結束后都使用模擬數(shù)據(jù)進行測試,檢查功能是否正確和健壯,既要選擇合理的模擬數(shù)據(jù)驗證功能是否完整,還要使用非法的模擬數(shù)據(jù)檢驗異常的捕獲和處理情況。學生在不同場景中深刻理解異常的發(fā)生原因,能夠掌握異常的捕獲和處理方法,同時也能滲透單元測試[6]的概念和方法,體會軟件質量的重要性。
節(jié)點分配的任務經過編碼和測試后,進行線上提交,實訓教育平臺預置的評價規(guī)則對源文件自動審核,若不符合規(guī)范將拒絕提交操作,直至學生的修改符合要求為止。經過若干任務的迭代,系統(tǒng)搭建比較完整了,實驗進入驗收和總結階段。
MVC 設計思想在高年級的Java Web 課程才會詳細講解,嘗試將知識點進行適度前移,并與實驗融合,以問題為導向激發(fā)學生對模塊分層的興趣,理解“良好的設計是成功的一半”“MVC設計思想是系統(tǒng)的核心”[7]。
實驗依托實訓教育平臺,將系統(tǒng)功能劃分為若干模塊,使用分層迭代的軟件開發(fā)思路,模塊結構符合MVC 設計思想,為學生以后進行Java Web 的學習打下扎實基礎,起到水平提升和能力拔高的作用。
教師在實驗過程中循序漸進地引導學生發(fā)現(xiàn)問題,培養(yǎng)學生主動思考的習慣,能夠有效提升Java 實驗教學的質量和效果,使學生真正具備解決復雜問題的工程能力。
該實驗案例已應用在信管專業(yè)不同年級的實驗教學中,實驗學時可自適應裁剪和擴充??紤]低年級學生的理解程度與知識儲備,可以選取前4 學時作為章節(jié)實驗,只完成公司員工的列表功能,即將靜態(tài)字符串數(shù)組中的數(shù)據(jù)逐項構建為具有繼承結構的員工對象,加載到動態(tài)對象數(shù)組中,由公司員工管理類負責把對象信息打印在屏幕上。團隊人員管理類和異常類不參加系統(tǒng)工作,也沒有人機交互功能,但MVC 設計思想依然能夠嵌入實驗目標和內容里;還可以將完整項目放入高年級的專業(yè)實訓中,合計16 學時作為綜合實驗,要求實現(xiàn)全部業(yè)務邏輯,即系統(tǒng)提供數(shù)組的維護操作,從而完成團隊的人員調度。團隊人員管理類和異常類參加系統(tǒng)工作,人機交互功能豐富,MVC 設計思想更加深入。
教學實踐表明,大部分學生普遍感到實驗的形式有趣、內容新穎,對理論知識的掌握以及對動手能力的提高幫助很大,同時能夠進一步消化理解抽象的模塊化編程理念,熟悉軟件項目的工程化規(guī)范。
教學模式與信息技術與時俱進,可以繼續(xù)探討如果實訓教育平臺使用大數(shù)據(jù)的方式,采集和存儲多維教學信息,輔以人工智能進行決策分析,個性化的教學效果和反饋會更加突出,以便盡早實現(xiàn)專業(yè)知識與技能素養(yǎng)的雙向思維貫通。