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