文章編號(hào):1672-5913(2008)08-0040-02
摘要:本文總結(jié)了計(jì)算機(jī)專(zhuān)業(yè)類(lèi)實(shí)驗(yàn)教學(xué)的特點(diǎn)和難點(diǎn),提出可編程實(shí)驗(yàn)課件的思路,給出了設(shè)計(jì)原則、設(shè)計(jì)框架,給出了精確測(cè)量運(yùn)算時(shí)間、控制單步運(yùn)行、實(shí)現(xiàn)編程接口隱蔽等重要技術(shù)的實(shí)現(xiàn)方案,總結(jié)了應(yīng)用效果及適用條件。
關(guān)鍵詞:實(shí)驗(yàn)教學(xué);可編程課件;設(shè)計(jì);單步運(yùn)行
中圖分類(lèi)號(hào):G43
文獻(xiàn)標(biāo)識(shí)碼:B
1引言
學(xué)生們?cè)趯W(xué)習(xí)如數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計(jì)與分析、操作系統(tǒng)、編譯原理等專(zhuān)業(yè)課程時(shí),都需要上機(jī)編程驗(yàn)證其中的重要和基本算法,以加深對(duì)理論的理解。
但實(shí)驗(yàn)程序往往界面簡(jiǎn)陋,輸入和控制不方便,輸出不直觀?;蛘呤抢蠋煘榱嗽鰪?qiáng)教學(xué)效果制作了精美的課件,但往往也是按既定輸入和既定流程進(jìn)行演示的,沒(méi)有可編程性。
結(jié)合以上兩方面的特點(diǎn),下面介紹一種針對(duì)計(jì)算機(jī)專(zhuān)業(yè)的可編程實(shí)驗(yàn)課件的設(shè)計(jì)方法。
2設(shè)計(jì)原則
2.1弱化開(kāi)發(fā)工具的特性
一般的驗(yàn)證性實(shí)驗(yàn),重點(diǎn)是驗(yàn)證某個(gè)算法在各種情況下是否正確、效率如何。并不關(guān)心使用的編程工具是Java、C#還是C++。盡量讓學(xué)生不用再考慮如何針對(duì)每次不同的實(shí)驗(yàn)內(nèi)容去設(shè)計(jì)一個(gè)輸入、控制和輸出的界面,從而節(jié)約了有限的實(shí)驗(yàn)時(shí)間。
2.2強(qiáng)化輸入和輸出
一個(gè)好用的實(shí)驗(yàn)課件應(yīng)該能夠方便地輸入各種測(cè)試數(shù)據(jù),比如對(duì)于大的數(shù)據(jù),提供從文件載入的功能,學(xué)生只可以改變輸入,反復(fù)調(diào)試和驗(yàn)證,而不需要反復(fù)手工輸入相同或相似的一組數(shù)據(jù)。
盡量使用可視化界面,包括文本框、單選框、復(fù)選框、數(shù)字框、下拉列表框、按鈕等待,都可以作為快速輸入?yún)?shù)的控件,還可以提供保存輸入狀態(tài)的功能。
盡量采用圖形化、動(dòng)畫(huà)輸出,比如算法設(shè)計(jì)中的n皇后問(wèn)題,可以畫(huà)出n個(gè)皇后放置在棋盤(pán)中的情況,在每次嘗試一個(gè)放置位置時(shí),將其動(dòng)起來(lái)。
不適合采用圖形動(dòng)畫(huà)輸出的,需要監(jiān)視狀態(tài)的數(shù)據(jù),也可以根據(jù)其數(shù)據(jù)類(lèi)型選擇控件,參考表1。
2.3內(nèi)部實(shí)現(xiàn)要隱蔽,接口要簡(jiǎn)單通用
簡(jiǎn)單的編程接口能減少學(xué)生了解接口的時(shí)間,最理想的情況是隱蔽的接口,利用.NET/Java的屬性讀寫(xiě)訪(fǎng)問(wèn)器可實(shí)現(xiàn)這一點(diǎn)。
學(xué)生只需設(shè)計(jì)和填入要驗(yàn)證的關(guān)鍵代碼,課件運(yùn)行時(shí)即可自動(dòng)觸發(fā)屬性訪(fǎng)問(wèn)器,驅(qū)動(dòng)課件底層的代碼,得到課件所提供的圖形動(dòng)畫(huà)等效果。
3整體結(jié)構(gòu)設(shè)計(jì)
根據(jù)以上原則,我們?cè)O(shè)計(jì)的可編程實(shí)驗(yàn)課件結(jié)構(gòu)如圖1所示,其中控制接口部分的設(shè)計(jì)是難點(diǎn)和關(guān)鍵。
圖1 可編程課件的設(shè)計(jì)結(jié)構(gòu)
4單步跟蹤功能的設(shè)計(jì)
我們?cè)O(shè)計(jì)實(shí)驗(yàn)驗(yàn)證一個(gè)算法,往往需要關(guān)心其運(yùn)行的每一步。對(duì)于可編程的實(shí)驗(yàn)課件,如何提供這樣的功能,又不使程序回到開(kāi)發(fā)環(huán)境的調(diào)試斷點(diǎn)狀態(tài),是一個(gè)難點(diǎn)。我們借助多線(xiàn)程互斥技術(shù)和巧妙設(shè)計(jì)控制接口實(shí)現(xiàn)了這一點(diǎn)。圖2是我們做的n皇后問(wèn)題的效果圖。
圖2 可編程實(shí)驗(yàn)課件的單步跟蹤效果
下面講解如何實(shí)現(xiàn)這樣的控制:
第一步:需要開(kāi)啟一個(gè)工作多線(xiàn)程,實(shí)驗(yàn)者的實(shí)驗(yàn)代碼編寫(xiě)在線(xiàn)程函數(shù)里面。
第二步:設(shè)置一個(gè)創(chuàng)建一個(gè)全局的自動(dòng)復(fù)位模式的互斥對(duì)象,用于阻塞工作線(xiàn)程;設(shè)置一個(gè)全局的工作狀態(tài)變量,用于表示當(dāng)前處于連續(xù)工作模式還是單步執(zhí)行模式。
第三步:分析該實(shí)驗(yàn)的特點(diǎn),提取出和輸出狀態(tài)對(duì)應(yīng)的關(guān)鍵步驟,封裝成接口,在接口的實(shí)現(xiàn)中嵌入等待互斥對(duì)象復(fù)位的代碼。這樣,實(shí)驗(yàn)者的算法必然調(diào)反復(fù)用這個(gè)接口,當(dāng)互斥對(duì)象處于置位狀態(tài)時(shí)或者工作在連續(xù)模式時(shí),工作線(xiàn)程可以繼續(xù),否則工作線(xiàn)程被阻塞,處于等待狀態(tài)。
第四步:編寫(xiě)單步運(yùn)行按鈕的事件處理代碼,設(shè)置工作狀態(tài)為單步執(zhí)行模式,啟動(dòng)線(xiàn)程。
第五步:編寫(xiě)全速運(yùn)行按鈕的事件處理代碼,設(shè)置工作狀態(tài)為連續(xù)工作模式,啟動(dòng)線(xiàn)程。
5其他經(jīng)驗(yàn)
5.1使用線(xiàn)程分控制和實(shí)驗(yàn)兩個(gè)運(yùn)行體
將工作線(xiàn)程和界面線(xiàn)程分離,不會(huì)因?yàn)閷W(xué)生的代碼死循環(huán)或耗時(shí)長(zhǎng)導(dǎo)致課件無(wú)法操作。
5.2使用系統(tǒng)API獲取準(zhǔn)確的運(yùn)行時(shí)間
操作系統(tǒng)的線(xiàn)程管理函數(shù)都提供獲取每個(gè)線(xiàn)程處于系統(tǒng)態(tài)或用戶(hù)態(tài)的較準(zhǔn)確的時(shí)間。通過(guò)這些API,能夠準(zhǔn)確分析實(shí)驗(yàn)者所設(shè)計(jì)的算法的運(yùn)行時(shí)間。
5.3通過(guò)訪(fǎng)問(wèn)器來(lái)實(shí)現(xiàn)最隱蔽的接口封裝
Java和.NET都在語(yǔ)法上提供屬性的訪(fǎng)問(wèn)器,利用這個(gè)特點(diǎn),我們可以做到讓實(shí)驗(yàn)者感覺(jué)不到在什么地方調(diào)用了接口,而自動(dòng)獲得輸出演示能力。如在n后問(wèn)題中,教科書(shū)上定義x[k]表示第k行Queen的位置,我們就可以添加x[]的讀寫(xiě)訪(fǎng)問(wèn)器,這樣每當(dāng)學(xué)生的代碼更改x[k]時(shí),如x[k]++,自然就調(diào)用到了我們的寫(xiě)訪(fǎng)問(wèn)器,課件設(shè)計(jì)者在里面好的更新第k行Queen顯示的代碼就會(huì)執(zhí)行,對(duì)于學(xué)生來(lái)說(shuō)非常自然。
5.4使用面向?qū)ο蟮脑O(shè)計(jì)模式來(lái)分離設(shè)計(jì)者和實(shí)驗(yàn)者的代碼
在上面的設(shè)計(jì)方案中,實(shí)驗(yàn)設(shè)計(jì)者的代碼和學(xué)生的代碼是混雜的,學(xué)生在瀏覽時(shí)難免分心,如果有知識(shí)產(chǎn)權(quán)要求,也不容易保護(hù)。如果使用的是面向?qū)ο蟮恼Z(yǔ)言,可以將實(shí)驗(yàn)設(shè)計(jì)者的代碼封裝在基類(lèi)中,學(xué)生通過(guò)重載工作線(xiàn)程函數(shù),只編寫(xiě)和看到自己的實(shí)驗(yàn)代碼。
6結(jié)束語(yǔ)
作者在計(jì)算機(jī)專(zhuān)業(yè)的實(shí)驗(yàn)課程實(shí)踐中,嘗試了使用該方法的效果,大大加快了學(xué)生實(shí)驗(yàn)速度,特別提高了學(xué)生實(shí)驗(yàn)和分析算法的能力。比如在算法設(shè)計(jì)與分析的回溯這章的實(shí)驗(yàn)課時(shí),可以在一次課內(nèi),要求學(xué)生完成迭代回溯和遞歸回溯兩個(gè)版本,比較分析性能,讓學(xué)生得到充分鍛煉和理解。
參考文獻(xiàn)
[1] 趙秀英,王平軍. 高校實(shí)驗(yàn)教學(xué)的開(kāi)放模式探討[J]. 實(shí)驗(yàn)室科學(xué),2006,(6):44-46.
[2] 湯艷麗. 論多媒體在教學(xué)中的應(yīng)用[J]. 實(shí)驗(yàn)教學(xué)與儀器,2006,(3):37.
[3] 嚴(yán)雋薇. 電子信息類(lèi)本科實(shí)驗(yàn)教學(xué)機(jī)構(gòu)改革初探[J]. 電子高等教育學(xué)會(huì)2004年學(xué)術(shù)年會(huì)[C]. 北京:機(jī)械工業(yè)出版社,2004:142-145.