摘要:本文闡述了Java編程語(yǔ)言教學(xué)方法的一些特點(diǎn),同時(shí)詳細(xì)討論了該課程教學(xué)的基本內(nèi)容和教學(xué)難點(diǎn)。
關(guān)鍵詞:Java語(yǔ)言;教學(xué)方法;教學(xué)重點(diǎn)
中圖分類(lèi)號(hào):G642文獻(xiàn)標(biāo)識(shí)碼:B
1教學(xué)方法的探索
1.1側(cè)重啟發(fā)編程思想
學(xué)習(xí)一種編程語(yǔ)言,最重要的是掌握編程思想,找到編程感覺(jué),而不是死記硬背語(yǔ)言本身。多數(shù)情況下,一旦掌握編程思想,面對(duì)新的編程語(yǔ)言時(shí),只需要簡(jiǎn)單了解該語(yǔ)言的語(yǔ)法特點(diǎn)就可以即學(xué)即用。編程思想是在反復(fù)的實(shí)踐、觀察、分析、比較、總結(jié)中潛移默化積累的。因些教師在講解中注意內(nèi)容不要形式化、教條化、概念化、提綱化。首先要培養(yǎng)學(xué)生解決實(shí)際問(wèn)題的能力,然后引導(dǎo)學(xué)生如何用程序來(lái)表現(xiàn)。要把程序的組織結(jié)構(gòu)、語(yǔ)句含義、運(yùn)行流程和實(shí)際問(wèn)題對(duì)應(yīng)起來(lái)。教師可以讓學(xué)生先解決一些簡(jiǎn)單的實(shí)際問(wèn)題,掌握編程的一些常用結(jié)構(gòu)和方法。然后邊學(xué)邊用,學(xué)生熟練掌握編程技術(shù)后,就可以獨(dú)立編程了。
1.2設(shè)計(jì)實(shí)例激發(fā)興趣
在教學(xué)實(shí)踐中,筆者認(rèn)識(shí)到學(xué)生能夠自己動(dòng)手解決實(shí)際問(wèn)題是他們學(xué)習(xí)的最直接動(dòng)力,是激發(fā)學(xué)習(xí)興趣的根源所在。現(xiàn)在絕大多數(shù)Java語(yǔ)言教學(xué)重心仍停留在語(yǔ)法、函數(shù)、控件的介紹上,極大地挫傷了學(xué)生學(xué)習(xí)的興趣,更談不上對(duì)能力的培養(yǎng)。我們課堂教學(xué)中將語(yǔ)言的語(yǔ)法知識(shí)和其他知識(shí)點(diǎn)按主題劃分成單元,每個(gè)主題準(zhǔn)備多個(gè)實(shí)例和練習(xí)。實(shí)例盡量實(shí)用,這樣既可提高學(xué)生的學(xué)習(xí)興趣,又能學(xué)以致用;同時(shí)實(shí)例也要簡(jiǎn)單,容易理解,但如是很實(shí)用的實(shí)例,復(fù)雜點(diǎn)也無(wú)關(guān),直接給出公式或算法就行。主題的安排要注意循序漸進(jìn)、前后銜接,要防止知識(shí)點(diǎn)過(guò)分集中以減少學(xué)生的負(fù)擔(dān)。實(shí)例的講解以編程思路為主線,遇到知識(shí)點(diǎn)要學(xué)生參看相關(guān)幫助。如為了能使學(xué)生掌握面向?qū)ο缶幊痰乃悸?,向?qū)W生提出開(kāi)發(fā)復(fù)數(shù)加減程序的要求。這個(gè)程序要用到復(fù)數(shù)這種數(shù)據(jù)類(lèi)型,假設(shè)沒(méi)有現(xiàn)成的,故先得自己開(kāi)發(fā)復(fù)數(shù)類(lèi),然后用自然語(yǔ)言中的概念和個(gè)體解釋類(lèi)和對(duì)象的概念。之后,定義復(fù)數(shù)類(lèi),定義它的方法時(shí)只定義加減運(yùn)算,并告訴學(xué)生也可想得遠(yuǎn)一點(diǎn)把乘除運(yùn)算也定義在內(nèi)。最后,用這個(gè)類(lèi)實(shí)現(xiàn)復(fù)數(shù)加減程序。
在實(shí)際教學(xué)中將學(xué)習(xí)內(nèi)容劃分為輸入輸出及算術(shù)和比較運(yùn)算、循環(huán)和數(shù)組、隨機(jī)函數(shù)、類(lèi)的定義與使用、GUI與事件偵聽(tīng)、時(shí)鐘、錯(cuò)誤的處理等幾個(gè)主題,分別設(shè)計(jì)輸入一個(gè)實(shí)數(shù)輸出它的相反數(shù)或特定結(jié)果;某個(gè)范圍內(nèi)的數(shù)(可有某一特征如奇偶性)的累加或累積、計(jì)算復(fù)利、多學(xué)生多門(mén)課的成績(jī)統(tǒng)計(jì)、多推銷(xiāo)員多產(chǎn)品的酬金統(tǒng)計(jì);模擬擲硬幣、擲骰子、飄雪花隨機(jī)數(shù)生成過(guò)程;輸入一段明文輸出一段密文的加密程序和相反過(guò)程的解密程序、簡(jiǎn)易計(jì)算器界面設(shè)計(jì)、電費(fèi)計(jì)算等;可以使學(xué)生在實(shí)踐中快速掌握J(rèn)ava編程的基本方法和面向?qū)ο缶幊趟悸罚邆湓O(shè)計(jì)交互式Java圖形界面程序的基礎(chǔ),學(xué)會(huì)重復(fù)和批量數(shù)據(jù)的處理和異常處理等實(shí)用功能。這樣用程序代碼實(shí)例來(lái)講解有關(guān)知識(shí)點(diǎn)的方法深受學(xué)生歡迎,而且會(huì)讓學(xué)生記憶深刻,達(dá)到事半功倍的效果。
1.3利用對(duì)比加深理解
對(duì)比的目的是理解隱藏在程序語(yǔ)而背后的設(shè)計(jì)哲理,使我們知道對(duì)于一個(gè)問(wèn)題的解決,為什么在此語(yǔ)言中是這樣一種解決方案,而在彼語(yǔ)言中又是那樣一種解決方案?這樣思考會(huì)讓我們更好地掌握編程語(yǔ)言的精髓。
通過(guò)與C++的對(duì)比,可以使學(xué)生更好地理解Java的設(shè)計(jì)哲理,使學(xué)生不但明白Java是如何做的,還可以進(jìn)一步使學(xué)生知道Java“為什么”這么做,例如我們可通過(guò)兩種語(yǔ)言之間編程效率與執(zhí)行效率的對(duì)比,通過(guò)兩種語(yǔ)言在各自的改革、發(fā)展中所采取的方式來(lái)進(jìn)行對(duì)比,讓學(xué)生通過(guò)對(duì)比學(xué)習(xí)加深對(duì)Java的理解。
在編程效率與執(zhí)行效率的對(duì)比中,Java是一種講求編程效率的語(yǔ)言,盡量降低程序員編程的復(fù)雜性,降低設(shè)計(jì)穩(wěn)定、安全的程序代碼所產(chǎn)生的時(shí)間和困難度是Java語(yǔ)言的最終設(shè)計(jì)目標(biāo)。像Java把線程、網(wǎng)絡(luò)編程等復(fù)雜而非常重要的工作包裝起來(lái)提供給程序員使用,就是Java技術(shù)特點(diǎn)的一個(gè)很好表現(xiàn);而C++則是講求執(zhí)行效率,它認(rèn)為程分體現(xiàn)了Java和C++之間的差異。在對(duì)函數(shù)多態(tài)性的處理上,多態(tài)函數(shù)調(diào)用與非多態(tài)函數(shù)調(diào)用相比,效率比較低。C++中是有選擇的進(jìn)行多態(tài),只有庫(kù)函數(shù)才能多態(tài),以此保證程序的靈活性,保證程序的執(zhí)行效率;而在Java中,除標(biāo)為“final”的函數(shù)外都可以多態(tài),因此Java程序員不必為選擇哪個(gè)函數(shù)而多費(fèi)心思。
1.4多閱讀經(jīng)典多動(dòng)手實(shí)踐
學(xué)習(xí)Java編程語(yǔ)言要經(jīng)常閱讀一些經(jīng)典的書(shū)籍和源碼,對(duì)自我提高、開(kāi)闊視野非常有幫助。有選擇地推薦學(xué)生課余閱讀《Java 2編程詳解》、《Java 2從入門(mén)到精通》,更深的如《Thinking in Java》、《Java2核心技術(shù)卷一,二》、《Java2圖形設(shè)計(jì) 卷1:AWT 卷2:Swing-Graphic Java 1.2》等。但要想真正把別人的東西消化掉,一定要親自動(dòng)手實(shí)現(xiàn)其中一些關(guān)鍵例程,體會(huì)一下自己的思路與經(jīng)典源碼的差距,從而提高獨(dú)立分析問(wèn)題和解決問(wèn)題的能力。
多組織學(xué)生自己動(dòng)手模擬項(xiàng)目的開(kāi)發(fā)過(guò)程,由于面向?qū)ο蟮某绦蛟O(shè)計(jì)是典型的自頂向下程序設(shè)計(jì)方法,因此教師在指導(dǎo)學(xué)生動(dòng)手寫(xiě)程序之前,應(yīng)該使學(xué)生明白,設(shè)計(jì)一個(gè)應(yīng)用程序首先要確定程序的總體結(jié)構(gòu),分析所要解決的問(wèn)題需要使用哪些類(lèi);然后用抽象類(lèi)搭建程序框架,考慮這些類(lèi)在Java已有的類(lèi)庫(kù)中是否已經(jīng)存在,它們的構(gòu)造方法以及類(lèi)方法的名字、功能及形參表如何;如果只存在類(lèi)似的類(lèi),是否可以考慮通過(guò)繼承的辦法,由其子類(lèi)完成所需要的功能,輸入輸出界面采用哪種形式,如何布局;最后準(zhǔn)備初始化數(shù)據(jù),并通過(guò)創(chuàng)建類(lèi)對(duì)象完成程序功能。經(jīng)過(guò)寫(xiě)一個(gè)較完整程序的訓(xùn)練,學(xué)生一方面可以學(xué)習(xí)程序設(shè)計(jì)的方法;另一方面經(jīng)過(guò)逐層分解,各自承擔(dān)一小部分的編碼,共同完成一個(gè)程序設(shè)計(jì)任務(wù)。這樣,既使學(xué)生掌握了程序設(shè)計(jì)方法,又培養(yǎng)了他們開(kāi)發(fā)軟件的團(tuán)隊(duì)精神。
2Java教學(xué)重點(diǎn)
對(duì)于Java程序設(shè)計(jì)的教學(xué),應(yīng)該注重以下兩個(gè)方面的內(nèi)容。
2.1Java的語(yǔ)法教學(xué)
語(yǔ)法學(xué)習(xí)是任何語(yǔ)言的必經(jīng)階段,很難想象連語(yǔ)法都不熟悉如何進(jìn)行程序設(shè)計(jì)。Java的語(yǔ)法和C以及C++的語(yǔ)法非常類(lèi)似,這一部分的學(xué)習(xí)學(xué)生基本上不會(huì)感到很大的壓力。絕大多數(shù)的Java書(shū)籍主要的內(nèi)容都是Java的語(yǔ)法。在進(jìn)行語(yǔ)法教學(xué)時(shí),要求學(xué)生重點(diǎn)理解以下內(nèi)容:數(shù)據(jù)類(lèi)型、操作符、控制流程、類(lèi)、類(lèi)的繼承、接口以及接口的實(shí)現(xiàn)、包以及包的使用、異常處理、線程等。為了加深對(duì)Java基本語(yǔ)法的掌握,在進(jìn)行教學(xué)和學(xué)生上機(jī)練習(xí)時(shí),要求學(xué)生用Windows下的記事本編寫(xiě)代碼。如果一開(kāi)始就利用集成開(kāi)發(fā)環(huán)境進(jìn)行教學(xué),不利于學(xué)生對(duì)基本語(yǔ)法的掌握。在此階段還有一個(gè)非常重要的訓(xùn)練就是要求用Java編譯器Javac.exe去檢查語(yǔ)法錯(cuò)誤,這樣可以很快提高學(xué)生對(duì)基本語(yǔ)法的掌握。Java語(yǔ)法教學(xué)的基本目標(biāo)是對(duì)Java的基本語(yǔ)法有一個(gè)整體認(rèn)識(shí),能讀懂源代碼,能夠?qū)懗龊?jiǎn)單的Java程序。很多教師不注重讀程序的教學(xué),讀程序首先要理出程序的結(jié)構(gòu),然后才能夠理解程序的功能,這也是進(jìn)行語(yǔ)法教學(xué)的有效環(huán)節(jié)。
2.2Java基本類(lèi)庫(kù)的學(xué)習(xí)
有相當(dāng)部分教師認(rèn)為Java的基本類(lèi)庫(kù)不需要學(xué)習(xí),因?yàn)榭梢噪S時(shí)查看Java API的資料或者利用集成開(kāi)發(fā)環(huán)境下的聯(lián)機(jī)幫助。根據(jù)多年的開(kāi)發(fā)經(jīng)歷和教學(xué)實(shí)踐來(lái)看,學(xué)生應(yīng)該對(duì)基本類(lèi)庫(kù)有個(gè)整體了解,然后需要熟練掌握J(rèn)ava類(lèi)庫(kù)中的兩個(gè)包:Java.lang和Java.util。這兩個(gè)包提供的是Java編程要用到的基本類(lèi),需要理清楚這些類(lèi)或接口的繼承關(guān)系、主要功能。在教學(xué)中要注意總結(jié)相關(guān)類(lèi)的區(qū)別,如String、String-Buffer、StringTokenizer這三個(gè)類(lèi)有什么差別?FileInput-Stream和FileReader有什么區(qū)別?它們繼承了哪些類(lèi),實(shí)現(xiàn)了哪些接口呢?
例如有這樣的一個(gè)練習(xí):編寫(xiě)一個(gè)計(jì)算9+99+999+…的第10項(xiàng)到第20項(xiàng)之和的Java應(yīng)用程序。部分學(xué)生在解決這個(gè)問(wèn)題時(shí)采用如下的程序:
public class ComputeSum
{
public static void main(String args[])
{
long sum=0,j=9999999999;
for(int i=10;i<21;i++)
{
sum=sum+j;
j=j*10+9;
}
System.out.println (“總和為”+sum);
}
}
很顯然,這是對(duì)Java的數(shù)據(jù)類(lèi)型掌握的不熟悉,對(duì)Java的基本類(lèi)庫(kù)也不清楚。上述程序中的結(jié)果利用長(zhǎng)整型是無(wú)法存放的,因?yàn)榻Y(jié)果太大。
3結(jié)束語(yǔ)
Java語(yǔ)言是一門(mén)能很快帶給學(xué)生學(xué)有所成感覺(jué)的課程,老師應(yīng)該力求把一些理論和實(shí)踐經(jīng)驗(yàn)通俗地講出來(lái),使學(xué)生體驗(yàn)軟件開(kāi)發(fā)的樂(lè)趣,本文所淺談的幾點(diǎn)體會(huì)在教學(xué)實(shí)踐中收到了很好的效果,對(duì)于計(jì)算機(jī)而言有語(yǔ)言類(lèi)的課程是相通的,因此本文的幾點(diǎn)經(jīng)驗(yàn)值得在其他相近課程中嘗試。
參考文獻(xiàn):
[1] 張孝祥. Java就業(yè)培訓(xùn)教程[M]. 北京:清華大學(xué)出版社,2003.
[2] 閻菲,陳利等. Java程序設(shè)計(jì)教程[M]. 北京:中國(guó)水利水電出版社,2004.
[3] 張華. 課程與教學(xué)論[M]. 上海教育出版社,2000.