亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java程序設計的教學實踐與思考

        2008-12-31 00:00:00翁文勇
        計算機教育 2008年24期

        摘要:Java語言已經成為計算機專業(yè)學生所必須掌握的程序設計語言。本文根據作者近年來講授Java程序設計的教學實踐經驗,介紹如何合理組織教學內容及進度安排,引導學生完成從面向過程到面向對象程序設計的重大轉變。

        關鍵詞:Java語言;面向對象程序設計;教學難點

        中圖分類號:G642 文獻標識碼:B

        1引言

        由于Java語言本身所具備的跨平臺、多線程、垃圾收集等優(yōu)點,以及基于J2EE的企業(yè)級應用的大規(guī)模開發(fā),Java語言已成為主流的計算機程序設計語言之一[1-3]。目前,基于Java語言的網絡資源急劇增加,大量的開源軟件通過Java語言開發(fā),因此,掌握Java語言已經成為計算機專業(yè)學生的必然要求。

        計算機專業(yè)開設Java程序設計課程基本上分為兩種情況:(1)將Java語言作為學生學習的第一種程序設計語言;(2)將Java語言作為C語言等程序設計語言之后的后續(xù)語言。我們學校計算機專業(yè)本科生首先在一年級學習C程序設計以及數據結構,然后在二年級學習Java程序設計。因此,我們的教學實踐活動主要針對第二種情況。本文根據作者近五年的Java程序設計教學實踐所積累的經驗,闡述如何引導學生完成從面向過程到面向對象程序設計的重大轉變。

        2學生技能背景與授課重點難點

        由于經過一年多的C語言編程訓練,這些學生已經具備一定的面向過程的程序設計能力。由于Java語言在基本語法上與C語言非常類似。因此,講授Java程序設計的側重點不在于基本語法,而是在于面向對象程序設計能力的培養(yǎng)上。

        對于具有一定C程序設計能力的學生,雖然已經掌握了一定的編程方法,但是學習Java程序設計仍然需要克服許多困難。由于以前的程序設計一般側重于通過C語言設計一個算法,并以此來解決某個簡單的問題。由于這些問題規(guī)模很小,程序一般僅需要1個或者少數幾個函數,因此他們往往將計算機程序設計理解為編寫幾個函數,并不能深刻理解程序設計方法中的許多思想(比如模塊化、代碼重用等)。

        由于在講授Java語言時,采用的例子程序往往也非常簡單,一般采用面向過程的C程序也可以解決,因此,他們往往質疑Java程序設計是將簡單問題復雜化。由于在教學時一般不能過多采用復雜的案例,因此必須在教學過程中充分說明每個例子所體現的程序設計思想,而不是僅僅通過算法解決某個簡單問題。

        我們認為,講授Java程序設計的重點與難點都在于如何將學生的程序設計思維從面向過程轉變?yōu)槊嫦驅ο?。通過合理組織Java程序設計教學內容,將學生從面向過程的編程思維逐步轉變?yōu)槊嫦驅ο缶幊趟季S,并理解和掌握面向對象編程的繼承、多態(tài)、封裝等技術特點;在教學進度安排上,將從學生最熟悉的C程序面向過程編程方式開始,逐步引導過渡到Java面向對象程序設計,按照先后次序包括Java程序設計入門、類的設計、繼承與多態(tài)等步驟。

        3Java程序設計入門

        對于具備C語言程序設計經驗的學生而言,Java程序設計入門并不困難。由于Java語言的基本語法與C語言非常相似,因此這一部分教學內容的側重于說明Java語言基本語法、數據類型、程序結構等方面與C語言的不同之處。這部分內容的教學目標包括:(1)使學生能夠編寫簡單的Java程序;(2)使學生能夠使用Java類庫中的類進行編程,掌握如何創(chuàng)建類的對象,如何使用類中的方法,以及如何導入包中的類等。

        事實上,許多人在講授Java程序設計入門時,往往強調上述教學目標的第一點,即讓學生了解Java程序結構特點,能夠編寫簡單的Java程序即可,然后直接介紹Java類的設計。然而根據我們近五年的Java程序設計教學經驗,上述教學組織方式知識跨度較大,不適合于基礎較差的學生。相反,讓學生多使用Java類庫中的類進行編程,能夠在一定程度上了解Java類的特點以及常用術語,從而為Java類的設計提供良好基礎,避免學生在開始階段就過多糾纏于類設計的細節(jié)。學生在使用Java類進行編程時,還未涉及面向對象的程序設計思想,他們可以使用熟悉的面向過程程序設計思想進行編程。只不過在C語言中他們需要寫多個函數,而在Java語言中需要將這些函數(即Java語言的方法)放入到某個類中。

        這部分教學的主要內容如下:

        (1)Java應用程序結構

        大部分教材都通過一個類似于輸出“HelloWorld”的例子,說明如何編寫一個可以獨立運行的類。教學經驗告訴我們,這種方式效果很好。通過比較Java應用程序結構與C語言主函數的異同之處,學生能夠理解Java類的靜態(tài)主方法,很快就可以學會編寫一個簡單的Java程序。

        (2) 基本語法與數據類型

        由于Java語言的基本語法與數據類型與C語言非常類似,所以教學的重點是突出兩個語言的數據類型的不同之處,包括以下幾點:

        #61548;boolean類型:Java語言提供8種基本數據類型,其中boolean類型是Java所特有的數據類型,它擁有兩種取值true或1。在C語言中,往往通過0或者1來表示true還是1,但是對于Java語言將不再允許通過數字來表示true或者1。比如,在C語言中,可以使用if(1){},而在Java語言中,必須使用if(true){}

        #61548;char類型:Java語言的char類型不同于C語言中的char類型。由于Java語言使用Unicode編碼,所以char類型是兩個字節(jié)長度。而對于標準C語言,char是1個字節(jié)長度。

        #61548;數組類型: Java中的數組是對象類型,必須先創(chuàng)建對象才能使用。聲明一個長度為10的int類型數組,對于C語言用int a[10],而在Java中必須用int[] a = new int[10]。

        教學經驗表明,上述三種數據類型是具備C語言編程經驗的Java初學者最容易犯錯誤的地方,尤其是boolean與數組類型。由于Java語言與C語言的語法與數據類型過于相似,兩者容易混淆,必須通過大量的例子和訓練強化它們的不同之處。

        (3) 使用Java類庫編程

        學生掌握了Java語言基本語法之后,可以開始講授Java基礎類庫所提供的類。這樣做主要達到如下目的:一方面,讓學生了解Java基礎類庫所提供的強大功能;另一方面,在講解這些常用類時,逐步介紹Java類所涉及的一些概念(比如構造方法,成員方法,成員變量、方法重載等),以及如何使用它們(比如導入包),從而為Java類的設計提供良好的鋪墊。

        由于Java基礎類庫中的類很多,必須挑選一些簡單的、最好是熟悉或者感興趣的類。比如以下幾個類:

        #61548;Math類:學生在學習C語言時都接觸過數學函數,所以非常容易理解Math這個類。由于Math這個類使用了大量的靜態(tài)成員以及靜態(tài)方法重載,因此在講授這個類時,重點說明如何使用靜態(tài)方法與靜態(tài)常量,并了解Java靜態(tài)方法的重載特點。

        #61548;String類:學生在編程過程中經常用到字符串,因此有必要介紹String類的使用。通過這個類讓學生了解如何創(chuàng)建對象,如何使用對象的實例方法,并了解構造方法以及實例方法的重載(因為String類中存在構造方法及實例方法的重載現象)。

        4類的設計

        通過前面內容的教學,學生初步掌握了如何使用Java類,并了解了類的一些基本概念。這時就可以開始講解如何設計一個類,包括成員變量、構造方法以及成員方法的設計。這部分內容的教學過程中需要逐步傳授面向對象的一些概念與思想。

        由于C語言的結構體與Java的類有點相似,因此,從一個普通的類似于結構體的Java類開始,逐步添加構造方法,實例方法,并說明它們的作用,然后再如何使用訪問控制符來對類成員進行封裝,以及如何通過包來組織類。在教學過程中,不僅僅說明編寫一個類所涉及的知識點,而且還說明這些內容的用途和意義所在。

        這部分教學的主要內容如下:

        (1) 從C結構到Java類

        對于C程序員,他們對Java類的最初認識,往往是覺得類是一個添加了方法的C結構。這種認識雖然不太準確,但是卻是可以理解(至少形式上存在某種相似性)??梢酝ㄟ^一個矩形類來說明類似于C結構的Java類,其中l(wèi)ength,width分別是矩形對象的長與寬, id代表矩形對象的編號(從0開始編號),而靜態(tài)變量nextId用于指明下一個矩形對象的編號(即每創(chuàng)建一個對象后nextId自增1)。

        通過這個簡單的類,可以介紹類成員變量(包括實例變量與類變量)的特點,以及如何使用它們(由于前面講解Java程序設計入門時,學生已經了解如何使用它們,所以容易接受這一部分內容的知識點)。

        (2) 設計構造方法

        Java類的構造方法的作用是創(chuàng)建對象,并對其進行初始化。然而,許多學生一開始并不理解構造方法,認為即使沒有構造方法,也可以對對象進行初始化。比如,可以通過Rectangle a = new Rectangle()創(chuàng)建對象,然后通過a.length = 10.0; a.width = 5.0; a.id = 0; a.nextId ++; 等語句對對象進行初始化。因此,需要通過一些簡單的例子向學生說明構造方法的用途。比如,如果不定義Rectangle類的構造方法,那么若干創(chuàng)建許多個Rectangle對象,需要類似于前面的大量的初始化代碼(每個對象需要4個語句初始化),并且需要保證初始化語句邏輯的正確性。相反,如果提供構造方法,并將對象的初始化代碼移入到構造方法,那么每個對象創(chuàng)建僅需要調用構造方法,從而避免了功能相似代碼的重復,并且在使用Rectangle類時,不需要考慮初始化代碼間的邏輯關系(在構造方法中考慮這些邏輯關系)。教學經驗表明,學生能夠理解構造方法的作用,并主動去寫構造方法。

        (3) 設計成員方法

        學生開始階段很難主動地編寫類的成員方法。許多學生仍然把java的類當作C語言的結構體來用。比如,對于某個矩形對象a,那么a的面積可以通過a.length*a.width獲得,a的周長可以通過(a.length+a.width)*2來計算。這時需要向學生說明實例方法的好處:(1)將這些針對對象的具體功能代碼移入實例方法,可以減少代碼重復;(2)封裝具體功能的實現算法。比如,在Rectangle類中提供area()方法,那么每次調用這個方法就可以得到具體的矩形面積,并且不需要知道是如何計算出面積。更進一步,可以舉出一個較為復雜的多邊形類,那時計算面積就復雜多了,這時提供實例方法就顯得非常有意義了。當然,在這一部分教學內容中,還需要強調實例方法與類方法的區(qū)別,同時說明如何設計重載的成員方法。教學經驗表明,學生理解了成員方法的用途之后,會主動將經常用到的功能代碼移入成員方法之中。

        (4) 訪問控制與封裝

        不同于C語言結構體,Java類中的成員可以被訪問控制符所修飾,從而對類成員進行封裝。訪問控制符包括public,private,protect等。對于初學者而言,非常不理解為何通過訪問控制進行封裝。他們往往喜歡用public訪問控制(而不喜歡使用private訪問控制),因為這樣使用方式類似于C語言。這時,向學生說明訪問控制與封裝的作用就顯得非常重要。就以前面的Rectangle類為例,如果它的成員變量length,width的訪問控制為public,那么這些變量的值就可以任意修改,比如修改為負數,導致出錯,因此,可以將這些變量的訪問類型設置為private以防止非法修改,同時提供非private類型的實例方法以保證對這些private類型的成員變量的間接訪問。

        學生理解了private訪問控制后,講解其他幾種訪問控制類型就容易多了。然后,再說明可以將類設置為public或者非public,前者將對其他包中的類開放訪問權限,而后者僅僅對同一個包中的類開放訪問權限。

        5繼承與多態(tài)

        這部分教學內容主要講解子類與接口設計,以及它們所帶來的繼承與多態(tài)的特性。學生掌握如何設計一個簡單的類之后,就可以開始講授子類與接口的設計。子類設計與前面一部分內容可以很好地銜接,因為設計一個類時經常可以在一個類的基礎上擴展,而不需要從零開始。在講授子類設計的技術細節(jié)之后,需要講解如何設計類的繼承體系結構,以及接口的作用與意義。

        這部分教學的主要內容如下:

        (1) 子類設計

        講解子類設計的重點是繼承。子類通過繼承超類的成員,能夠很大程度上增加代碼的重用。這個意義必須要向學生說明。子類設計的授課重點包括:

        #61548;子類構造方法設計

        子類構造方法必須隱含或者顯式調用超類的構造方法,而且這種調用過程構成一條構造方法調用鏈。雖然這僅僅是Java語言的一個規(guī)定,然而必須要向學生說明這個規(guī)定內在的含義。由于構造方法的主要作用是對象初始化,那么規(guī)定超類構造方法必須先被調用的主要目的就是保證繼承而來的成員能夠在使用之前被正確初始化。

        #61548;成員覆蓋與對象上轉型

        在設計子類時,可以重新定義超類繼承下來的成員變量或方法,從而出現覆蓋(overriding)或隱藏(hiding)兩種情況。據我們幾年來的教學經驗,這部分內容學生比較難以掌握。事實上,重定義超類的實例方法將出現覆蓋現象,而該現象的特點類似于替換。除了實例方法之外,重定義超類其它類型成員所導致的現象是隱藏。雖然學生可以較好地掌握覆蓋或者隱藏的語言特性,但是他們在開始階段往往無法掌握如何使用覆蓋或隱藏。這時需要通過對象的上轉型來加以說明。對象的上轉型現象說明實例方法的調用是與對象相關,而與對象的引用類型無關,而其它類型的成員則是與引用類型直接相關。對象的上轉型現象表明當一個類的實例方法在子類中重新定義之后,而所有對該方法的默認調用是子類所定義的版本,這使得編寫程序時即可以修改某一實例方法的功能,同時又不影響其它調用約定。教學過程中,需要通過較多的例子反復強調這些特點。這也是學生所必須掌握的Java程序設計不同于C程序設計的關鍵點之一。

        (2) 類的繼承體系結構設計

        學生掌握子類設計技術之后,教學的重點轉向類的繼承體系結構設計,這是面向對象程序設計的核心部分。授課內容包括抽象類與接口設計,而授課重點在于強調面向對象的程序設計思想。對于抽象類與接口的語言語法特點,可以安排少量課時。重點是通過設計實例來說明如何設計使用接口、抽象類,以及如何組織定義整個繼承框架結構。我們講解的實例是Java語言所內置的集合框架。通過這個實例說明面向對象程序設計中的關鍵思想與技術,包括接口回調、對象上轉型以及代碼重構等設計思想[4-5]。

        6結束語

        本文討論了作者講授Java程序設計的一些體會。我們所針對的教學對象是具有C程序設計技能背景的學生,所以教學重點是傳授面向對象程序設計的技術、思想與方法,而面臨的最大問題是如何將學生的程序設計思維從面向過程向面向對象轉變,這需要一個循序漸進的逐步轉變的過程。另外,我們認為應該將Java等面向對象程序設計語言作為計算機專業(yè)學生學習的第一門程序設計語言,而不是后續(xù)語言。因為先學習C語言等面向過程的語言,會增加程序設計思維轉換的難度。當然,這將涉及到整個課程體系結構的調整,需要慎重考慮。

        參考文獻

        [1] Bloch Joshua. Effective Java [M]. Addison-Wesley, 2001.

        [2] Sharon Zakhour, Scott Hommel, Jacob Royal, Isaac Rabinovitch, Tom Risser, Mark Hoeber. The Java Tutorial: A Short Course on the Basics (4th Edition)[M], Prentice Hall PTR, 2006.

        [3] Bruce Eckel. Thinking in Java (4th Edition) [M]. Prentice Hall PTR, 2006.

        [4] Martin Fowler. Refactoring: Improving the Desigh of Existing Code.[M]. Addison-Wesley, 2000.

        [5] Joshua Kerievsky. Refactoring to Pattern [M]. Addison-Wesley, 2005.

        免费国产黄线在线播放| 精品久久人妻av中文字幕| 男人添女人下部高潮全视频| 另类欧美亚洲| 国产日韩精品视频一区二区三区| 国内揄拍国内精品人妻久久| 精品丰满人妻无套内射 | 另类欧美亚洲| 日韩女同一区在线观看| 91九色成人蝌蚪首页| 日本午夜精品理论片a级app发布 | 91精品国产高清久久久久| 草青青在线视频免费观看| 97人伦影院a级毛片| 国产zzjjzzjj视频全免费| 日韩美无码一区二区三区| 亚洲一区二区自偷自拍另类| 亚洲人成网线在线播放va蜜芽| 亚洲日韩国产精品第一页一区 | 麻豆夫妻在线视频观看| 亚洲欧美中文日韩在线v日本| 亚洲国产美女精品久久久| 中文字幕久久久久久久系列| 在线看亚洲一区二区三区| 国产精久久一区二区三区| 精品性影院一区二区三区内射 | 日本一区二区三区女优在线| 国产亚洲精品久久久闺蜜| 亚洲中久无码永久在线观看软件| 中文字幕一二区中文字幕| 国产一区二区三区内射| a级毛片成人网站免费看| 中文人妻AV高清一区二区| 黄色潮片三级三级三级免费| 日本大骚b视频在线| 91免费永久国产在线观看| 国产三级三级精品久久| 午夜精品久久久久久久久| 藏春阁福利视频| 日韩精品视频在线一二三| av熟妇一区二区三区|