文章編號:1962-5913(2008)11-0063-02
摘要:本文探討了程序可視化技術在程序設計語言教學中的應用問題,并介紹了筆者所設計的用VB編寫的冒泡排序算法的程序可視化應用實例。
關鍵詞:程序;可視化;教學
中圖分類號:G642
文獻標識碼:B
引言
可視化技術充分發(fā)揮了人對幾何圖形圖像的認知能力,采用視覺方法為科學研究、工程設計領域和教學應用提供了新的解決方法或?qū)W習方法,成為近10年來計算機科學中的熱點,其理論和技術也日益成熟,并運用到計算機科學的許多領域。程序可視化就是利用計算機的圖形對所研究的程序的功能和行為進行圖形模擬。在這個模擬可視化的過程中困難的是最大限度地使模擬出的圖形易被人們理解。而且每一個不同的程序就要使用不同的方法進行圖形的可視化模擬。這都給程序可視化的研究帶來了許多的困難。但是隨著計算機多媒體通信技術的不斷進步。計算機日益支持各種高級的人機接口形式。能給人們提供更多的圖形表現(xiàn)形式。以滿足人們各種不同的表現(xiàn)方式。
程序可視化直觀地將程序用圖形來表示。圖形能給人直觀的感覺,使難懂的程序變得明了和富有表現(xiàn)力??梢暬煞譃槎喾N,如程序可視化、數(shù)據(jù)可視化和算法可視化。程序可視化包含程序執(zhí)行的動態(tài)表現(xiàn)。程序可視化能幫助我們理解程序是如何實現(xiàn)的。它的效率如何。這個程序與其他程序有和不同之處。因此有必要進行程序可視化的應用研究。
由于每一個程序的不同,所以就沒有一種程序可視化的模擬方法是萬能的,即既可以用于這一程序可視化,又可以適用與其他的程序可視化。對各個程序可視化問題需采用不同的方法,從這一點來說,程序可視化是一門藝術,只要靈活運用,精心設計,就能達到易于理解和藝術化的境界。目前Windows操作系統(tǒng)為我們提供了優(yōu)美的圖形化設計環(huán)境,而許多面向?qū)ο蟮某绦蛟O計語言使人們有了更多的選擇余地。
計算機的普及應用和軟件的開發(fā)利用,計算機輔助教學在課堂教學中的作用越來越大,特別是在較難理解的課程的課堂教學中的作用更為明顯,因為它可以將聲、光、電有機地融為一體,使學習者耳目一新,同時又激發(fā)了他們的學習興趣,達到了事半功倍的效果。然而計算機程序設計語言課程自身的輔助教學卻遠落后于其他課程的計算機輔助教學在課堂教學中的應用。這是我們計算機語言程序設計課程教學的教師對此沒有足夠重視。本文提出的程序可視化技術在計算機語言程序設計課程教學中的應用。能夠利用計算機的圖形展示程序的功能,能激發(fā)學習者的學習興趣。
1程序可視化的過程
可視化技術運用于科學研究的全過程??梢暬幚磉^程從大量原始數(shù)據(jù)的采集開始,通過過濾,去除干擾因素及噪音,經(jīng)過映射將數(shù)據(jù)轉(zhuǎn)化為基本的幾何圖形元,利用它們,并結(jié)合設計好的圖形生成模型,采用圖形圖像技術,繪制成圖,最終反映給用戶。其流程如圖1。
在框圖中,各模塊獨立作用,完成獨立的功能,并將處理過后的消息傳遞給其他模塊。通過準確設計模塊的工作任務,用戶就能避免重復的編程設計。由于模塊功能獨立運行,因此為系統(tǒng)的并行實現(xiàn)提供了可能性。
2程序可視化的應用設計
本文實現(xiàn)程序的可視化方法是在原用于教學的源程序中插入一小段程序用于實現(xiàn)程序的可視化,而不破壞源程序的結(jié)構(gòu)。這樣可以使本方法具有一定的通用性,也便于程序的學習和理解。這一小段用于程序可視化的程序不會破壞源程序的正常運行。是否加入這一小段程序,僅僅在于是否使這個源程序有可視化的功能而已。這種方法特別適合于初學程序設計的人員,以及在程序設計語言教學中的應用。在這里我們使用的是可視化編程語言Visual Basic。
Visual Basic是極其有特色和功能強大的軟件,主要表現(xiàn)在:所見即所得的程序界面設計,基于對象的設計方法,極短的軟件開發(fā)周期,較易維護的生成代碼。它也是我們學習計算機程序語言的入門高級語言。在這里所說的可視化程序語言主要指的是程序設計過程的可視化,即所見即所得的程序界面設計,不同于本文在這里討論的程序可視化。程序可視化是為了把程序運行過程的可視化。即把程序運行過程用圖示的方法顯示出來。
在本例程序中,我們是用不同大小的圓表示不同大小的數(shù)據(jù),這在冒泡排序程序中是很形象化的,形象地再現(xiàn)了冒泡的過程。在其他的排序程序中可以探討其他的表現(xiàn)方式,以最能再現(xiàn)該程序的過程特點為目標。
3程序可視化的應用實例
以在高級程序語言教學中最常見的冒泡排序程序為例。可視化的冒泡排序程序如下:
For i = 1 To 5‘原程序部分
For j = 1 To 5 - i
If a(j) > a(j + 1) Then
t = a(j)
a(j) = a(j + 1)
a(j + 1) = t
For k = 1 To 5‘插入的可視化部分程序
Circle (i * 3000 + j * 800, 300 + 1000 * k), 38 * a(k), 99 * i
Text1(k - 1).Text = Str(a(k))
Next k
End If
Sleep (1000) ‘延時等待
Next j
Next i
For i = 1 To 5‘插入的可視化部分程序
Text1(i - 1).Text = Str(a(i))
Print a(i)
Circle(18800,800 + 1000 * i),30 *a (i),5
Next i
程序運行結(jié)果如下圖所示:
從以上的程序運行結(jié)果可以清楚地看出本程序的運行共交換了幾次,比較兩個相鄰圖形,即可知道每次交換的是哪兩個數(shù)據(jù)。在這里的數(shù)據(jù)是從文本框數(shù)組中輸入的。我們在程序運行中可以改變這些數(shù)據(jù)以便于觀察不同數(shù)據(jù)時的排序過程。我們可以把本可視化的部分程序插入選擇法排序程序中同樣能得到該程序可視化的效果,也能清楚地分辨出這兩種排序程序的不同之處。
參考文獻
[1] 但靜培等. 基于編譯技術的程序可視化[J]. 計算機應用研究,2002,(10):51-52.
[2] 王繼龍. 計算機科學領域的可視化技術[J]. 計算機與現(xiàn)代化,2000,(6):19-21.
[3] 劉孟仁,劉海慶. 軟件可視化技術及其應用研究[J]. 計算機應用研究,2002,(6):26-28.