李向 趙濟 吳亮
摘要:由于Java語言具有簡單易用、面向?qū)ο蟆⒖缙脚_等特性,使其一經(jīng)面世就受到廣泛關(guān)注,成為目前使用最為廣泛的網(wǎng)絡(luò)編程語言之一??紤]到Java語言應(yīng)用的廣泛性,越來越多的高校開設(shè)了Java程序語言設(shè)計課程,并且受到了極大的關(guān)注和重視。為了提升學(xué)生對Java面向?qū)ο蟪绦蛟O(shè)計的學(xué)習(xí)效果,基于多年的Java教學(xué)實踐經(jīng)驗,本文總結(jié)了一套基于“四線”的Java程序設(shè)計教學(xué)方法,即溫故知新、繼往開來、舉一反三、寧靜致遠。通過講授與實踐相結(jié)合的方式,從基礎(chǔ)語法、面向?qū)ο?、可視化以及網(wǎng)絡(luò)編程等方面讓學(xué)生從入門到精通。
關(guān)鍵詞:Java;面向?qū)ο?;封裝;繼承;教學(xué)方法
中圖分類號:G642.0 文獻標(biāo)志碼:A 文章編號:1674-9324(2018)41-0151-04
一、引言
Java語言作為一種面向?qū)ο蟮目梢钥缙脚_的程序設(shè)計語言,具有高效性、安全性、通用性和平臺移植性等特點[1],在當(dāng)今云計算和互聯(lián)網(wǎng)+的熱潮下,Java語言有著更顯著的優(yōu)勢和更廣闊的空間。目前Java語言在計算機、手機、互聯(lián)網(wǎng)、通信、數(shù)據(jù)中心等行業(yè)都得到了廣泛的應(yīng)用[2]-[3],因此,Java語言程序設(shè)計成為了計算機等相關(guān)專業(yè)的必修課程,高校的很多專業(yè)都開設(shè)了Java語言的課程,如何讓學(xué)生簡易地掌握一門新的語言,并能熟練完成相應(yīng)程序的開發(fā)成了Java教學(xué)的重點與難點[4]-[6]。為了使學(xué)生掌握J(rèn)ava面向?qū)ο蟪绦蛟O(shè)計思想,培養(yǎng)學(xué)生的科學(xué)思維和創(chuàng)新能力,本文通過基礎(chǔ)語法對比學(xué)習(xí)來達到溫故知新的目的,基于面向?qū)ο笏枷氲慕榻B引入面向?qū)ο缶幊绦纬衫^往開來的局面,通過可視化進一步加深面向?qū)ο蟮睦斫馊〉门e一反三的效果,最后在網(wǎng)絡(luò)編程的基礎(chǔ)上強化Java的優(yōu)勢達到寧靜致遠的學(xué)習(xí)境界,基于以上“四線”的教學(xué)途徑,讓學(xué)生更深入高效地學(xué)會Java語言。
二、第一線:溫故知新
學(xué)習(xí)Java面向?qū)ο蟪绦蛟O(shè)計之前,大學(xué)生往往已經(jīng)先修了C語言,甚至有的專業(yè)學(xué)生還學(xué)習(xí)了C++面向?qū)ο蟪绦蛟O(shè)計語言。Java、C、C++作為高級程序設(shè)計語言,其具有高級程序設(shè)計語言的共性,從而可以基于Java語言與C、C++語言在基礎(chǔ)語法上的相似之處,回顧已經(jīng)學(xué)過的高級程序設(shè)計語言使學(xué)生快速學(xué)習(xí)Java這門新語言。Java語言具有高級程序設(shè)計語言的共性,由標(biāo)識符、關(guān)鍵字、分隔符、運算符等組成最基本的元素,任何一個復(fù)雜的Java語句都可以由這些基本元素組成,這些基本元素通過不同的語法含義和組成規(guī)則,可以實現(xiàn)不同功能的Java語句,從而構(gòu)成Java語言的基本語法。Java語言可以認(rèn)為是C語言的后續(xù)衍生語言,在基本語法部分與C語言具有高度的一致性,如Java程序中的空白符、標(biāo)識符、注釋、變量、運算符、關(guān)鍵字、控制語句等都可以看到C語言的身影,授課過程中注意通過具體實例突出強調(diào)兩種語言存在的細(xì)微差別,從而可以基于C語言的基本語法,快速學(xué)習(xí)Java語言的基本語法知識,達到溫故知新的目的。在溫故知新這條學(xué)習(xí)途徑中,讓學(xué)生完成基于輸入的三角形邊長,輸出對應(yīng)三角形周長和面積的實例,從而達到靈活運用學(xué)習(xí)的Java語言基本語法知識完成一定功能的目的,具體代碼如圖1所示。從該實例中,引導(dǎo)學(xué)生思考不同的高級程序設(shè)計語言的異同,讓學(xué)生在學(xué)習(xí)基礎(chǔ)的過程中,發(fā)現(xiàn)雖然幾種高級程序設(shè)計語言表達形式有所不同,但實現(xiàn)思想?yún)s具有高度的一致性,如具有同樣的程序控制結(jié)構(gòu)(順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)),從而加強學(xué)生舉一反三學(xué)習(xí)領(lǐng)悟和實踐能力,更加快速地接受Java這一新的程序設(shè)計語言。
三、第二線:繼往開來
在溫故知新第一條學(xué)習(xí)途徑中,通過與C/C++對比,介紹了Java語言的基本語法、程序的基本結(jié)構(gòu),使學(xué)生在已有程序設(shè)計語言基礎(chǔ)上更加輕松地學(xué)習(xí)Java。但通過一段時間的學(xué)習(xí),學(xué)生一般會面臨著這樣的困惑,兩種語言既然如此相似,為什么還需要發(fā)明Java語言,Java語言為什么會如此大行其道?Java作為完全面向?qū)ο蟪绦蛟O(shè)計語言,與基于面向過程程序設(shè)計語言C在設(shè)計思想和理念方面具有很大不同,但在溫故知新的學(xué)習(xí)途徑中卻仍然使用著面向過程的編程思想,從而本能地以為Java和C語言具有相似的處理方式。面向過程的編程把解決的問題首先按照功能分解為一系列的步驟,然后分別通過函數(shù)實現(xiàn)功能步驟,完成問題的求解。但面向?qū)ο缶幊痰乃枷雲(yún)s是將數(shù)據(jù)放在第一位,對擬解決的問題進行分析,抽象出完成這個事情所需的類與對象,將功能封裝到對象中,在對象中實現(xiàn)具體的細(xì)節(jié),通過對象的組合方式解決問題,從而使得開發(fā)的程序具有易維護、易理解、易擴展等特性。對于面向?qū)ο蠼虒W(xué)本身就有一定的難度,學(xué)生在習(xí)慣了面向過程的C語言編程后,學(xué)習(xí)面向?qū)ο蟮脑O(shè)計方法,需要一個思想過渡的過程。面向?qū)ο缶幊陶Z言中的封裝、繼承、多態(tài)等新概念的理解,還需要學(xué)生結(jié)合日常生活上機多加練習(xí)。教學(xué)上可以采用理論與實際操作相結(jié)合的授課方式,一邊講解理論一邊實踐編寫程序,在編寫程序的過程中對知識點的理論及應(yīng)用融會貫通。例如,在學(xué)習(xí)構(gòu)造方法時,先分析構(gòu)造方法的執(zhí)行順序,再通過編程實踐來舉例講解,說明在類中定義默認(rèn)構(gòu)造方法和有參構(gòu)造方法的適用情況;對于繼承概念學(xué)習(xí)時,可以先講授繼承的重要性以及實現(xiàn)機制,再通過程序?qū)嵗v解在多重繼承時父類和子類之間構(gòu)造方法的調(diào)用規(guī)律;在學(xué)習(xí)多態(tài)時,重點講授動態(tài)多態(tài)性,即通過父類的引用調(diào)用子類成員方法的行為,動態(tài)多態(tài)性在大型程序設(shè)計的擴展性上使用非常便捷,為程序擴展提供了很大便利。例如在已知三角形邊長求周長和面積的實例中,如圖2,通過面向?qū)ο笏枷氲膶崿F(xiàn),可以發(fā)現(xiàn)代碼更易理解和重用,減少了出錯的可能性。因此,在Java面向?qū)ο蠼虒W(xué)過程中注意對封裝、繼承、多態(tài)等面向?qū)ο笾攸c內(nèi)容進行講解和拓展,尤其對面向?qū)ο笤O(shè)計的三大特性在程序設(shè)計中所帶來的優(yōu)勢進行明確闡明,證明Java面向?qū)ο笤O(shè)計語言的魅力是有據(jù)可依的。從而,在原有C/C++的基礎(chǔ),讓學(xué)生領(lǐng)會Java語言自身的優(yōu)勢,對Java逐漸產(chǎn)生興趣,學(xué)會面向?qū)ο缶幊?,形成繼往開來的局面。
四、第三線:舉一反三
在前兩節(jié)的學(xué)習(xí)中,通過Java基礎(chǔ)語法和面向?qū)ο缶幊痰姆绞綆椭鷮W(xué)生打開了Java語言學(xué)習(xí)的大門,雖然可以出色完成需求的功能,然而最終呈現(xiàn)給程序用戶的功能往往并不太直觀,需要一定的Java語言背景。可視化通過用戶界面搭建了另外一種用戶和計算機的渠道,圖形化的用戶界面可以讓用戶在使用計算機上更加方便。因此,如何在學(xué)習(xí)Java面向?qū)ο笏枷氲幕A(chǔ)上進一步深化,進行可視化開發(fā),達到舉一反三的教學(xué)效果是本節(jié)主要討論的內(nèi)容??梢暬膱D形用戶界面是通過圖形方式顯示用戶操作界面,基于圖形用戶界面組件完成用戶和程序之間的交互。Java語言中的圖形用戶界面組件基于面向?qū)ο蟮乃枷肜^承于組件(Component)類,提供公共的屬性和方法,根據(jù)其作用又進一步細(xì)分為基本組件和容器,其中基本組件之上不能容納其他組件,如文本框(Label)、按鈕(Button)、復(fù)選框(CheckBox)等,而容器是一種可以用來容納其他組件的特殊組件,如窗口(Window)、面板(Panel)、對話框(Dialog)等。在圖形用戶界面上,通過上述定義的組件繪制操作界面元素,基于事件驅(qū)動的Java事件監(jiān)聽機制來完成用戶和組件之間的交互。事件監(jiān)聽機制是Java圖形用戶界面的另一個重點,通過某個動作觸發(fā)組件后,Java運行時系統(tǒng)調(diào)用對應(yīng)的處理方法響應(yīng)該操作,從而在事件監(jiān)聽機制中需要明確事件(什么動作)、事件源(動作對象)、事件處理(動作處理)。
基于介紹的Java語言圖形用戶界面,實現(xiàn)同樣的已知三角形邊長求周長和面積實例,如圖3所示,對比前兩節(jié)基于Java語言基礎(chǔ)語法和Java語言面向?qū)ο蟮某绦蛟O(shè)計實現(xiàn)實例,可以發(fā)現(xiàn)基于Java語言圖形用戶界面的實現(xiàn)具有很強的展示性,通過作用在“計算”按鈕上的點擊事件可以激活對應(yīng)的處理方法,得到三角形的周長和面積,并同時在對話框的右側(cè)區(qū)域繪制對應(yīng)三角形的形狀。通過本節(jié)基于Java語言圖形用戶界面的介紹以及簡單實例的應(yīng)用,幫助學(xué)生建立可視化編程的思維,進一步擴展了Java面向?qū)ο缶幊痰乃枷?,達到舉一反三的學(xué)習(xí)實踐效果。
五、第四線:寧靜致遠
前三節(jié)分別從基礎(chǔ)語法、面向?qū)ο笏枷搿⒖梢暬膱D形用戶界面三個方面介紹了Java語言的一些特性,但作為近十年來十分流行的編程語言,Java語言是否有其更為明顯的優(yōu)勢呢?Java語言最初是為嵌入式開發(fā)而產(chǎn)生的,但后來伴隨著因特網(wǎng)的發(fā)展與興起,Java由于自身的可移植性和安全性等機制被推到了計算機程序設(shè)計語言的前沿,人們發(fā)現(xiàn)Java語言的機制十分適合網(wǎng)絡(luò),對網(wǎng)絡(luò)有非常好的支持,從而成為了一種十分重要的網(wǎng)絡(luò)編程語言,在計算機TIOBE排行榜中多次位列第一。因此,本節(jié)主要介紹Java語言網(wǎng)絡(luò)編程的基礎(chǔ)知識,讓學(xué)生強化Java的優(yōu)勢達到寧靜致遠的學(xué)習(xí)境界。
Java語言是第一個可以完全融入網(wǎng)絡(luò)的語言,在編寫網(wǎng)絡(luò)應(yīng)用程序方面主要有以下幾個優(yōu)勢:(1)Java語言與生俱來就是與平臺無關(guān)的,從而可以運行在不同的平臺上并進行網(wǎng)絡(luò)通信;(2)Java語言安全機制非常完善,可以檢查程序的權(quán)限設(shè)置;(3)JDK類庫提供了套接字API、JDBC API和JavaMail API等大量的網(wǎng)絡(luò)類庫,為程序的開發(fā)提供了很大的便利。在網(wǎng)絡(luò)編程的授課過程中,首先簡要介紹計算機網(wǎng)絡(luò)方面的基礎(chǔ)知識,包括用于描述網(wǎng)絡(luò)結(jié)構(gòu)原理和工作原理的網(wǎng)絡(luò)模型、七層OSI參考模型、四層Internet網(wǎng)絡(luò)模型、IP與DNS網(wǎng)絡(luò)層協(xié)議、TCP、UDP傳輸層協(xié)議等,在此基礎(chǔ)上,介紹Java語言中的套接字網(wǎng)絡(luò)編程。套接字(Sockets)是應(yīng)用程序和網(wǎng)絡(luò)協(xié)議的接口,在Java語言中,通過定義若干個類繼承網(wǎng)絡(luò)協(xié)議來實現(xiàn)網(wǎng)絡(luò)通信,定義了Java應(yīng)用程序和網(wǎng)絡(luò)協(xié)議接口,從而形成Java套接字,其中TCP套接字使用TCP協(xié)議實現(xiàn)可靠的網(wǎng)絡(luò)通信,UDP套接字使用UDP協(xié)議實現(xiàn)效率較高的網(wǎng)絡(luò)通信。
Java套接字網(wǎng)絡(luò)編程涉及服務(wù)器端和客戶端,主要流程是首先在服務(wù)器端創(chuàng)建服務(wù)器套接字,并綁定端口號,從而服務(wù)器就可以從這個端口監(jiān)聽連接,當(dāng)客戶端根據(jù)服務(wù)器地址和指定端口號請求與服務(wù)器進行連接的時候,打開連接套接字,當(dāng)服務(wù)器接受連接后就可以通過網(wǎng)絡(luò)流的方式進行操作完成客戶端和服務(wù)器端的通信。在Java網(wǎng)絡(luò)編程中,為了讓服務(wù)器可以同時處理多個客戶端的請求,往往需要使用多線程機制,從而對于每一個客戶端的請求都可以由一個獨立的線程進行處理。Java語言的多線程機制是在一個程序中定義多個線程并讓他們同時運行,同類的多線程在運行時共享內(nèi)存和系統(tǒng)資源,從而可以更好地利用多核CPU資源[7]。
為了實踐Java網(wǎng)絡(luò)編程和多線程機制,模擬服務(wù)器和客戶端的通信,在已知三角形邊長求周長和面積的實例中,由客戶端發(fā)送三角形的邊長,在服務(wù)器端進行周長和面積的計算,并把計算結(jié)果返回到客戶端,實踐中在服務(wù)器端使用多線程機制處理多個客戶端的計算請求,從而可以讓一個服務(wù)器程序能同時服務(wù)于多個客戶。如圖4所示,通過求三角形周長和面積的簡單實例,介紹了Java多線程的網(wǎng)絡(luò)編程方式,以點帶面,更好地幫助學(xué)生了解Java語言的優(yōu)勢,進一步提升學(xué)生對于Java知識的學(xué)習(xí)境界。
六、總結(jié)
目前Java語言在計算機、手機、網(wǎng)絡(luò)、通訊等各個行業(yè)都得到了廣泛應(yīng)用,為了滿足應(yīng)用單位的需求,高校許多專業(yè)都開設(shè)了Java語言程序設(shè)計這門課程,因此,如何讓學(xué)生更容易地學(xué)習(xí)一門新的編程語言和培養(yǎng)學(xué)生的學(xué)習(xí)興趣是老師教學(xué)上的重點。本文發(fā)展了基于“四線”的Java程序設(shè)計教學(xué)方法,從基礎(chǔ)語法、面向?qū)ο?、可視化用戶圖形界面以及網(wǎng)絡(luò)編程四個方面讓學(xué)生基于已有編程基礎(chǔ)一步一個臺階逐漸精通Java語言。在課程本身知識點概念教學(xué)的同時輔助實例實踐,讓學(xué)生將知識與實際應(yīng)用相結(jié)合,培養(yǎng)學(xué)生的實際編程能力和解決程序問題的能力,從而反饋于“四線”教學(xué)方法,讓學(xué)生更深入高效地學(xué)會Java語言。
參考文獻:
[1]吳倩.Java語言程序設(shè)計:面向?qū)ο蟮脑O(shè)計思想與實踐[M].第2版.北京:機械工業(yè)出版社,2016.
[2]劉松青.構(gòu)建“Java面向?qū)ο蟪绦蛟O(shè)計”實踐教學(xué)體系[J].計算機教育,2009,(2):8-10.
[3]楊曉燕.基于應(yīng)用的Java面向?qū)ο蟪绦蛟O(shè)計課程研究與教材建設(shè)[J].計算機教育,2012,(3):42-45.
[4]王征.Java課程教學(xué)過程研究[J].中國電子商務(wù),2013,(17):132-132.
[5]付寧,黃森.Java面向?qū)ο蠼虒W(xué)思想及教學(xué)方法的研究[J].電腦知識與技術(shù),2011,07(4):956-957.
[6]游洋.高職Java課程中模擬工作過程的教學(xué)實踐[J].黑龍江科技信息,2016,(17):154-154.
[7]Sarkar V,Grossman M,Budimli?Z,et al.Preparing an Online Java Parallel Computing Course[C]// Parallel and Distributed Processing Symposium Workshops.IEEE,2017:360-366.