文章編號:1672-5913(2008)08-0040-02
摘要:本文總結了計算機專業類實驗教學的特點和難點,提出可編程實驗課件的思路,給出了設計原則、設計框架,給出了精確測量運算時間、控制單步運行、實現編程接口隱蔽等重要技術的實現方案,總結了應用效果及適用條件。
關鍵詞:實驗教學;可編程課件;設計;單步運行
中圖分類號:G43
文獻標識碼:B
1引言
學生們在學習如數據結構、算法設計與分析、操作系統、編譯原理等專業課程時,都需要上機編程驗證其中的重要和基本算法,以加深對理論的理解。
但實驗程序往往界面簡陋,輸入和控制不方便,輸出不直觀。或者是老師為了增強教學效果制作了精美的課件,但往往也是按既定輸入和既定流程進行演示的,沒有可編程性。
結合以上兩方面的特點,下面介紹一種針對計算機專業的可編程實驗課件的設計方法。
2設計原則
2.1弱化開發工具的特性
一般的驗證性實驗,重點是驗證某個算法在各種情況下是否正確、效率如何。并不關心使用的編程工具是Java、C#還是C++。盡量讓學生不用再考慮如何針對每次不同的實驗內容去設計一個輸入、控制和輸出的界面,從而節約了有限的實驗時間。
2.2強化輸入和輸出
一個好用的實驗課件應該能夠方便地輸入各種測試數據,比如對于大的數據,提供從文件載入的功能,學生只可以改變輸入,反復調試和驗證,而不需要反復手工輸入相同或相似的一組數據。
盡量使用可視化界面,包括文本框、單選框、復選框、數字框、下拉列表框、按鈕等待,都可以作為快速輸入參數的控件,還可以提供保存輸入狀態的功能。
盡量采用圖形化、動畫輸出,比如算法設計中的n皇后問題,可以畫出n個皇后放置在棋盤中的情況,在每次嘗試一個放置位置時,將其動起來。
不適合采用圖形動畫輸出的,需要監視狀態的數據,也可以根據其數據類型選擇控件,參考表1。

2.3內部實現要隱蔽,接口要簡單通用
簡單的編程接口能減少學生了解接口的時間,最理想的情況是隱蔽的接口,利用.NET/Java的屬性讀寫訪問器可實現這一點。
學生只需設計和填入要驗證的關鍵代碼,課件運行時即可自動觸發屬性訪問器,驅動課件底層的代碼,得到課件所提供的圖形動畫等效果。
3整體結構設計
根據以上原則,我們設計的可編程實驗課件結構如圖1所示,其中控制接口部分的設計是難點和關鍵。

圖1 可編程課件的設計結構
4單步跟蹤功能的設計
我們設計實驗驗證一個算法,往往需要關心其運行的每一步。對于可編程的實驗課件,如何提供這樣的功能,又不使程序回到開發環境的調試斷點狀態,是一個難點。我們借助多線程互斥技術和巧妙設計控制接口實現了這一點。圖2是我們做的n皇后問題的效果圖。

圖2 可編程實驗課件的單步跟蹤效果
下面講解如何實現這樣的控制:
第一步:需要開啟一個工作多線程,實驗者的實驗代碼編寫在線程函數里面。
第二步:設置一個創建一個全局的自動復位模式的互斥對象,用于阻塞工作線程;設置一個全局的工作狀態變量,用于表示當前處于連續工作模式還是單步執行模式。
第三步:分析該實驗的特點,提取出和輸出狀態對應的關鍵步驟,封裝成接口,在接口的實現中嵌入等待互斥對象復位的代碼。這樣,實驗者的算法必然調反復用這個接口,當互斥對象處于置位狀態時或者工作在連續模式時,工作線程可以繼續,否則工作線程被阻塞,處于等待狀態。
第四步:編寫單步運行按鈕的事件處理代碼,設置工作狀態為單步執行模式,啟動線程。
第五步:編寫全速運行按鈕的事件處理代碼,設置工作狀態為連續工作模式,啟動線程。
5其他經驗
5.1使用線程分控制和實驗兩個運行體
將工作線程和界面線程分離,不會因為學生的代碼死循環或耗時長導致課件無法操作。
5.2使用系統API獲取準確的運行時間
操作系統的線程管理函數都提供獲取每個線程處于系統態或用戶態的較準確的時間。通過這些API,能夠準確分析實驗者所設計的算法的運行時間。
5.3通過訪問器來實現最隱蔽的接口封裝
Java和.NET都在語法上提供屬性的訪問器,利用這個特點,我們可以做到讓實驗者感覺不到在什么地方調用了接口,而自動獲得輸出演示能力。如在n后問題中,教科書上定義x[k]表示第k行Queen的位置,我們就可以添加x[]的讀寫訪問器,這樣每當學生的代碼更改x[k]時,如x[k]++,自然就調用到了我們的寫訪問器,課件設計者在里面好的更新第k行Queen顯示的代碼就會執行,對于學生來說非常自然。
5.4使用面向對象的設計模式來分離設計者和實驗者的代碼
在上面的設計方案中,實驗設計者的代碼和學生的代碼是混雜的,學生在瀏覽時難免分心,如果有知識產權要求,也不容易保護。如果使用的是面向對象的語言,可以將實驗設計者的代碼封裝在基類中,學生通過重載工作線程函數,只編寫和看到自己的實驗代碼。
6結束語
作者在計算機專業的實驗課程實踐中,嘗試了使用該方法的效果,大大加快了學生實驗速度,特別提高了學生實驗和分析算法的能力。比如在算法設計與分析的回溯這章的實驗課時,可以在一次課內,要求學生完成迭代回溯和遞歸回溯兩個版本,比較分析性能,讓學生得到充分鍛煉和理解。
參考文獻
[1] 趙秀英,王平軍. 高校實驗教學的開放模式探討[J]. 實驗室科學,2006,(6):44-46.
[2] 湯艷麗. 論多媒體在教學中的應用[J]. 實驗教學與儀器,2006,(3):37.
[3] 嚴雋薇. 電子信息類本科實驗教學機構改革初探[J]. 電子高等教育學會2004年學術年會[C]. 北京:機械工業出版社,2004:142-145.