周雪芹
摘要:《C語言》是《Java語言》的前導(dǎo)課程,對于兩種編程語言中所涉及的語法規(guī)則中的差異性,運(yùn)用五星教學(xué)法進(jìn)行教學(xué)方法設(shè)計(jì),分析從C語言語法規(guī)則(激活舊知),順利過渡到Java語言的語法規(guī)則和知識點(diǎn)(示證新知);在課前、課中和課后引導(dǎo)學(xué)生嘗試應(yīng)用,達(dá)到融會貫通。多年的教學(xué)實(shí)踐證明,只有教師科學(xué)地進(jìn)行教學(xué)設(shè)計(jì)并在教學(xué)實(shí)踐中合理布置實(shí)驗(yàn)和練習(xí)任務(wù),學(xué)生才能夠順利掌握J(rèn)ava面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,解決現(xiàn)實(shí)世界的問題。
關(guān)鍵詞: 五星教學(xué)法;C語言;Java語言;教學(xué)設(shè)計(jì)
中圖分類號:G64? ? ?文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)16-0161-02
1 《C語言》與《Java語言》關(guān)系
Java語言可用于開發(fā)桌面應(yīng)用程序、網(wǎng)絡(luò)應(yīng)用程序,也可以用于移動軟件開發(fā),嵌入式軟件開發(fā)、微信小程序開發(fā)。它不僅僅是一門開發(fā)語言,更是一個(gè)開發(fā)平臺。它擁有龐大的類庫,功能非常強(qiáng)大,作為一門徹底的、完全的、面向?qū)ο蟮木幊陶Z言,應(yīng)用非常廣泛。它與C語言是一脈相承的,吸收了C的許多優(yōu)點(diǎn),而摒棄了C里的goto語句、指針和多繼承等概念,在語法上比C更嚴(yán)格,使用起來更健壯。
C語言和Java語言都具有很強(qiáng)的實(shí)踐姓,強(qiáng)調(diào)學(xué)生的動手操作和編程能力。在高校里,一般先學(xué)C語言,然后學(xué)習(xí)Java語言。二者具有先后關(guān)系,教師如何做好教學(xué)設(shè)計(jì),引導(dǎo)學(xué)生自然而然地從C語言過渡到Java語言,邊比較邊學(xué)習(xí),學(xué)生印象深刻,基礎(chǔ)打得牢。
2五星教學(xué)法概述
戴維梅里爾于2003年提出的五星教學(xué)法是近年來教育領(lǐng)域非常推崇的教學(xué)理論,適合培養(yǎng)學(xué)生實(shí)際操作技能為重點(diǎn)。五星教學(xué)模式的核心主張是:在“聚焦解決問題”的宗旨下,教學(xué)應(yīng)該由不斷重復(fù)的四階段循環(huán)圈:“激活舊知”、“示證新知”“嘗試應(yīng)用”和“融會貫通”等構(gòu)成。[1]
教師運(yùn)用這個(gè)理論進(jìn)行教學(xué)設(shè)計(jì),通過深度揭示學(xué)習(xí)發(fā)生和教學(xué)設(shè)計(jì)的底層邏輯,可以讓課堂以學(xué)生產(chǎn)生為導(dǎo)向,授課效果好、效率高,參與度高。
3 運(yùn)用五星教學(xué)法,順利實(shí)現(xiàn)從C語言到Java語言學(xué)習(xí)的過渡
“激活舊知”是老師帶學(xué)生回憶已經(jīng)學(xué)過的知識。即:要完成一個(gè)任務(wù),用C語言如何實(shí)現(xiàn)?!笆咀C新知”是引導(dǎo)學(xué)生將新知識和原有知識相關(guān)聯(lián),用Java語言怎么實(shí)現(xiàn),與原先用C語言實(shí)現(xiàn)起來有什么不同,重在給學(xué)生交代二者實(shí)現(xiàn)起來的差異,使學(xué)生印象深刻,即復(fù)習(xí)了C語言的規(guī)則,又學(xué)會了Java語言的規(guī)則。“嘗試應(yīng)用”是老師引導(dǎo)學(xué)生運(yùn)用新的開發(fā)工具——Java語言來完成編程任務(wù)的功能?!叭跁炌ā笔墙處熞龑?dǎo)學(xué)生多加練習(xí)、不斷重復(fù)、舉一反三,直到熟能生巧的過程。
利用五星教學(xué)法上面的所介紹的4個(gè)步驟,重點(diǎn)應(yīng)用在Java基本語法部分的教學(xué)上。因?yàn)椤禖語言》中《Java語言》的前導(dǎo)課,二者在基本語法上是很相似的。教師在教授Java語言語法的時(shí)候,不必從零起點(diǎn)開始授課,而在C語言的基礎(chǔ)上,重點(diǎn)比較差異,練習(xí)語法上的不同之處,可以節(jié)省Java基本語法部分的2/3的課時(shí)。如果學(xué)生基本語法掌握得比較扎實(shí),有了學(xué)習(xí)興趣,相當(dāng)于入了一個(gè)門檻,在學(xué)習(xí)后面的Java面向?qū)ο蟆ava應(yīng)用的時(shí)候,就比較順利了。
4 從“激活舊知”到“示范新知”
下面以幾個(gè)案例來說明五星教學(xué)法在從C語言至Java語言的從“激活舊知”到“示范新知”、循序漸進(jìn)、進(jìn)行逐步過渡的教學(xué)設(shè)計(jì)過程。重點(diǎn)分析知識點(diǎn)之間的關(guān)聯(lián)與差異,使學(xué)生在比較中進(jìn)行學(xué)習(xí)。
(1)條件語句if
C語言中的if語句的條件表達(dá)式或邏輯表達(dá)式,非0即為真。而Java語言中的表達(dá)式運(yùn)算結(jié)果必須是布爾類型的值,這一點(diǎn)是不同的。程序舉例如下。
教師示范:判斷奇數(shù)(偶數(shù));學(xué)生練習(xí):判斷閏年、給某個(gè)成績確定等級(優(yōu)、良、中、及格、不及格)。
(2)基本數(shù)據(jù)類型
C語言中的數(shù)據(jù)類型包括:有符號和無符號兩大類,數(shù)據(jù)在內(nèi)存中占據(jù)的字節(jié)長度依據(jù)編譯系統(tǒng)的不同而有所不同,在一個(gè)編譯系統(tǒng)下編輯的程序移植到另一種編譯系統(tǒng)下運(yùn)行,可能會產(chǎn)生嚴(yán)重的問題;Java的基本數(shù)據(jù)類型的數(shù)據(jù)在不同的操作系統(tǒng)都是確定的位數(shù),正是由于這個(gè)原因,才使得Java程序移植性好,能夠一次編寫,處處運(yùn)行;另外,Java語言中的數(shù)值型數(shù)據(jù)均為有符號數(shù)。
(3)標(biāo)準(zhǔn)輸入和輸出
C語言中使用標(biāo)準(zhǔn)庫函數(shù)scanf()函數(shù)和printf函數(shù)完成數(shù)據(jù)的輸入、輸出操作。Java語言是面向?qū)ο蟮恼Z言,所有的功能都是由對象來調(diào)用,初學(xué)者可以用Java標(biāo)準(zhǔn)類庫中的java.util.Scanner類首先生成一個(gè)鍵盤輸入的工具對象reader:Scanner reader=new Scanner(System.in);下一步利用reader來調(diào)用next()、nextInt()、nextFloat()、nextDouble()等方法來完成從鍵盤輸入字符串、整數(shù)、浮點(diǎn)類型、雙精度類型等數(shù)據(jù),輸入完成,再利用reader對象調(diào)用close()方法釋放系統(tǒng)資源。
此處學(xué)生初次使用類和對象,教師可以示范1-2種數(shù)據(jù)類型的輸入,然后由學(xué)生練習(xí)其他類型數(shù)據(jù)的輸入練習(xí)。在此基礎(chǔ)上,教師需要提醒學(xué)生next()方法和nextLine()方法的區(qū)別,前者數(shù)據(jù)的輸入以空格、TAB鍵、回車(換行)作為結(jié)束標(biāo)志,后者只識別回車(換行)結(jié)束標(biāo)記。
這樣,可以形成“激活舊知”(C語言scanf和printf函數(shù))—“示范新知”(Scanner類對象next…)—“嘗試應(yīng)用”(學(xué)生實(shí)操)—“融會貫通”(學(xué)生反復(fù)練習(xí))的一個(gè)技能訓(xùn)練的完整過程。
(4)C語言的結(jié)構(gòu)體、函數(shù)與類的屬性與方法
C語言中,將一個(gè)目標(biāo)的組成部分定義為結(jié)構(gòu)體類型(struct),它是一個(gè)復(fù)合類型;將需要完成的功能的一組代碼定義為函數(shù),函數(shù)的設(shè)計(jì)體現(xiàn)了面向過程的程序設(shè)計(jì)思想。面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。
Java語言是面向?qū)ο蟮?。將一個(gè)對象的靜態(tài)屬性和動態(tài)的行為屬性抽取出來,定義為類。用類生成對象,每個(gè)對象的屬性值是不同的。類是抽象的,對象是具體的。用對象調(diào)用方法(動態(tài)屬性,或者函數(shù)),來完成功能。面向?qū)ο笫前褬?gòu)成問題的任務(wù)分解成各個(gè)對象,建立對象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問題的步驟中的行為。
兩種編程語言都能描述靜態(tài)屬性和動態(tài)行為,但是Java語言實(shí)現(xiàn)了靜態(tài)屬性和動態(tài)行為的封裝,比C語言要更靈活,易維護(hù)、易復(fù)用、易擴(kuò)展。另外,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計(jì)出低耦合的系統(tǒng),使系統(tǒng) 更加靈活、更加易于維護(hù)。
在類的封裝的概念上,教師可以利用以下教學(xué)設(shè)計(jì),方便學(xué)生理解面向?qū)ο蟮暮锰?。教師可以示范如下程序案例?/p>
1.求取直角坐標(biāo)系下的2個(gè)點(diǎn)之間的距離,在C語言中通常寫一個(gè)函數(shù):
(5)Java語言的優(yōu)勢在于它強(qiáng)大的類庫,教師可以根據(jù)教學(xué)進(jìn)度,在不同的章節(jié)設(shè)計(jì)如下案例讓學(xué)生進(jìn)行體驗(yàn),以便于學(xué)生有切身體會,增加學(xué)生學(xué)習(xí)動力和學(xué)習(xí)積極性。
1.將一個(gè)整數(shù)值aInt變成其二進(jìn)制形式,并輸出。
以C語言中通常按如下形式實(shí)現(xiàn):將aInt除2取余,余0結(jié)束,然后將余數(shù)按逆序依次記錄下來,即是它的二進(jìn)制數(shù)值;而在Java語言中利用Integer類的一個(gè)靜態(tài)方法:toBinaryString(aInt)即可得到它的二進(jìn)制字符串。
2.字符及字符串處理
在C語言中,對于字符串的處理方式是比較原生態(tài)的,對其中的字符進(jìn)行變換和查詢,通常采用循環(huán)方式,逐個(gè)對每個(gè)字符進(jìn)行處理;而在Java中有String類對字符串對象進(jìn)行查詢和管理,同時(shí)還有StringBuffer(StringBuilder)類非常方便地對字符串進(jìn)行增、刪除、改操作。
3.數(shù)組的處理和操作
C語言中,數(shù)組的初始化為:int a[N]; N為常量;直接分配個(gè)整數(shù)類型且連續(xù)存放的內(nèi)存空間, a作為該數(shù)組的首地址, 不可變。二維數(shù)組必須是行列的方陣。
Java語言中的數(shù)組,初始化形式:int a[]=new int[n];n是變量。a在棧內(nèi)存空間的一個(gè)引用變量, 保存了該數(shù)組的首地址,該數(shù)組的n個(gè)元素處于堆內(nèi)存空間。二維數(shù)組被看成是一維數(shù)組的數(shù)組,一維數(shù)組可以不等長。在Java類庫中,有一個(gè)工具類Arrays,能夠?qū)σ痪S數(shù)組、多維數(shù)組進(jìn)行各種操作,如:批量填充元素值、排序、二分查找、快速輸出數(shù)組元素值等等。
5 “嘗試應(yīng)用”和“融會貫通”
學(xué)院建立了山東理工大學(xué)程序在線檢測平臺SDUTOJ(https://acm.sdut.edu.cn/),其中有3762個(gè)題目可供學(xué)生練習(xí)和考試,平臺支持Java語言提交程序代碼。經(jīng)過多年的教學(xué)實(shí)踐,本課程準(zhǔn)備了300余題目,對眾多的知識點(diǎn),如:Java基本語法的語句、運(yùn)算符和表達(dá)式、數(shù)據(jù)類型、類和對象、繼承和多態(tài)、異常處理、常用類(字符串、日期類、數(shù)學(xué)類等)、集合框架之?dāng)?shù)據(jù)結(jié)構(gòu)(List、Set和Map)等都有大量的題目供學(xué)生練習(xí)。計(jì)算機(jī)科學(xué)與技術(shù)和軟件工程專業(yè)的《Java語言程序設(shè)計(jì)》課程均用此平臺布置作業(yè)、安排實(shí)驗(yàn)和課堂練習(xí)。該平臺配備專用考試服務(wù)器,在中期安排2次在線檢測。
SDUTOJ平臺的題目均有一定的應(yīng)用場景,需要學(xué)生從現(xiàn)實(shí)問題中分析、抽取其中的數(shù)據(jù),建立模型,然后編程實(shí)現(xiàn)功能,解決實(shí)際問題。在學(xué)生反復(fù)練習(xí)的過程中,就訓(xùn)練了“嘗試應(yīng)用”。該門課程的最大特點(diǎn)在于應(yīng)用性,只有進(jìn)行大量的、扎實(shí)的練習(xí)和編程實(shí)踐,才能做到“融會貫通”。教師在教學(xué)中,要做好這方面的要求和引導(dǎo),使學(xué)生順利從C語言到Java語言的過渡,熟練掌握各知識點(diǎn),建立面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,解決生活實(shí)際和生產(chǎn)實(shí)際中的問題。
6 小結(jié)
Java類庫的功能非常強(qiáng)大,我們基于Java語言進(jìn)行編程,相當(dāng)于站在巨人的肩膀上進(jìn)行操作。只有教師加強(qiáng)教學(xué)設(shè)計(jì),合理引導(dǎo),學(xué)生能夠從C語言的語法順利過渡到Java語言的學(xué)習(xí)上來,學(xué)生能夠溫故而知新,以舊知激活新知,保持了較強(qiáng)的學(xué)習(xí)動力和學(xué)習(xí)興趣,才能達(dá)到良好的教學(xué)效果。
參考文獻(xiàn):
[1]百度百科:五星教學(xué)模式.https://baike.baidu.com/item/%E4%BA%94%E6%98%9F%E6%95%99%E5%AD%A6 %E6%A8%A1%E5%BC%8F/3089195?fr=aladdin
【通聯(lián)編輯:光文玲】