摘 要:為了提高學(xué)生Java編程能力,實(shí)現(xiàn)培養(yǎng)創(chuàng)新人才的目標(biāo),分析了Java程序設(shè)計(jì)教學(xué)的內(nèi)容和重點(diǎn),并闡述了如何提高Java教學(xué)質(zhì)量的一些觀點(diǎn)。這些教學(xué)思想和方法經(jīng)Java教學(xué)實(shí)踐運(yùn)用,取得了良好的效果。
關(guān)鍵詞:Java 教學(xué)方法 程序設(shè)計(jì)
中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1673-9795(2014)02(a)-0041-02
面向?qū)ο蟪绦蛟O(shè)計(jì)是目前程序設(shè)計(jì)的主流,是軟件開(kāi)發(fā)人員必須掌握的一項(xiàng)基本的技術(shù)。Java是一種典型的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,已在學(xué)術(shù)界、產(chǎn)業(yè)界得到廣泛應(yīng)用。如何培養(yǎng)和激發(fā)學(xué)生學(xué)習(xí)興趣、想象力、創(chuàng)造力和創(chuàng)新能力,更好地進(jìn)行Java程序設(shè)計(jì)的教學(xué),如何培養(yǎng)能夠適應(yīng)當(dāng)今社會(huì)發(fā)展需要、具有良好整體素質(zhì)的Java程序設(shè)計(jì)人才是很多教師都在思考的問(wèn)題。
1 Java教學(xué)的定位與內(nèi)容
根據(jù)教學(xué)研究型大學(xué)的實(shí)際情況,我們的目標(biāo)是培養(yǎng)具有創(chuàng)新精神和實(shí)踐能力的高素質(zhì)應(yīng)用型人才。Java教學(xué)實(shí)現(xiàn)的最終目標(biāo)是培養(yǎng)合格的軟件工程師,相關(guān)的教學(xué)就應(yīng)該圍繞這一目標(biāo)而設(shè)計(jì)。Java的教學(xué)內(nèi)容一般說(shuō)來(lái)包含如下部分:Java語(yǔ)言基礎(chǔ);Java面向?qū)ο蟮某绦蛟O(shè)計(jì);輸入輸出流及文件操作;Applet和圖形用戶(hù)界面(GUI);Java的多線程機(jī)制;Java網(wǎng)絡(luò)編程基礎(chǔ);Java與數(shù)據(jù)庫(kù)技術(shù)[1]。從課程內(nèi)容看,Java內(nèi)容多,知識(shí)點(diǎn)散,沒(méi)有一條明確的主線。與傳統(tǒng)的面向過(guò)程編程語(yǔ)言相比,面向?qū)ο蠼虒W(xué)本身有一定難度。面向?qū)ο缶幊陶Z(yǔ)言提出很多新概念如繼承、多態(tài)、異常等,這些都需要學(xué)生用心體會(huì)和掌握。
2 Java教學(xué)的重點(diǎn)
Java安排在C++程序設(shè)計(jì)語(yǔ)言之后開(kāi)設(shè),學(xué)生已經(jīng)有一定的程序基礎(chǔ)。很多學(xué)生受面向過(guò)程設(shè)計(jì)思想的影響,首先進(jìn)行函數(shù)算法等細(xì)節(jié)設(shè)計(jì),然后把所有的函數(shù)都放入到一個(gè)類(lèi)中,所有的函數(shù)都是靜態(tài)函數(shù),程序雖然有一個(gè)類(lèi),但是忽略了類(lèi)的設(shè)計(jì),沒(méi)有體現(xiàn)面向?qū)ο蟮脑O(shè)計(jì)思想[2]。因此,教學(xué)的重點(diǎn)是側(cè)重于面向?qū)ο蟮乃枷牒头椒ǖ呐囵B(yǎng),深刻理解Java的核心思想。只有掌握了普遍的規(guī)律與核心思想,才能把握J(rèn)ava技術(shù)發(fā)展的新趨勢(shì),學(xué)生才具備可持續(xù)發(fā)展的能力。
3 提高Java教學(xué)質(zhì)量的途徑
3.1 明確課程學(xué)習(xí)目標(biāo)
學(xué)習(xí)不能總是空中樓閣的感覺(jué),要讓學(xué)生明晰目標(biāo),并找到前進(jìn)的途徑。學(xué)習(xí)Java程序設(shè)計(jì)這門(mén)課的最終目標(biāo)是成為Java軟件工程師。學(xué)生了解了Java軟件工程師的社會(huì)需求,明確了作為Java軟件工程師應(yīng)該具備的技能。這樣,學(xué)生在學(xué)習(xí)過(guò)程中,有了方向,有了目標(biāo),也就有了動(dòng)力。學(xué)習(xí)Java的總體路線是:Java語(yǔ)言基礎(chǔ)→J2SE高級(jí)特性→JSPServlet→J2EE構(gòu)架技術(shù)[3]。而Java程序設(shè)計(jì)是成為Java軟件工程師的入門(mén)條件,這門(mén)課程的學(xué)習(xí)只是其中的第一步。通過(guò)本學(xué)期的學(xué)習(xí),具體要實(shí)現(xiàn)的課程目標(biāo)是要重點(diǎn)掌握J(rèn)ava語(yǔ)法以及面向?qū)ο缶幊痰乃枷牒头椒ā?/p>
3.2 精選教學(xué)內(nèi)容、強(qiáng)調(diào)知識(shí)點(diǎn)的關(guān)聯(lián)性
我們平常選擇教學(xué)內(nèi)容時(shí),把一些不常用到的知識(shí)點(diǎn)進(jìn)行省略,(如帶有標(biāo)號(hào)之類(lèi)的跳轉(zhuǎn)語(yǔ)句和比較繁雜的表達(dá)式運(yùn)算規(guī)則、位運(yùn)算等等),此方法的運(yùn)用可以節(jié)省課時(shí)的同時(shí)最大程度的指引和輔導(dǎo)學(xué)生編寫(xiě)簡(jiǎn)單、可讀性好的程序代碼。我們通過(guò)多年的教學(xué)經(jīng)驗(yàn),認(rèn)為Java程序設(shè)計(jì)課程的核心內(nèi)容包含以下三方面:(1)Java語(yǔ)言基礎(chǔ);(2)Java語(yǔ)言的新特性;(3)授課時(shí),把介紹JDK類(lèi)庫(kù)的常用類(lèi)以穿插的方式融入到上述內(nèi)容中。
在講解面向?qū)ο蟮幕A(chǔ)知識(shí)點(diǎn)時(shí),我們采用的是一個(gè)信息分類(lèi)的例子來(lái)做說(shuō)明,而這類(lèi)情況學(xué)生在現(xiàn)實(shí)生活中會(huì)經(jīng)常碰到,理解比較容易。比如,現(xiàn)在要把一大類(lèi)的光盤(pán)進(jìn)行分類(lèi),首先我們要抽象出 VCD及CD的共性來(lái)得出一個(gè)基本的類(lèi)Item,在此基礎(chǔ)上可以對(duì)它進(jìn)行繼承得出一個(gè)子類(lèi)CD,很形象。
3.3 將面向?qū)ο蟪绦虻募軜?gòu)內(nèi)容融入教學(xué)過(guò)程
為了提高學(xué)生對(duì)面向?qū)ο蟮睦斫?,在教學(xué)過(guò)程中加入面向?qū)ο蟪绦虻募軜?gòu)內(nèi)容,并對(duì)程序架構(gòu)設(shè)計(jì)中常見(jiàn)的一些原則進(jìn)行分析總結(jié)。
假如你是個(gè)建筑工程師,那么你在建造樓房的時(shí)候,你會(huì)先搭建好整個(gè)樓房的骨骼,然后往里面嵌入磚頭,最后才是裝修。做Java系統(tǒng)也是這樣,先從整體上把握并設(shè)計(jì)系統(tǒng),這就是架構(gòu)。我們通過(guò)這些淺顯的比喻力爭(zhēng)使學(xué)生領(lǐng)悟架構(gòu)的內(nèi)涵。而程序架構(gòu)設(shè)計(jì)中的原則實(shí)質(zhì)其實(shí)就是如何分類(lèi)組織我們編寫(xiě)的代碼,就像一個(gè)好書(shū)架的圖書(shū)分類(lèi),讓各種類(lèi)型的書(shū)籍都能分類(lèi)擺放,便于瀏覽和查找。
3.4 項(xiàng)目貫穿,以線帶點(diǎn)
借鑒了案例教學(xué)和任務(wù)驅(qū)動(dòng)式教學(xué)的一些做法,教師在教學(xué)中將一個(gè)小項(xiàng)目“圖書(shū)管理系統(tǒng)”的實(shí)現(xiàn)貫穿于整個(gè)教學(xué)過(guò)程之中。所謂“以線帶點(diǎn)”是以問(wèn)題和實(shí)際項(xiàng)目為主線,貫穿各個(gè)分散的Java知識(shí)點(diǎn),完成Java知識(shí)點(diǎn)的脈絡(luò)化[5]。
實(shí)現(xiàn)是分階段進(jìn)行的,在學(xué)習(xí)Java基礎(chǔ)知識(shí)后,讓學(xué)生完成對(duì)圖書(shū)數(shù)據(jù)的增加、刪除、修改、查找操作等操作。將數(shù)據(jù)放在數(shù)組中,沒(méi)有圖形界面。而在學(xué)習(xí)完輸入輸出后,這時(shí),數(shù)據(jù)則要求存放在文本文件中,讓學(xué)生從文本文件中讀取數(shù)據(jù),將每條記錄封裝成對(duì)象進(jìn)行各種操作后,再將其存入文本文件。學(xué)習(xí)完圖形用戶(hù)界面后,再讓學(xué)生加入友好的圖形界面。最后,在講授數(shù)據(jù)庫(kù)程序設(shè)計(jì)時(shí),將數(shù)據(jù)由文件存放改為在數(shù)據(jù)庫(kù)中存放,采用JDBC驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)庫(kù)。每學(xué)習(xí)一部分內(nèi)容,就對(duì)圖書(shū)管理系統(tǒng)的版本進(jìn)行改進(jìn),改進(jìn)的過(guò)程就是不斷完善的過(guò)程,也是學(xué)生不斷學(xué)習(xí)和提高動(dòng)手能力的過(guò)程,從而把單純的知識(shí)傳授轉(zhuǎn)變?yōu)閷W(xué)生動(dòng)手能力的培養(yǎng)和提高。
3.5 滲透軟件設(shè)計(jì)模式思想,提高學(xué)生的可持續(xù)發(fā)展能力
設(shè)計(jì)模式是前人總結(jié)的一些經(jīng)驗(yàn)和良好的設(shè)計(jì)范式。把握良好的設(shè)計(jì)模式能夠理清程序的骨架,使程序變得更清晰。要讓學(xué)生在畢業(yè)后具備可持續(xù)發(fā)展能力,我們更應(yīng)該注重學(xué)生的編程思維和思想,提高學(xué)生的問(wèn)題解決能力。為了讓學(xué)生能更好地理解面向?qū)ο蟮脑O(shè)計(jì)思想,雖然教材中沒(méi)有軟件設(shè)計(jì)模式的相關(guān)內(nèi)容,考慮到學(xué)生將來(lái)的發(fā)展,在相關(guān)章節(jié)進(jìn)行穿插講解軟件設(shè)計(jì)模式思想。通過(guò)這些Java語(yǔ)言的設(shè)計(jì)模式,來(lái)理解面向?qū)ο缶幊痰膹?qiáng)大功能以及相對(duì)于結(jié)構(gòu)化語(yǔ)言的優(yōu)越性。對(duì)于一個(gè)具體問(wèn)題,教師用基本的面向?qū)ο笤O(shè)計(jì)方法與引入設(shè)計(jì)模式后的程序進(jìn)行對(duì)比講解,詳細(xì)分析每種方法的設(shè)計(jì)過(guò)程。在教師的啟發(fā)下,學(xué)生比較兩種方法在出發(fā)點(diǎn)、設(shè)計(jì)思想和最終結(jié)果的差別,領(lǐng)悟出面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)勢(shì)以及引入設(shè)計(jì)模式后的革新等。最后,告訴學(xué)生任何模式都只是工具,而作為程序員的職責(zé),就是在自己的工作中正確使用這些工具。
3.6 舉辦講座,開(kāi)拓視野,提高學(xué)生對(duì)面向?qū)ο蠛退惴ǖ睦斫?/p>
只有通過(guò)編寫(xiě)高效率的算法才能使得一個(gè)實(shí)用軟件得到開(kāi)發(fā)。因而在Java教學(xué)中,算法的設(shè)計(jì)是非常重要的。但是由于課堂時(shí)間的限制,就不能占用較多的課時(shí)去彌補(bǔ)學(xué)生在算法方面的不足和缺陷。所以,我們用講座的形式拓展學(xué)生在算法方面的能力,這樣將非常有助于學(xué)生創(chuàng)新能力的培養(yǎng)。
我們?cè)谥v座中針對(duì)約瑟夫環(huán)問(wèn)題用三種方法分別予以實(shí)現(xiàn)。約瑟夫環(huán)問(wèn)題是指有n個(gè)人圍成一圈,按順時(shí)針?lè)较蚓幪?hào)1到n。圈中從1到m報(bào)數(shù),凡是到m的人先退出,下一個(gè)人接著從1開(kāi)始報(bào)數(shù),計(jì)算這n個(gè)人的出圈順序[7]。針對(duì)這個(gè)問(wèn)題,分別用靜態(tài)數(shù)組算法、arrayList動(dòng)態(tài)數(shù)組算法和循環(huán)鏈表算法予以實(shí)現(xiàn),并對(duì)這個(gè)三種算法的運(yùn)算時(shí)間進(jìn)行比較。通過(guò)比較,得到的結(jié)果是,在數(shù)據(jù)量不大的情況下,采用靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組、循環(huán)鏈表運(yùn)行約瑟夫環(huán)的時(shí)間差別不大。而隨著數(shù)據(jù)量的不斷增大,編寫(xiě)循環(huán)鏈表代碼顯示出的時(shí)間優(yōu)勢(shì)對(duì)程序員來(lái)說(shuō)更為可貴。最后,從約瑟夫環(huán)問(wèn)題的本質(zhì)上來(lái)看,這是一個(gè)典型的遞歸問(wèn)題。除求解遞歸問(wèn)題的通用方法外,最佳的方案是利用基數(shù)m到基數(shù)10的替換來(lái)求解。另外,循環(huán)鏈表及動(dòng)態(tài)數(shù)組能夠增加學(xué)生對(duì)面向?qū)ο蟾拍畹乃伎?,從而把相同的算法推廣到相似的問(wèn)題中,達(dá)到舉一反三的效果。
4 結(jié)語(yǔ)
由于社會(huì)需求的日益變化,計(jì)算機(jī)緊跟其后迅猛發(fā)展。由于這一變化,促使我們更要不斷的更新我們的教學(xué)方法和教學(xué)手段。在Java教學(xué)中我們通過(guò)不斷的研究是實(shí)際的操作,取得了豐碩的教研成果。這樣就使得我們?cè)谔嵘龑?zhuān)業(yè)教學(xué)的方面有了一定的起發(fā),而且促進(jìn)了學(xué)生理論水平和實(shí)踐能力的提高。
參考文獻(xiàn)
[1]姚明,彭志平,李奇銳.教學(xué)型本科院校計(jì)算機(jī)專(zhuān)業(yè)Java教學(xué)之我見(jiàn)[J].計(jì)算機(jī)教育,2011(4):51-55.
[2]楊瑞龍,朱征宇,朱慶生.引入軟件設(shè)計(jì)模式的面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)方法[J]. 計(jì)算機(jī)教育,2012(10):97-100.
[3]陳濤.Java程序設(shè)計(jì)教學(xué)思想與方法的探討[J].電腦知識(shí)與技術(shù),2011(10): 2446-2447,2450.
[4]葉恒舟.Java程序設(shè)計(jì)教學(xué)探討[J].科技信息,2007(1):23-25.
[5]李瑞生.Java教學(xué)中學(xué)生實(shí)踐和創(chuàng)新能力的培養(yǎng)[J].計(jì)算機(jī)教育,2011(18): 12-15.
[6]王永紅.約瑟夫環(huán)經(jīng)典問(wèn)題的幾種算法比較[J].現(xiàn)代計(jì)算機(jī),2008(1):36-37,54.
[7]Ronald L.Graham, Donald E. Knuth, and Oren Patashnik.Concrete Mathematics[Z].Addison-Wesley,second edition,1994.