摘要:針對目前JAVA語言在教學(xué)過程中存在的問題,對JAVA語言的教學(xué)定位進行重新思考,提出以工程應(yīng)用為導(dǎo)向,把知識點和應(yīng)用點進行有效結(jié)合的JAVA教學(xué)方法。
關(guān)鍵詞:工程應(yīng)用;JAVA語言;教學(xué)方法;教學(xué)定位
面向?qū)ο蟪绦蛟O(shè)計是目前程序設(shè)計的主流,是軟件開發(fā)人員必須掌握的一項基本的技術(shù)。JAVA是一種典型的面向?qū)ο蟮某绦蛟O(shè)計語言,是目前計算機行業(yè)使用最為廣泛的編程語言之一,相關(guān)就業(yè)崗位和市場需求都十分龐大。根據(jù)TIOBE公司的數(shù)據(jù)統(tǒng)計,在各種程序設(shè)計語言中,JAVA語言一直是最流行的語言之一。
1.JAVA教學(xué)中存在的問題
JAVA語言是一門基礎(chǔ)的程序設(shè)計課程,一般本科院校的JAVA課程開設(shè)在第三或第四學(xué)期。學(xué)生在學(xué)習(xí)JAVA之前學(xué)過一門程序設(shè)計語言C或者C++,因此,學(xué)生在學(xué)習(xí)JAVA課程時具有一定的語言基礎(chǔ)。但是在現(xiàn)階段的JAVA教學(xué)當(dāng)中,往往忽略這一點,把JAVA完全當(dāng)作一門“新課”來講授,通常會出現(xiàn)下面幾個問題。
1.1內(nèi)容重復(fù)
以前在C/C++中學(xué)習(xí)過的基本語法和程序設(shè)計,在JAVA課程中又被重復(fù)講解。比如,以前在C語言中學(xué)過了int、float、double、char等數(shù)據(jù)類型,還有C語言里面的基本流程控制語句for、while、switch case等,這都是程序設(shè)計語言的共性。如果在JAVA課程中再進行重復(fù)講解,學(xué)生聽起來會索然無味,不能激發(fā)學(xué)生的學(xué)習(xí)積極性。
1.2過多地偏重于語言本身,輕視應(yīng)用
現(xiàn)在很多JAVA教材都是重點講授JAVA語言的知識點,很少涉及JAVA語言的應(yīng)用點。如果在講課過程中,沒有跟學(xué)生說明JAVA的這些知識點的應(yīng)用,會使學(xué)生感覺迷茫,不知道學(xué)習(xí)JAVA的用途。
1.3規(guī)范性不強
現(xiàn)在普遍存在的問題是教師在講授JAVA時,僅僅講授知識點,而沒有和工程實際、工程應(yīng)用相結(jié)合。例如,在定義一個類的時候,為了簡單省事,直接命名為class A,這會造成學(xué)生編程的一個壞習(xí)慣——隨心所欲,而這正是工程應(yīng)用項目的大忌。
2.JAVA語言的教學(xué)定位
JAVA語言具有簡單明了、面向?qū)ο?、可移植、多線程、分布式、結(jié)構(gòu)中立、高性能、動態(tài)等特點,但是面向?qū)ο罂梢哉f是JAVA最重要的特性。JAVA語言的設(shè)計完全是面向?qū)ο蟮?,也可以說JAVA中“一切皆是對象”。JAVA語言的封裝性要比C++更強一些,而且很多關(guān)于底層的操作都已經(jīng)被屏蔽。比如,C++的指針在JAVA中已經(jīng)沒有了,且JAVA開發(fā)者不用投入太大的精力去關(guān)心底層的問題,所以學(xué)習(xí)JAVA會感覺比較容易,特別是以前學(xué)習(xí)過C/C++、具有一定程序設(shè)計基礎(chǔ)的學(xué)生。雖然JAVA語言學(xué)習(xí)起來看似比較容易,但是想要學(xué)好JAVA卻是比較困難的事情。這主要表現(xiàn)在以下兩個方面。
1)JAVA語言作為一門優(yōu)秀的程序設(shè)計語言,所包含的知識點非常多,這就容易分散學(xué)生的學(xué)習(xí)重點和學(xué)習(xí)精力,難以對課程學(xué)習(xí)有一個整體的把握。
JAVA語言作為一門專業(yè)基礎(chǔ)課,不僅要熟練掌握程序編譯和程序調(diào)試的方法,還要系統(tǒng)掌握程序編譯的原理和代碼運行的機制;不僅要熟練掌握傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法,還要深入理解現(xiàn)在流行的面向?qū)ο蟮脑O(shè)計思想和設(shè)計技巧;不僅要掌握J(rèn)AVA基本語法和JAVA基本語句的使用,還要學(xué)習(xí)一些JAVA的編程技巧和JAVA的編程規(guī)范;不僅要學(xué)會簡單的SQL語句的使用,還要深入理解這些SQL語句所處理的數(shù)據(jù)與對象的聯(lián)系。而多線程編程對學(xué)生來講又是一個比較大的難點,這就需要學(xué)生具有比較扎實的操作系統(tǒng)的學(xué)習(xí)基礎(chǔ),否則學(xué)生很難理解程序的運行為什么會中間中斷又穿插進其他的程序。網(wǎng)絡(luò)通信編程則要求學(xué)生具有較好的計算機網(wǎng)絡(luò)的基礎(chǔ)知識,否則也是難以理解的,學(xué)生只能“知其然而不知其所以然”。
2)“面向?qū)ο蟆苯虒W(xué)本身就有一定的難度。
如果學(xué)生以前學(xué)過C語言,沒學(xué)過C++的話,對“對象”的理解就會很困難。即使學(xué)習(xí)過C++,學(xué)生也很難充分的理解“對象”的概念。面向?qū)ο蟮某绦蛟O(shè)計方法是一個系統(tǒng)的方法,學(xué)生充分認(rèn)識需要一個過程。學(xué)生學(xué)習(xí)傳統(tǒng)的面向過程的程序設(shè)計時,主要面對數(shù)據(jù)和過程,而在面向?qū)ο蟮某绦蛟O(shè)計中就變成了屬性和方法,與此相對應(yīng)的還有類、繼承、上轉(zhuǎn)型、多態(tài)、接口回調(diào)等。對于這些內(nèi)容需要學(xué)生好好理解,用心領(lǐng)會,而不是泛泛了解、淺嘗輒止就能掌握的。
因此,我們需要在JAVA教學(xué)中重新定位,否則學(xué)生很難在有限的時間內(nèi)學(xué)好JAVA。如圖1所示是程序設(shè)計語言的關(guān)系示意圖,顯示了JAVA語言的教學(xué)內(nèi)容與以前所學(xué)的C/C++課程的關(guān)系,X軸代表JAVA方向,Y軸代表C/C++方向。這兩種程序語言之間存在很多共性,如果這些語言共性在C/C++課程中講過,那么JAVA就不要再重復(fù)。JAVA語言的教學(xué)要強調(diào)工程應(yīng)用,在實際的工程應(yīng)用當(dāng)中貫穿著JAVA的知識點,把JAVA的知識點和實際工程的應(yīng)用有機地結(jié)合起來。
3.以工程應(yīng)用為導(dǎo)向的JAvA教學(xué)方法
JAVA是一門程序設(shè)計語言,也可以說是一個工具,只有在工程應(yīng)用當(dāng)中才能體現(xiàn)出這個工具的價值。軟件工程專業(yè)主要是培養(yǎng)合格的未來軟件工程師,因此在教學(xué)當(dāng)中,就更要體現(xiàn)出工程應(yīng)用,以工程應(yīng)用為導(dǎo)向的JAVA教學(xué)方法,主要包括如下的內(nèi)容。
3.1以規(guī)則入手進行教學(xué)
JAVA是一門專業(yè)基礎(chǔ)課,在JAVA之后還有專業(yè)方向課,例如JSP程序設(shè)計、輕量級J2EE框架Spring、基于MVC的Web開發(fā)、ORM框架原理與應(yīng)用、XML編程技術(shù)等,在這些課程當(dāng)中,“規(guī)則”都是非常重要的。JSP是在JAVA學(xué)習(xí)之后的一門課程,它能夠在網(wǎng)頁中嵌入JAVA代碼,由JAVA代碼來完成業(yè)務(wù)邏輯的操作,其工作原理是首先把:jsp文件轉(zhuǎn)換成為一個特殊的JAVA文件——SERVLET,然后再轉(zhuǎn)換為,class文件,在客戶端響應(yīng)用戶的就是一個CLASS文件。SERVLET其實就是在服務(wù)器端執(zhí)行的一段JAVA程序,只不過它有專門的一套規(guī)則。在JSP之上的高級應(yīng)用,就更加強調(diào)“規(guī)則”,因為JAVA是開源的,大家可以在里面添加類庫、包等。如果沒有一定規(guī)則,大家無法共同使用和共同維護。因此在JAVA的教學(xué)當(dāng)中,要讓學(xué)生學(xué)會遵守“規(guī)則”,不能像學(xué)習(xí)C/C++那樣,只注重語法和程序設(shè)計思想,而忽略代碼的“非技術(shù)”問題。如代碼的縮進、代碼的注釋、類的命名、函數(shù)命名、變量命名與使用等,都要遵守“規(guī)則”。有了這樣一個遵守“規(guī)則”的習(xí)慣,學(xué)生在學(xué)習(xí)三大框架(Struts、Spring、Hibemate)時,就會比較容易理解。遵守“規(guī)則”也是保證軟件質(zhì)量的一個重要手段。輕量級J2EE框架Spring、基于MVC的Web開發(fā)Struts、ORM框架原理與應(yīng)用Hibernate,都是JAVA代碼的規(guī)范化應(yīng)用。
在工程應(yīng)用項目當(dāng)中,更加強調(diào)規(guī)范性。在學(xué)生剛開始學(xué)習(xí)程序設(shè)計語言的時候,老師一般會告訴學(xué)生,代碼是由機器來執(zhí)行的,所以在學(xué)生的心目當(dāng)中,認(rèn)為編寫的程序就是讓機器來執(zhí)行的,只要編譯正常、運行無誤就萬事大吉了。但是在工程應(yīng)用當(dāng)中,學(xué)生要明白“代碼不僅是給機器執(zhí)行的,更是要給人看的”,既然代碼是要給人來看,那就要遵守規(guī)范,否則很難讀懂的。例如,“}”一行放一個,就比連著放讓人容易明白;變量的定義intnumber max就比int i更好理解。
3.2主要講授JAVA的特點
JAVA語言完整的知識點包括JAVA的數(shù)據(jù)類型、JAVA的運算符、JAVA的流程控制、類與對象、JAVA的繼承與接口、JAVA多線程、JAVA的I/O流、JAVA的圖形界面、JAVA的網(wǎng)絡(luò)編程、JAVA的數(shù)據(jù)庫編程、Applet。但是在JAVA課程講授當(dāng)中,我們應(yīng)考慮現(xiàn)在實際的工程應(yīng)用,應(yīng)用比較多的要重點講解;應(yīng)用比較少的可以簡單講或不講。JAVA的數(shù)據(jù)類型、JAVA的運算符、JAVA的流程控制這些內(nèi)容屬于語言共性,完全不用再重復(fù)講解。類與對象以及JAVA的繼承與接口是一個重點內(nèi)容,需要詳細講解。如果以前沒有學(xué)習(xí)過面向?qū)ο蟮某绦蛟O(shè)計語言,那么對象、類、繼承、接口等這些內(nèi)容要深入的講解;如果以前學(xué)習(xí)過面向?qū)ο蟮某绦蛟O(shè)計語言,那么就需要進行對比講解,主要講解JAVA的不同之處。比如JAVA與C++的對比,在JAVA里面的接口回調(diào)、上轉(zhuǎn)型等,是JAVA特有的,需要學(xué)生用心體會、好好理解。JAVA多線程也是JAVA一個獨有的優(yōu)點,但是多線程的程序設(shè)計思想與以往的程序設(shè)計思想已經(jīng)完全不同了,學(xué)生在理解上會存在一定的困難,所以在課程的講解中一定要與操作系統(tǒng)的原理相結(jié)合。JAVA的I/O流、JAVA的圖形界面和JAVA的數(shù)據(jù)庫編程這些內(nèi)容雖然表面上不相同,但是實質(zhì)上是一樣的,學(xué)生也是比較好理解的。JAVA的網(wǎng)絡(luò)編程和Applet,又是JAVA的一大優(yōu)點。JAVA的快速發(fā)展在很大程度上得益于網(wǎng)絡(luò)的發(fā)展,因此JAVA先天就與網(wǎng)絡(luò)具有密切的聯(lián)系,同時網(wǎng)絡(luò)編程也是JAVA應(yīng)用的優(yōu)勢所在。Applet主要是早期為解決網(wǎng)絡(luò)問題而設(shè)計,但是現(xiàn)在已經(jīng)很少應(yīng)用了,只需要簡單講解即可。
3.3時刻突出應(yīng)用
JAVA語言的學(xué)習(xí)要達到學(xué)以致用,時刻把知識點和應(yīng)用點聯(lián)系起來,在應(yīng)用當(dāng)中來理解和掌握這些知識點。對于知識點的講解,要以工程應(yīng)用為切入點,強調(diào)知識點的應(yīng)用價值,這樣可以讓學(xué)生在應(yīng)用中理解這些知識點。目標(biāo)明確,學(xué)習(xí)就會比較有動力。知識點應(yīng)用不明確的學(xué)習(xí)過程如圖2所示,其認(rèn)知曲線是比較陡峭的,意味著對知識點的認(rèn)知是比較困難的,而且越往后認(rèn)知越難;知識點應(yīng)用明確的學(xué)習(xí)過程如圖3所示,其認(rèn)知曲線比較平滑,意味著一開始對所學(xué)的知識就有比較明確的認(rèn)知。隨著學(xué)習(xí)的深入,逐漸達到對知識的完全認(rèn)知。
在JAVA的教學(xué)過程中,通過工程應(yīng)用的引入,可以把枯燥無味的知識點變成鮮活有趣的應(yīng)用點。例如,對于“上轉(zhuǎn)型”知識點的引入,假如要開發(fā)一個物流運輸管理信息系統(tǒng),在系統(tǒng)當(dāng)中需要計算貨物的運輸費用,使用3種交通工具:Truck、Train、Plane。那么計算費用的方法(Cost)是分別放到3個交通工具類里面,還是單獨提取出來呢?很明顯如果放到3個類里面分別實現(xiàn),代碼的重復(fù)度太高,并且難以維護,這就需要把方法(Cost)抽象出來,放到Truck、Train、Plane的父類Conveyance里,然后Truck、Train、Plane再分別實現(xiàn)Cost方法。這樣我們可以根據(jù)前臺選擇交通工具的不同生成不同的對象(Truck、Train或Plane),然后上轉(zhuǎn)型為Conveyance對象進行數(shù)據(jù)的傳遞,這樣傳遞的是相同的對象,但是計算的是不同的運輸費用。
3.4以工程項目強化知識點應(yīng)用
JAVA語言的知識點是相對孤立的,通過工程應(yīng)用可以把這些知識點有效地融合起來,使學(xué)生“既看見樹木,又得到森林”。在JAVA的教學(xué)中可以在一開始引入一個大型的工程應(yīng)用項目“進銷存管理系統(tǒng)”,然后對該系統(tǒng)的功能進行分解,通過分解把不同的功能點與JAVA語言的知識點進行有效結(jié)合。這樣學(xué)生在學(xué)習(xí)過程中就可以不斷地嘗試?yán)眠@些知識點去解決工程應(yīng)用的問題,亦可以很好地提高學(xué)習(xí)的積極性。
4.結(jié)語
教學(xué)方法的改革與探索是教育界一個永恒的課題。隨著時代的進步和技術(shù)的發(fā)展,企業(yè)對軟件人才的需求也在不斷變化,這就需要我們構(gòu)建新的教學(xué)體系、探索新的教學(xué)方法、運用新的教學(xué)手段,提高教學(xué)質(zhì)量,培養(yǎng)未來合格的軟件工程師。我們在JAVA教學(xué)方法上的探索與實踐,提高了學(xué)生學(xué)習(xí)的積極性,促進了學(xué)生的理論知識和實踐動手能力的提高,也為學(xué)生學(xué)習(xí)后繼的課程打下了堅實的基礎(chǔ)。通過以工程應(yīng)用為導(dǎo)向的JAVA教學(xué)方法的引入,課程的教學(xué)質(zhì)量和教學(xué)效果明顯改善,學(xué)生普遍反映良好。教學(xué)方法的探索與實踐永無止境,我們會把這種以工程應(yīng)用為導(dǎo)向的教學(xué)方法在其他課程中推廣下去。
(見習(xí)編輯:劉麗麗)