曹文平 寧彬
[摘 要] Java程序設(shè)計課程是計算機專業(yè)的重要課程,不僅要學習Java的相關(guān)編程知識,更承擔了讓學生從面向過程到面向?qū)ο缶幊趟枷朕D(zhuǎn)變的任務(wù)。既要有理論知識的講解,又要有Jdk內(nèi)容的學習,一直是學生學習的難點課程。文章通過對教學過程中學生頻繁出現(xiàn)問題的分析,設(shè)計了一套針對Java教學的方案,提出了任務(wù)驅(qū)動和過程反饋相結(jié)合的教學方式,針對不同的階段設(shè)計相應(yīng)的實例,并針對學生的反饋進行及時的修正,使學生更好地理解面向?qū)ο蟮幕靖拍詈蚃ava程序設(shè)計方法。
[關(guān)鍵詞] Java教學;任務(wù)驅(qū)動;過程反饋
[中圖分類號] G642.0? ?[文獻標識碼] A? ?[文章編號] 1674-9324(2021)04-0165-04? ? [收稿日期] 2020-07-16
一、前言
Java程序設(shè)計課程是系統(tǒng)介紹Java語言的基礎(chǔ)知識及編程方法,使學生理解“面向?qū)ο蟮某绦蛟O(shè)計”思想的課程。這門課程要求學生在已經(jīng)具有了面向過程的程序設(shè)計能力基礎(chǔ)上,能夠用面向?qū)ο蟮乃枷肴シ治鼋鉀Q問題。因此,課程不再是一門純粹的語言類課程,而要承擔轉(zhuǎn)變學生思維方式的任務(wù);同時由于Jdk庫提供了豐富的類庫,涉及GUI編程、網(wǎng)絡(luò)編程、數(shù)據(jù)庫編程和多線程編程,學生學習的難度較大。正是由于Java程序設(shè)計課程的這種特殊性,其教學過程有別于其他專業(yè)課。如何達到教學目的,讓學生從整體和細節(jié)上掌握分析和解決問題的方法,讓學生能夠獨立完成一個小型Java項目的設(shè)計和編程,是Java教學中的一個難點,也是一個重點。教學方法成為Java教學中重要的研究課題。
傳統(tǒng)的教學方法已經(jīng)不適應(yīng)當前的人才培養(yǎng)模式。由于程序設(shè)計類課程的特殊性,即使將以教師為中心的教學模式變?yōu)橐詫W生為中心的教學模式也無法達到人才培養(yǎng)的要求,因此應(yīng)該結(jié)合多種教學平臺和教學方式,形成合理的教學模式。目前很多教師進行了相關(guān)的研究:①引入了OBE的教學理念,設(shè)計了可以覆蓋所有知識點的項目貫穿整個教學過程[1];②針對在專業(yè)課教學中存在的學生學習主動性不足和傳統(tǒng)教學模式不能適應(yīng)學生的差異化需求等問題,提出了一種個性化教學模式[2];③提出以項目教學為驅(qū)動的程序設(shè)計實踐課程的翻轉(zhuǎn)課堂+SPOC教學模式[3];④提出了“課程模塊化+技能化”教學理念,以“懂、編、用”為教學目標,搭建完整的課程知識體系,保證“學、用”不斷線,形成課程學習鏈[4];⑤提出以校企共建課程為依托的“項目引領(lǐng)、任務(wù)驅(qū)動、工學結(jié)合”分步更迭教學法[5]。筆者總結(jié)多年的Java教學實踐經(jīng)驗,提出任務(wù)驅(qū)動、過程反饋的教學模式,通過學生每一輪的學習反饋,有針對性地進行下一輪學習,使學生能夠較好地掌握相關(guān)內(nèi)容。由于面向?qū)ο笫且环N思想,不局限于Java程序設(shè)計,具有通用性,因此本文從面向?qū)ο蠼虒W和Java程序設(shè)計教學兩個方面進行論述。
二、面向?qū)ο蟮慕虒W方法
面向?qū)ο笫且环N思想,是基于面向過程而言的。有別于程序設(shè)計的教學,重點在于理解面向?qū)ο蟮娜筇卣鳎悍庋b性、繼承性和多態(tài)性。思想的理解也需要Java程序為載體,所以教學中二者要結(jié)合起來。作為目前主流的設(shè)計思想,學生掌握該方法有很大的難度。在教學實踐中,很多學生無法理解該思想,對于一些具體的問題仍然停留在面向過程的設(shè)計思想上。實際教學中面向?qū)ο蟮乃枷胗柧毐缓芏嘟處熀鲆?,將重點集中于Java的語法上,使學生無法完成從面向過程到面向?qū)ο笏枷氲霓D(zhuǎn)變。
(一)面向?qū)ο蟮娜蝿?wù)驅(qū)動
任務(wù)分為兩個階段,一是對封裝性形式上的理解,完成形式上面向?qū)ο笏枷氲霓D(zhuǎn)化;二是對封裝性的實質(zhì)理解和面向?qū)ο笥袆e于面向過程的繼承性和多態(tài)性的理解。具體內(nèi)容如表1所示。
1.封裝性的形式理解封裝性的形式理解是對面向?qū)ο笮问缴系睦斫?,使學生以最簡單的方式來理解面向?qū)ο?,從而初步具有面向?qū)ο蟮脑O(shè)計思想??梢詮腃語言的結(jié)構(gòu)體引出面向?qū)ο笮问缴系姆庋b,使學生自然地完成到面向?qū)ο蟮倪^渡。這一階段強調(diào)的是形式上將數(shù)據(jù)及對數(shù)據(jù)的操作合為一體,類的抽象是這個階段的關(guān)鍵點。
2.封裝性的實質(zhì)理解。在完成封裝性形式上的理解后,需要理解封裝的實質(zhì)內(nèi)容,即封裝的真正作用是完成訪問層次的設(shè)定。封裝在語法實現(xiàn)上是通過控制訪問權(quán)限來控制類成員的封裝程度,如何控制訪問權(quán)限成為理解封裝性的關(guān)鍵點。
3.繼承性的理解。繼承性是面向?qū)ο笏枷氲闹匾匦裕从沉藘蓚€類之間的父子關(guān)系。從形式上理解繼承性提高了軟件的開發(fā)效率,從實質(zhì)上理解繼承中子類的構(gòu)造過程。子類的構(gòu)造通過增加新成員、覆蓋父類成員而形成。理解子類構(gòu)造時必須先構(gòu)造父類的邏輯,同時理解覆蓋父類成員后子類的內(nèi)存空間示意圖,從而理解整個繼承鏈的層次關(guān)系。
4.多態(tài)性的理解。多態(tài)性是面向?qū)ο笏枷胱钪匾膽?yīng)用,反映了程序不同的抽象層次。從形式上理解多態(tài)性形成的語法形式,從實質(zhì)上理解多態(tài)性在現(xiàn)實問題中的邏輯抽象,真正理解程序的抽象層次及其作用。
(二)面向?qū)ο蟮倪^程反饋及實例設(shè)計
面向?qū)ο笏枷氲闹v解從理論上是抽象的。如何將抽象的理論讓學生具體地感性理解,需要設(shè)計多層次的實例。每一層的實例通過學生的訓練反饋后進入高一層的實例,完成對學生理解偏差的糾錯和概念的加深,讓學生真正深入理解面向?qū)ο笤O(shè)計思想。過程反饋實例設(shè)計如表2所示。
1.封裝性的形式理解。第一輪實例讓學生理解封裝的形式及基本的面向?qū)ο笤O(shè)計思想,理解抽象出類的基本方法,同時理解類的抽象方法不唯一;第二輪實例讓學生理解抽象類的過程中應(yīng)當考慮的因素,理解類中數(shù)據(jù)成員和方法成員的關(guān)系,從而理解類的封裝本質(zhì)上是對數(shù)據(jù)和該數(shù)據(jù)操作的封裝。
2.封裝的實質(zhì)理解。第一輪實例讓學生理解成員的可見性范圍的設(shè)計思想,從而理解設(shè)計成員訪問權(quán)限的控制時考慮的因素;第二輪實例讓學生理解成員權(quán)限和類權(quán)限的擴展是如何完成的。
3.繼承性的理解。第一輪實例讓學生理解子類繼承父類的成員,結(jié)合訪問權(quán)限控制理解子類能夠繼承的父類成員的限制;第二輪實例讓學生理解子類可以改寫父類成員完成擴展,為后續(xù)多態(tài)性的運行做準備。
4.多態(tài)性的理解。第一輪實例讓學生理解多態(tài)性在形式上的實現(xiàn),其基礎(chǔ)是繼承和覆蓋,其實現(xiàn)是父類引用指向子類對象;第二輪實例讓學生理解多態(tài)性的實質(zhì)作用是形成不同抽象層次的程序,從而讓不同層次的變化封閉在相應(yīng)的層次中,保證了高抽象層次程序的穩(wěn)定性。
以上對于實例的設(shè)計只是一部分,更多的實例設(shè)計思想基于任務(wù)及循序漸進的思想,目的是讓學生逐步進入面向?qū)ο蟮乃枷胫衼?,降低學生的學習難度,提高學生的學習興趣。
三、Java程序設(shè)計的教學方法
(一)Java程序設(shè)計的任務(wù)驅(qū)動
由于Java語法和C語言語法接近,所以Java教學的重點在于異常處理、GUI、數(shù)據(jù)庫編程、網(wǎng)絡(luò)編程和多線程。這些內(nèi)容的理論性低于面向?qū)ο蟛糠?,在理解相關(guān)理論的基礎(chǔ)上,更多的是掌握Jdk提供的相關(guān)類的使用。具體內(nèi)容如表3所示。
1.異常處理。有別于面向過程的錯誤處理,面向?qū)ο蟮漠惓L幚矸蛛x了接收和處理錯誤代碼。這個功能理清了編程者的思路,也幫助代碼增強了可讀性,方便了維護者的閱讀和理解。異常處理提供了處理程序運行時出現(xiàn)的任何意外或異常情況的方法。理解這一點,讓學生能理解Java提供的異常處理塊的語法規(guī)定。
2.GUI?;靖拍钤谟贘ava事件處理機制,正確理解事件處理機制等于完成了GUI程序設(shè)計的大部分內(nèi)容。對于Jdk提供的大量的控件,要求學生掌握最常用的控件即可。如果后續(xù)需要,則學生具備了理論知識,更容易完成自學任務(wù)。
3.數(shù)據(jù)庫編程。理解數(shù)據(jù)庫驅(qū)動程序的框架,熟悉數(shù)據(jù)庫編程的步驟即可。
4.網(wǎng)絡(luò)編程。理解Socket的基本概念,熟悉TCP和UDP編程的基本步驟。
5.多線程。多線程是Java程序設(shè)計中重要的內(nèi)容。雖然操作系統(tǒng)包含了相關(guān)概念,但學生仍然停留在基本概念的階段,甚至沒有理解多線程概念。由于多線程執(zhí)行順序的不確定性,導致調(diào)試結(jié)果具有不可再現(xiàn)性,因此學生往往理解不了多線程的概念和應(yīng)用。這一部分應(yīng)重點理解多線程的概念和特點,在此基礎(chǔ)上熟悉相關(guān)多線程的類的使用。
(二)Java程序設(shè)計的過程反饋及實例設(shè)計
Java程序設(shè)計教學中涉及基本概念和應(yīng)用兩個方面。由于Jdk類的數(shù)量龐大、應(yīng)用面廣泛,對Jdk的講解不能做到全覆蓋,因此應(yīng)當讓學生具備自學的基礎(chǔ)。Jdk類第一輪的案例設(shè)計要足夠簡單,使學生更容易理解基本概念;第二輪甚至第三輪的案例設(shè)計側(cè)重實際應(yīng)用和Jdk類的熟悉。其過程反饋及實例設(shè)計如表4所示。
1.異常處理。第一輪實例讓學生理解異常處理的類型及處理機制,重點是理解異常對象的產(chǎn)生和捕獲、異常對象向上傳遞的路徑;第二輪實例讓學生深入理解異常類的層次結(jié)構(gòu)及實際應(yīng)用。
2.GUI。第一輪實例讓學生理解Java事件處理的機制及相關(guān)語法;第二輪實例讓學生熟悉Java類庫提供的常用控件。
3.數(shù)據(jù)庫編程。第一輪實例讓學生熟悉Jdbc各層次包含的類及數(shù)據(jù)庫編程的基本步驟,重點在于數(shù)據(jù)庫的連接;第二輪實例讓學生掌握數(shù)據(jù)庫編程中常用方法及編程技巧。
4.網(wǎng)絡(luò)編程。第一輪實例讓學生結(jié)合計算機網(wǎng)絡(luò)知識和IO知識理解網(wǎng)絡(luò)信息的傳輸過程及步驟,重點在于理解在服務(wù)器和客戶端生成Socket對象的區(qū)別以及輸入輸出流對象的生成;第二輪實例讓學生以實際項目全方位熟悉網(wǎng)絡(luò)編程。
5.多線程。第一輪實例讓學生熟悉線程對象的生成方法以及線程執(zhí)行的特點,理解多線程執(zhí)行結(jié)果的隨機性;第二輪實例讓學生結(jié)合操作系統(tǒng)知識熟悉多線程環(huán)境下同步的重要性及解決方法。
以多線程為例,內(nèi)容的講解可以分為提出問題、講解、加深提問、點評學生的反饋、內(nèi)容推進五個步驟實施。首先提出如何解決兩個線程交替打印連續(xù)數(shù)字的基礎(chǔ)問題,結(jié)合操作系統(tǒng)的互斥概念及解決方法,講解Java提供的線程互斥的方法,使得學生掌握基本的多線程概念及實現(xiàn)方法;在此基礎(chǔ)上,提出生產(chǎn)者消費者問題,給出提示并讓學生思考如何實現(xiàn)線程間的通信問題。從學生給出的實現(xiàn)方案中可以了解學生對多線程基礎(chǔ)知識的掌握情況及進一步解決新問題的能力,通過對這些方案的點評,學生對多線程基礎(chǔ)知識進行了鞏固,為下一步內(nèi)容的推進打好基礎(chǔ)。五個步驟可以根據(jù)具體教學內(nèi)容進行刪減或循環(huán)。
四、總結(jié)和結(jié)論
任務(wù)驅(qū)動和過程反饋相結(jié)合的教學方法符合教育心理學的規(guī)律。任務(wù)驅(qū)動讓學生有明確的目標去完成,給予學生足夠的成就感,改變了傳統(tǒng)“填鴨式”教學方法的枯燥,增強了學生學習的積極性。教學過程中根據(jù)學生掌握知識層次的不同,采用分層次的案例及課外擴展作業(yè),使得學生能夠循序漸進地掌握相關(guān)知識,讓學生感覺Java程序設(shè)計的學習不再困難。過程反饋是該教學方法關(guān)鍵的一環(huán)。明確讓學生進行反饋,不僅能對學生所學的知識進行查缺補漏,還能使學生對反饋具有期許性。如果這種期許是正向的,會大大提高學生學習的積極性,從而改變目前大學普遍存在的學生自學能力不足的現(xiàn)象。實踐表明,在實際教學中應(yīng)用該方法,能主動提問的學生數(shù)量大大增加,課余時間用于編程的時間大大增加,甚至學生自發(fā)地組成學習小組進行討論,而最終的考核也表明學生的成績有了明顯的提高。
參考文獻
[1]王慧,李雷孝,邢紅梅.基于OBE理念的Java程序設(shè)計課程教學改革探索[J].計算機教育,2020(02):54-57.
[2]李永飛,李芙玲,王養(yǎng)廷.基于個性化教學的Java程序設(shè)計課程教學研究[J].計算機教育,2020(03):148-152.
[3]常燕,劉嘉敏,朱世鐵,于霞.項目驅(qū)動的程序設(shè)計實踐課程的“翻轉(zhuǎn)課堂”+SPOC教學研究[J].教育教學論壇,2019(01):157-159.
[4]吳金舟.《java程序設(shè)計》課程教學改革研究與實踐[J].教育教學論壇,2016(45):93-95.
[5]壽周翔,胡則輝.分步迭代教學法在Java程序設(shè)計課程應(yīng)用的研究與探索[J].計算機時代,2020(05):70-73.