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