• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      結(jié)合MOOC和翻轉(zhuǎn)課堂的JavaSE接口教學(xué)研究

      2018-09-17 07:49:34趙衛(wèi)東鄭永果仇麗青
      計算機(jī)教育 2018年9期
      關(guān)鍵詞:面向?qū)ο?/a>實例排序

      張 峰,趙衛(wèi)東,鄭永果,仇麗青

      (山東科技大學(xué) 計算機(jī)科學(xué)與工程學(xué)院,山東 青島 266590)

      0 引言

      Java具有跨平臺、安全性高、健壯性等特點(diǎn)[1],已經(jīng)在企業(yè)級應(yīng)用、桌面應(yīng)用、移動應(yīng)用等多個領(lǐng)域得到廣泛應(yīng)用,成為當(dāng)今軟件開發(fā)領(lǐng)域最流行的編程語言之一。JavaSE是整個Java技術(shù)體系的基礎(chǔ),而Java作為一種面向?qū)ο蟮木幊陶Z言,接口又是JavaSE中面向?qū)ο缶幊讨械闹攸c(diǎn)[2]。理解接口的含義,熟練使用接口編程,對于學(xué)生后續(xù)學(xué)習(xí)面向?qū)ο蟮姆治觥⒃O(shè)計及開發(fā)至關(guān)重要。

      1 接口教學(xué)現(xiàn)狀分析

      在JavaSE面向?qū)ο蟛糠值慕虒W(xué)中,一般在類、對象、繼承等基本概念之后講授接口。由于接口的定義和使用與類、抽象類類似,在教學(xué)中發(fā)現(xiàn),學(xué)生往往在編程過程中不能靈活使用接口,在做具有較強(qiáng)應(yīng)用性質(zhì)的編程題目時,更習(xí)慣使用類或者抽象類,這說明,初學(xué)Java的大部分學(xué)生還沒有真正理解接口的含義和編程方法。

      為解決接口教學(xué)中存在的問題,文獻(xiàn)[2]站在軟件工程的立場,結(jié)合面向?qū)ο蟮脑O(shè)計原則和設(shè)計模式的部分內(nèi)容,對教學(xué)內(nèi)容進(jìn)行了拓展。筆者曾借鑒文獻(xiàn)[2]的方法組織教學(xué)內(nèi)容,但在實際教學(xué)中同樣遇到一些問題:①由于JavaSE課程內(nèi)容面向初學(xué)者,學(xué)生對面向?qū)ο蟮睦斫膺€不夠深入,而面向?qū)ο蟮脑O(shè)計原則和設(shè)計模式等內(nèi)容對面向?qū)ο蟮囊蟾?。對于大多?shù)JavaSE初學(xué)者來說,此時引入面向?qū)ο蟮脑O(shè)計原則及設(shè)計模式的內(nèi)容并不一定適合于大多數(shù)學(xué)生;②從課時安排來看,接口部分通常限制到2~3個學(xué)時,而引入面向?qū)ο蟮脑O(shè)計原則、設(shè)計模式等內(nèi)容會延長授課學(xué)時;③教學(xué)中采用的實例相對抽象,不是生活或工程應(yīng)用中的典型實例,在調(diào)動學(xué)生的學(xué)習(xí)興趣和積極性方面還存在不足;④沒有采用當(dāng)前流行的MOOC、翻轉(zhuǎn)課堂等教學(xué)技術(shù)與方法[3],教學(xué)過程中與學(xué)生的互動不足,學(xué)生的學(xué)習(xí)積極性和學(xué)習(xí)效果還需進(jìn)一步提高。

      2 接口教學(xué)內(nèi)容和方法

      整個教學(xué)過程通常用2個學(xué)時,教學(xué)步驟、內(nèi)容以及采用的教學(xué)方法如圖1所示。

      2.1 接口的含義

      接口教學(xué)中,首先要讓學(xué)生理解Java接口的含義,重點(diǎn)理解“接口即規(guī)范”。首先介紹“寬定義”和“窄定義”的接口,讓學(xué)生知道之前學(xué)過的諸如C、C++里面提到的函數(shù)、方法是“寬定義”的接口,即通常所說的“API”中的“I”所表示的Interface。然后講解Java接口是Java語言提供的一種“窄定義”的接口,是Java中定義的一種特殊類型,表示的是一種規(guī)范。

      圖1 接口教學(xué)內(nèi)容與方法

      為了讓學(xué)生理解“接口即規(guī)范”,在文獻(xiàn)[4]的PCI接口實例的基礎(chǔ)上,通過學(xué)生生活中更加熟悉的USB接口來講解,主要內(nèi)容包括:①USB是一種規(guī)范和標(biāo)準(zhǔn),主板廠商為了支持USB設(shè)備,需要提供符合USB標(biāo)準(zhǔn)的插口;USB設(shè)備生產(chǎn)廠商(如U盤制造商),為了能夠用于主板的USB插口,必須按照USB規(guī)范來生成產(chǎn)品;②介紹主板與USB設(shè)備之間基于USB規(guī)范的耦合,引出組件之間基于規(guī)范耦合的知識點(diǎn),為后面介紹基于接口的編程做好鋪墊。

      在教學(xué)方法方面,我們通過一個MOOC短視頻提前發(fā)布給學(xué)生,學(xué)生課下自學(xué),作為上課時翻轉(zhuǎn)課堂的基礎(chǔ)。

      2.2 Java接口基礎(chǔ)知識

      我們首先講解接口的定義、類實現(xiàn)接口等基礎(chǔ)知識。為了便于學(xué)生理解,從“能力”的角度講解類對接口的實現(xiàn):一個類實現(xiàn)了一個接口,則需要實現(xiàn)該接口中定義的所有方法,也就說明該類滿足了所實現(xiàn)的接口要求的“能力”。這種“能力”是通過實現(xiàn)接口中的方法來體現(xiàn)的。在此基礎(chǔ)上,介紹Java中不支持多繼承、類可以實現(xiàn)多個接口、接口與抽象類的比較等其他知識點(diǎn)。

      從教學(xué)過程來看,接口部分的基礎(chǔ)知識并不難,關(guān)鍵是讓學(xué)生真正理解接口的作用。為此,后續(xù)教學(xué)內(nèi)容的重點(diǎn)是通過實例來講解接口的應(yīng)用,這些實例應(yīng)該是學(xué)生熟悉或者工程實踐中常用的,才能加深學(xué)生的理解。為此,我們在教學(xué)中用Java代碼模擬2.1中USB接口的實例,讓學(xué)生加深對“接口即規(guī)范”“面向接口編程”的理解。圖2給出了實例Java代碼對應(yīng)的UML類圖,以及兩個設(shè)計存在問題的UML類圖。

      首先,通過代碼模擬相關(guān)的接口和類,如圖2(a)所示。具體講解的內(nèi)容包括:接口USB定義了USB規(guī)范,該規(guī)范定義了方法start和stop;提供USB接口的設(shè)備,包括無線網(wǎng)卡類WirelessNetCard和U盤類FlashDisk,都實現(xiàn)了USB接口,它們的對象都具備USB接口規(guī)范所規(guī)定的“能力”,即都具有start和stop方法。

      其次,講解面向接口的編程,包括主板類MainBoard的成員slot,表示該主板所支持的插槽,其類型USB指明了該插槽所支持的規(guī)范。也就是說,MainBoard類提供的插槽slot支持USB設(shè)備。MainBoard類提供了setUSB方法,可以傳入任何支持USB的設(shè)備對象,即可以傳入任何實現(xiàn)了USB接口的類的對象。例如,可以傳入無線網(wǎng)卡類WirelessNetCard對象或U盤類FlashDisk對象。通過圖2(a)的例子,可以形象地說明面向接口編程的優(yōu)點(diǎn): MainBoard類的成員slot是USB類型的,從而通過slot可以引用任何實現(xiàn)了USB接口的類的對象。從現(xiàn)實來說,可以理解為主板提供了一個支持USB規(guī)范的插槽,任何符合USB規(guī)范的設(shè)備都可以插在該主板的插槽上。在該實例中,類MainBoard與USB接口之間存在依賴關(guān)系,但MainBoard只依賴于USB接口,而不依賴于任何具體類,從而實現(xiàn)了松耦合。

      圖2 USB實例的類圖

      最后,介紹設(shè)計存在問題的情況,給出圖2中(b)和(c)兩個反例。在圖2(b)中,MainBoard類依賴于WirelessNetCard類,導(dǎo)致該主板類MainBoard提供的插槽只能接入無線網(wǎng)卡設(shè)備;同理,圖2(c)中的MainBoard類依賴于FlashDisk類,導(dǎo)致該主板類MainBoard提供的插槽只能接入U盤。在圖2(b)(c)中,兩個MainBoard依賴于具體實現(xiàn)類,導(dǎo)致了它們與具體類之間的緊耦合。通過將圖2中(a)與(b)(c)兩個反例進(jìn)行對比,讓學(xué)生理解面向接口編程的優(yōu)點(diǎn),也加深對接口的理解。

      在本部分內(nèi)容的教學(xué)方法方面,基礎(chǔ)知識部分內(nèi)容相對簡單,通過MOOC視頻讓學(xué)生課下自學(xué),同時留下思考題,讓學(xué)生看完視頻后,自己思考USB實例該如何設(shè)計。上課時讓學(xué)生講解自己的設(shè)計,一起討論,最后由老師點(diǎn)評設(shè)計的優(yōu)劣。從實際的教學(xué)來看,部分學(xué)生的設(shè)計結(jié)果中出現(xiàn)了圖2中(b)(c)兩種設(shè)計方式。

      2.3 接口應(yīng)用實例

      2.2中模擬USB實例的Java代碼沒有實際的運(yùn)行效果。為了進(jìn)一步加深學(xué)生對接口功能的理解,我們通過一個實際開發(fā)中的常用功能來進(jìn)一步講解。該實例使用了JDK集合框架中Arrays類的靜態(tài)方法sort。具體的教學(xué)過程和教學(xué)方法如下。

      第一,通過使用Arrays.sort(Object[]a)方法對String數(shù)組排序的一段代碼,演示該方法的排序功能,并通過API文檔的查看,說明該方法可以實現(xiàn)任意類型對象數(shù)組的排序。然后,采用啟發(fā)式教學(xué)方法,引導(dǎo)學(xué)生思考一個問題:如何實現(xiàn)sort(Object[]a)的功能?進(jìn)一步引導(dǎo)學(xué)生思考:如果要實現(xiàn)該方法,是否需要知道什么前提?在教學(xué)過程中,學(xué)生一般會考慮到需要知道這些待排序?qū)ο蟮呐判蛞罁?jù)。進(jìn)一步講解,方法形參是Object[],可以對任何對象數(shù)組排序,因此,要求這些待排序?qū)ο竽軌蜻M(jìn)行比較,即滿足“可比較”這一規(guī)范,從而引出需要待排序?qū)ο笏鶎兕悓崿F(xiàn)一個描述“可比較”這一規(guī)范的接口,最終給出需要實現(xiàn)的Comparable接口。在此基礎(chǔ)上,查看Comparable接口的API文檔、String類的implements Comparable聲明,以及String類對Comparable接口中的compareTo方法的實現(xiàn)。

      第二,引導(dǎo)學(xué)生思考Arrays.sort(Object[]a)實現(xiàn)排序的方法。講解內(nèi)容包括:排序中的兩個基本操作是比較和交換, sort方法實現(xiàn)的關(guān)鍵是如何比較兩個對象。即如何比較a[i]和a[i+1]?教學(xué)中讓學(xué)生先思考,然后找學(xué)生到教師機(jī)上編寫代碼,共同討論,教師點(diǎn)評給出正確答案;最后,通過查看sort方法的源碼來驗證。該教學(xué)過程進(jìn)一步加深了學(xué)生對接口功能的理解,同時也加深了對Java中多態(tài)的理解。

      第三,針對前面課程中的Java類實例,如描述學(xué)生的Student類,讓學(xué)生自己完善Student編碼,使得Student數(shù)組可以使用Arrays.sort(Object[]a)排序。同時,要求提供多種排序方法,如根據(jù)學(xué)號、成績、姓名進(jìn)行排序,還可以升序、降序排列。通過練習(xí),讓學(xué)生熟悉使用Arrays.sort方法排序這一實用功能,加深對接口的理解。

      最后,留給學(xué)生幾個稍有深度的問題課下思考,再次上課時通過討論、提問的方式講解。相關(guān)問題包括:①Arrays.sort(Object[]a)方法需要排序的類實現(xiàn)Comparable接口,但通過實現(xiàn)該接口中的compareTo方法只能實現(xiàn)一種排序方式。如果排序需求發(fā)生了改變,或者不同情況下需要不同的排序功能,該如何實現(xiàn)?通過該問題的思考,學(xué)生能發(fā)現(xiàn)僅僅使用Comparable接口所存在的問題,從而引出讓學(xué)生自學(xué)的Comparator接口,進(jìn)一步加深對接口的理解和熟練程度。②Arrays.sort(Object[]a)方法為何要求排序的對象所屬類實現(xiàn)Comparable接口,而不是繼承一個抽象類或一個普通類?通過該問題的思考,學(xué)生會加深Java中不支持多繼承以及一個類可以實現(xiàn)多個接口的理解。③Arrays.sort(Object[]a)方法內(nèi)部使用待排序?qū)ο蟮腸ompareTo方法實現(xiàn)對象之間的比較,那么,待排序?qū)ο笏鶎兕愂欠窨梢詢H添加compareTo方法而不聲明實現(xiàn)Comparable接口?通過該問題的思考,結(jié)合sort方法的源碼,學(xué)生可以加深對接口以及多態(tài)的理解。

      在教學(xué)方法方面,我們關(guān)于本小節(jié)的全部授課內(nèi)容通過4個MOOC視頻提供:①Arrays.sort方法基本功能介紹;②Comparable接口簡介;③sort方法實現(xiàn)原理與源碼分析;④Student排序?qū)崿F(xiàn)。第一個視頻在課前發(fā)布給學(xué)生,作為基礎(chǔ)知識讓學(xué)生學(xué)習(xí),而后3個視頻則在翻轉(zhuǎn)課堂后提供給學(xué)生復(fù)習(xí)。這樣做是為了讓學(xué)生在課堂上積極思考,通過啟發(fā)式教學(xué),讓學(xué)生思考、討論sort方法能夠排序的前提、sort方法的源碼實現(xiàn)、Student排序這3個關(guān)鍵問題,提高他們的聽課效率,而課后通過MOOC視頻的觀看加以鞏固。最后,學(xué)生可以課下自學(xué)Comparator接口,并思考上述幾個有一定深度的問題。

      2.4 后續(xù)授課內(nèi)容對接口的鞏固

      完成上述3小節(jié)的內(nèi)容后,JavaSE面向?qū)ο蠡A(chǔ)部分的接口教學(xué)就完成了。后續(xù)授課內(nèi)容中很多章節(jié)會用到接口,通過繼續(xù)強(qiáng)化接口的應(yīng)用,進(jìn)一步鞏固接口部分的基礎(chǔ)知識。例如,JDK集合部分提供了List、Set、Map、Iterator等接口,該部分在編碼時經(jīng)常用到面向接口的編程;JDBC中提供了一組接口,而相應(yīng)數(shù)據(jù)庫廠商提供的數(shù)據(jù)庫驅(qū)動中包含了這些接口的實現(xiàn)類。同樣,Servlet中提供了若干接口,這些接口的實現(xiàn)類則由各種Java Web應(yīng)用服務(wù)器來提供。學(xué)生通過在這些后續(xù)內(nèi)容中回顧涉及的接口的基礎(chǔ)知識,更進(jìn)一步加深對接口、接口即規(guī)范的理解,從而熟練使用接口進(jìn)行開發(fā)。

      3 教學(xué)效果

      上述教學(xué)過程和教學(xué)方法結(jié)合MOOC視頻和翻轉(zhuǎn)課堂,明顯改善了接口部分的教學(xué)效果。一方面,從學(xué)生學(xué)習(xí)過程的表現(xiàn)來看,學(xué)生在課下學(xué)習(xí)視頻后,翻轉(zhuǎn)課堂時學(xué)生已基本掌握了接口的主要知識點(diǎn)。在翻轉(zhuǎn)課堂上,通過啟發(fā)式教學(xué)方法的運(yùn)用,討論、點(diǎn)評USB和Arrays.sort兩個典型實例,學(xué)生在課堂上參與討論和點(diǎn)評的積極性有了很大提高。另一方面,從學(xué)生的作業(yè)、實驗和考試情況來看,絕大多數(shù)學(xué)生理解了接口的含義,設(shè)計和編碼中能夠熟練使用接口,后續(xù)課程在講解集合類、JDBC、Servlet等章節(jié)時,大多數(shù)學(xué)生能夠理解其中涉及的接口方面的知識。

      總體來看,上述JavaSE接口教學(xué)的授課內(nèi)容涵蓋了主要知識點(diǎn),未涉及較有深度的其他課程內(nèi)容。結(jié)合MOOC視頻、課上翻轉(zhuǎn)加講授,一般可以在2個學(xué)時內(nèi)完成。該教學(xué)過程已經(jīng)在實際教學(xué)中實施,較好地提高了接口部分的實際教學(xué)效果。

      4 結(jié)語

      接口是Java面向?qū)ο蟪绦蛟O(shè)計中最基本、最重要的內(nèi)容之一,也是整個Java技術(shù)體系和后續(xù)軟件工程相關(guān)課程的基礎(chǔ)。通過引入生活中和工程實際中的典型實例,結(jié)合MOOC視頻以及翻轉(zhuǎn)課堂上的討論和點(diǎn)評,學(xué)生的學(xué)習(xí)積極性和學(xué)習(xí)效果有了明顯提升。當(dāng)前,隨著MOOC和翻轉(zhuǎn)課堂的逐漸普及,如何更好地結(jié)合MOOC、翻轉(zhuǎn)課堂等現(xiàn)代教育理念和技術(shù),提煉更多來源于生活和工程實際應(yīng)用的教學(xué)實例,推廣到程序設(shè)計和軟件工程類相關(guān)課程的教學(xué),是需要進(jìn)一步思考和探索的問題。

      猜你喜歡
      面向?qū)ο?/a>實例排序
      排序不等式
      恐怖排序
      節(jié)日排序
      面向?qū)ο蟮挠嬎銠C(jī)網(wǎng)絡(luò)設(shè)計軟件系統(tǒng)的開發(fā)
      電子測試(2018年15期)2018-09-26 06:01:34
      刻舟求劍
      兒童繪本(2018年5期)2018-04-12 16:45:32
      面向?qū)ο蟮臄?shù)據(jù)交換協(xié)議研究與應(yīng)用
      面向?qū)ο骔eb開發(fā)編程語言的的評估方法
      完形填空Ⅱ
      完形填空Ⅰ
      面向?qū)ο笮畔⑻崛≈杏跋穹指顓?shù)的選擇
      河南科技(2014年10期)2014-02-27 14:09:03
      开原市| 洪泽县| 沂水县| 凤翔县| 稻城县| 永平县| 临沧市| 昆明市| 昌吉市| 南投市| 高碑店市| 陵川县| 奉节县| 调兵山市| 禄丰县| 大方县| 惠州市| 公安县| 桑植县| 井冈山市| 云霄县| 呼和浩特市| 休宁县| 迁西县| 陕西省| 潢川县| 克什克腾旗| 犍为县| 株洲市| 任丘市| 乐平市| 万全县| 四川省| 嘉善县| 旬阳县| 潼关县| 句容市| 高台县| 靖江市| 柳河县| 长治县|