羅恩韜
摘要:針對(duì)高校Java程序設(shè)計(jì)課程的開(kāi)設(shè)和實(shí)際開(kāi)發(fā)聯(lián)系不緊密的矛盾,提出在理論教學(xué)過(guò)程中穿插講解游戲項(xiàng)目,同時(shí)在教學(xué)內(nèi)容、教學(xué)過(guò)程、教學(xué)情境3個(gè)方面總結(jié)對(duì)這門(mén)課程的教學(xué)改革過(guò)程,探討在課程教學(xué)中,如何培養(yǎng)學(xué)生的理論結(jié)合應(yīng)用能力、程序分析能力、項(xiàng)目工程開(kāi)發(fā)能力。
關(guān)鍵詞:Java程序設(shè)計(jì);教學(xué)內(nèi)容改革;教學(xué)過(guò)程改革;教學(xué)情境改革
0、引言
Java程序設(shè)計(jì)語(yǔ)言是目前高校計(jì)算機(jī)專業(yè)學(xué)生的必修課程之一。目前高校計(jì)算機(jī)專業(yè)學(xué)生的理論學(xué)習(xí)和實(shí)際應(yīng)用編程能力的矛盾尤為突出。因此如何解決這一矛盾是目前國(guó)內(nèi)高校計(jì)算機(jī)專業(yè)教師研究的重點(diǎn)。文獻(xiàn)[1]提出了Java系列課程的教學(xué)改革,且在課程建設(shè)上有較多的改革,但是在改革過(guò)程中沒(méi)有引進(jìn)具體的項(xiàng)目開(kāi)發(fā)。文獻(xiàn)[2]在Java課程的教學(xué)過(guò)程中引進(jìn)了項(xiàng)目教學(xué)法,是一個(gè)比較新的突破,但是并沒(méi)有與學(xué)生進(jìn)行互動(dòng)同步開(kāi)發(fā)。文獻(xiàn)[3]提出了面向應(yīng)用型人才培養(yǎng)的教學(xué)改革方法,但是缺少具體的實(shí)施過(guò)程。文獻(xiàn)[4]主要對(duì)教學(xué)內(nèi)容進(jìn)行了較大的改革,但是依舊偏向理論教學(xué)。因此本文結(jié)合以上文獻(xiàn)的研究經(jīng)驗(yàn),提出結(jié)合游戲開(kāi)發(fā)的Java程序設(shè)計(jì)課程的教學(xué)改革,解決學(xué)生以往面向?qū)ο笏枷虢⒗щy、理論聯(lián)系實(shí)際開(kāi)發(fā)能力差的矛盾,同時(shí)在開(kāi)發(fā)過(guò)程中增強(qiáng)學(xué)生的提出問(wèn)題、分析問(wèn)題、解決問(wèn)題的能力。
1、研究重點(diǎn)
面向?qū)ο缶幊讨饕且环N很強(qiáng)的實(shí)踐性技能,不是單純地依靠課堂講授就可以讓學(xué)生掌握,而單一的、無(wú)項(xiàng)目結(jié)合的實(shí)踐課程也僅僅只能讓學(xué)生掌握相關(guān)的語(yǔ)法,并不能了解整個(gè)面向?qū)ο笏枷氲拈_(kāi)發(fā)技巧,因此一旦學(xué)生面對(duì)真正意義的應(yīng)用時(shí),就很難將實(shí)際的開(kāi)發(fā)模塊或者軟件進(jìn)行邏輯抽象,按照類、方法、對(duì)象、構(gòu)造函數(shù)、初始化、訪問(wèn)權(quán)限等屬性進(jìn)行邏輯拆分。同時(shí)在面對(duì)具體業(yè)務(wù)設(shè)計(jì)的時(shí)候,學(xué)生的開(kāi)發(fā)思路就會(huì)陷入困惑,不知道從哪里人手,而如果按照以往傳統(tǒng)的教學(xué)模式,這些技能的掌握是比較難以解決的。那么如何才能使學(xué)生掌握這樣的開(kāi)發(fā)能力和編程技巧呢?這是本課程教學(xué)改革的研究重點(diǎn)。
在Java程序設(shè)計(jì)課程開(kāi)設(shè)之前,學(xué)生一般都學(xué)習(xí)過(guò)C/C++課程,而在C/C++程序語(yǔ)言已經(jīng)系統(tǒng)地講授過(guò)類、重載、多態(tài)、異常等內(nèi)容。因此如果單純地按照教材的編寫(xiě)章節(jié)進(jìn)行課堂授課,就不會(huì)有較好的學(xué)習(xí)效果。目前國(guó)內(nèi)很多高校實(shí)踐課時(shí)雖然在24學(xué)時(shí)以上,但是依然沒(méi)有用一個(gè)完整的項(xiàng)目將理論知識(shí)串聯(lián)起來(lái),忽略了學(xué)生實(shí)際技能的培養(yǎng),導(dǎo)致學(xué)生學(xué)習(xí)知識(shí)與技能實(shí)踐的脫節(jié)。因此本文結(jié)合學(xué)生的學(xué)習(xí)過(guò)程和本課程的特點(diǎn),提出了理論和實(shí)踐并行的教學(xué)方式,利用在實(shí)際項(xiàng)目中穿插并行講授面向?qū)ο蟮闹R(shí),從而取得較好的學(xué)習(xí)效果。
2、Tava教學(xué)內(nèi)容改革
根據(jù)上述問(wèn)題,湖南科技學(xué)院計(jì)算機(jī)與通信工程系正在對(duì)Java程序設(shè)計(jì)這門(mén)課程進(jìn)行教學(xué)改革。改革后的理論教學(xué)和實(shí)踐教學(xué)總課時(shí)為56課時(shí),但是和以往分為課堂講授和實(shí)踐上機(jī)不同的是,我們所有課程的開(kāi)設(shè)均在機(jī)房進(jìn)行,教學(xué)老師全程進(jìn)行Java編程平臺(tái)Eclipse的編程教學(xué),而對(duì)于理論教學(xué)內(nèi)容,主要側(cè)重以下章節(jié)的講授:Java的單繼承和接口、消息監(jiān)聽(tīng)、容器、線程、多態(tài)、10流、網(wǎng)絡(luò)編程、圖形用戶界面等部分,相對(duì)弱化了Java的變量、常量、重載、重寫(xiě)、構(gòu)造函數(shù)等章節(jié)的理論教學(xué)(這部分的理論教學(xué)會(huì)在實(shí)踐開(kāi)發(fā)項(xiàng)目中進(jìn)行強(qiáng)化)。而實(shí)踐教學(xué)則通過(guò)一個(gè)游戲開(kāi)發(fā)的項(xiàng)目穿插應(yīng)用了上述理論知識(shí),同時(shí)對(duì)沒(méi)有重點(diǎn)講授的理論知識(shí)進(jìn)行了補(bǔ)足。最重要的是整個(gè)游戲項(xiàng)目貫穿了面向?qū)ο蟮木幊趟枷搿?/p>
3、教學(xué)過(guò)程改革
教學(xué)過(guò)程的改革主要體現(xiàn)在以下幾個(gè)方面。
(1)首先從類的教學(xué)開(kāi)始深入,因?yàn)镴ava程序設(shè)計(jì)課程開(kāi)設(shè)的時(shí)候,學(xué)生們一般都是先修了c或c++語(yǔ)言,因此對(duì)基本的語(yǔ)法和面向?qū)ο蟾拍钣辛艘欢ǖ恼J(rèn)識(shí)。在類的學(xué)習(xí)過(guò)程中,我們會(huì)結(jié)合GUI圖形用戶界面編程這一章的內(nèi)容進(jìn)行窗口的設(shè)計(jì),同時(shí)直接使用Eclipse開(kāi)發(fā)平臺(tái)進(jìn)行開(kāi)發(fā),使學(xué)生迅速進(jìn)入可視化開(kāi)發(fā)環(huán)境中。
(2)經(jīng)過(guò)初步的GUI圖形用戶界面的學(xué)習(xí)和開(kāi)發(fā),在實(shí)際代碼的編寫(xiě)過(guò)程中,讓學(xué)生迅速掌握類的設(shè)計(jì)、成員的定義、構(gòu)造函數(shù)的生成、成員的訪問(wèn)屬性、Get和Set方法的設(shè)計(jì),同時(shí)在進(jìn)行創(chuàng)建對(duì)象的時(shí)候,舉例講授ToString()方法和Equals( )方法的使用,在類的設(shè)計(jì)里就會(huì)用到成員變量、局部變量、堆、棧等基礎(chǔ)知識(shí)。這樣會(huì)讓學(xué)生系統(tǒng)地了解Java程序設(shè)計(jì)這門(mén)課的基礎(chǔ)知識(shí)。
(3)熟悉Eclipse開(kāi)發(fā)平臺(tái)的使用。在C/C++語(yǔ)言中,我們通常使用VC開(kāi)發(fā)平臺(tái),但是在以往的實(shí)踐課程中,每次課的學(xué)習(xí)進(jìn)行編程練習(xí)的代碼不超過(guò)100行,并且前后實(shí)驗(yàn)課之間沒(méi)有必然的聯(lián)系,因此學(xué)生在實(shí)踐操作中對(duì)知識(shí)點(diǎn)的掌握相對(duì)孤立,不能融會(huì)貫通。因此在本次教學(xué)改革中,我們?cè)O(shè)計(jì)的前后實(shí)驗(yàn)課之間的代碼是累進(jìn)的,在邏輯上是緊密結(jié)合的。隨著代碼開(kāi)發(fā)的深入,學(xué)生會(huì)對(duì)開(kāi)發(fā)平臺(tái)的各種功能了解的更準(zhǔn)確更詳細(xì),包括包、類的創(chuàng)建、異常的調(diào)試、Tomcat服務(wù)器的配置、后臺(tái)數(shù)據(jù)庫(kù)的綁定、多視圖的協(xié)同工作等。在這一部分的鍛煉中,學(xué)生會(huì)從以前單純的書(shū)本了解的面向?qū)ο蟮闹R(shí)過(guò)渡到實(shí)際的面向?qū)ο缶幊毯兔嫦驅(qū)ο笏枷氲慕ⅲ@一步非常關(guān)鍵。
(4)每次實(shí)踐開(kāi)課的時(shí)候,要做到目的明確,重點(diǎn)突出,同理論知識(shí)緊密聯(lián)系。這樣不僅可以讓學(xué)生集中精力參與到實(shí)踐過(guò)程中來(lái),也可以保證學(xué)生在課堂上擁有活躍的思維。同時(shí)與學(xué)生一同開(kāi)發(fā)分析,便于學(xué)生掌握解決問(wèn)題的思路,掌握分析問(wèn)題和解決問(wèn)題的方法。而在今后遇到更加復(fù)雜的問(wèn)題時(shí),學(xué)生也可以舉一反三。
(5)課后實(shí)踐拓展。課后我們以小組的方式由學(xué)生根據(jù)當(dāng)天課程內(nèi)容自行選擇某模塊進(jìn)行擴(kuò)展。每一個(gè)模塊的代碼量通常在500行左右,通過(guò)這樣的方式,學(xué)生鞏固了上課的內(nèi)容。因?yàn)樗麄円O(shè)計(jì)一個(gè)新的模塊,就必須要考慮到和已經(jīng)開(kāi)發(fā)成功代碼之間的銜接和調(diào)用關(guān)系。學(xué)生之間的合作也增加了他們的溝通和合作能力,這樣的鍛煉對(duì)于以后進(jìn)入公司進(jìn)行項(xiàng)目的合作開(kāi)發(fā)有很大的價(jià)值。endprint
4、教學(xué)情景改革
為配合以上教學(xué)過(guò)程的改革,我們?cè)诮虒W(xué)情景上也做了相應(yīng)的調(diào)整。在這里我們主要引入游戲項(xiàng)目來(lái)增加學(xué)生的學(xué)習(xí)興趣。教學(xué)情景的改革通過(guò)游戲項(xiàng)目的迭代開(kāi)發(fā),累計(jì)代碼量在3000行左右,拓展代碼在5000行左右,在編程規(guī)范、注釋方面進(jìn)行了嚴(yán)格的要求,為培養(yǎng)學(xué)生良好的編程習(xí)慣打下了基礎(chǔ)。在項(xiàng)目中結(jié)合幾種常見(jiàn)的有效教學(xué)方法,增強(qiáng)學(xué)生的學(xué)習(xí)效果,做到教學(xué)相長(zhǎng)。
1)項(xiàng)目演示法。
在第一節(jié)實(shí)驗(yàn)課的時(shí)候,教師會(huì)將完整的項(xiàng)目開(kāi)發(fā)的最終版本在課堂上演示,增強(qiáng)學(xué)生的學(xué)習(xí)興趣,同時(shí)在課堂上鼓勵(lì)學(xué)生,只要每次上課同教師進(jìn)行同步開(kāi)發(fā),就一定可以完成該游戲的編程。
2)同步開(kāi)發(fā)法。
在Java編程語(yǔ)言教學(xué)以往的實(shí)踐課程中,主要由教師進(jìn)行講授,然后安排實(shí)驗(yàn)任務(wù)。由學(xué)生自己完成,這樣雖然一定程度上鼓勵(lì)了學(xué)生利用自己的主觀能動(dòng)性進(jìn)行學(xué)習(xí),但是也存在部分學(xué)生因?yàn)椴荒芡瓿啥a(chǎn)生畏難和放棄的思想。因此,本課程改革為利用教師和學(xué)生同步開(kāi)發(fā)的方法,教師在教師機(jī)上編程,學(xué)生在學(xué)生機(jī)上同步開(kāi)發(fā)。這樣教師可以監(jiān)控每個(gè)學(xué)生的學(xué)習(xí)情況,學(xué)生也可以跟上教師的教學(xué)思路和編程思想,從而在課程結(jié)束的時(shí)候,每個(gè)學(xué)生都可以開(kāi)發(fā)出這個(gè)游戲,也就自然而然地掌握了編程規(guī)范和開(kāi)發(fā)技巧。
案例的部分代碼如下:
import Java,awt,Color;
import Java.awt.Graphics;
public class Bomb{
imx;inty;Test tc;
int step=O:
boolean b_live=true;
//引入炸彈的生命
int radius[]=
{20,4,8,16,32,64,127,31,12,5,1};
//定義炸彈的半徑
publicBomb(imx,int y,Testtc){
this.x=x;this.y=y;this.tc=tc;
/*
*此處放一個(gè)鉤子的用處
*是為了在子彈類里面便于
*將新增加的炸彈加到Test類
*里面的danyaoku的容器之中
*/
}
public void bdraw(Graphics g){
if(b_live=false){
return;
}
if(step=radius.1ength){
step=O;
b_live=false;
}
Color c=g.getColor( );
g.setColor(Color.RED);
g.fillOval(x,y,radius[step],radius[step]);
g.setColor(c);
step++;
}
}
3)階段拓展法。
每進(jìn)行一個(gè)階段的開(kāi)發(fā),教師就會(huì)給出一個(gè)同步項(xiàng)目,在功能模塊上有所改動(dòng),由學(xué)生自行根據(jù)前期的開(kāi)發(fā)過(guò)程進(jìn)行模擬開(kāi)發(fā),這樣不僅拓展學(xué)生的思路,也鞏固了學(xué)生的學(xué)期成果。
4)漏洞分析法。
最后,在教學(xué)中講解一些常見(jiàn)的代碼漏洞,主要是解決非語(yǔ)法錯(cuò)誤所造成的邏輯問(wèn)題,通過(guò)這種方式把解決問(wèn)題的整個(gè)過(guò)程呈現(xiàn)給學(xué)生,最終達(dá)到讓學(xué)生掌握如何發(fā)現(xiàn)問(wèn)題、分析問(wèn)題、解決問(wèn)題的方法和了解最核心系統(tǒng)的整體架構(gòu)。
5、結(jié)語(yǔ)
筆者結(jié)合近幾年Java程序設(shè)計(jì)課程的教學(xué)經(jīng)驗(yàn),在教學(xué)過(guò)程中主要讓教師通過(guò)引進(jìn)開(kāi)發(fā)項(xiàng)目的教學(xué)手段增加學(xué)生的直觀感受和學(xué)習(xí)興趣。實(shí)踐證明,經(jīng)過(guò)教學(xué)改革后,學(xué)生的面向?qū)ο蟮脑O(shè)計(jì)思想增強(qiáng),在程序設(shè)計(jì)的過(guò)程中,其發(fā)現(xiàn)問(wèn)題、分析問(wèn)題和解決問(wèn)題的能力得到了大幅度的提高。endprint