摘要:面向?qū)ο蟪绦蛟O(shè)計課程是當(dāng)前計算機專業(yè)學(xué)生的一門必修專業(yè)課。課程本身的復(fù)雜性與實踐性,使學(xué)生無法完全理解消化并有效應(yīng)用所學(xué)知識點。針對這種情況,本文研究如何設(shè)計簡短精悍、適于課堂演練的實例,并將這些實例與理論學(xué)習(xí)在課堂上有機結(jié)合,使學(xué)生易于領(lǐng)會知識點、充分參與課堂教學(xué),最終達到學(xué)生積極主動學(xué)習(xí),對知識點融會貫通的目的。
關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計;理論學(xué)習(xí);實例設(shè)計
面向?qū)ο蟪绦蛟O(shè)計OOP是1990年代開始流行的一種軟件編程方法,具有抽象、封裝、繼承與多態(tài)4個特點。因其比傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計技術(shù)具有更高的代碼可重用性、可擴充性和易維護的特點,所以,目前面向?qū)ο蠹夹g(shù)已成為開發(fā)大型軟件的主流方法。據(jù)TIOBE編程協(xié)會2008年5月編程語言流行趨勢排行榜顯示,在前5位最受歡迎的編程語言中,面向?qū)ο笳Z言占據(jù)其中4位。
隨著Java、C++等面向?qū)ο笳Z言的普及,以及社會對軟件開發(fā)工程化的重視,面向?qū)ο蠹夹g(shù)已經(jīng)成為程序設(shè)計的主流。鑒于此,面向?qū)ο蟪绦蛟O(shè)計已成為計算機應(yīng)用類高年級學(xué)生及研究生必修的一門專業(yè)課,眾多學(xué)校開設(shè)C++、Java等包含面向?qū)ο蠹夹g(shù)的語言設(shè)計課程。然而,另一種現(xiàn)象卻是企業(yè)招聘不到合適的、掌握面向?qū)ο笳Z言的人才。學(xué)習(xí)面向?qū)ο蠹夹g(shù)的學(xué)生人數(shù)日益增多,但能滿足市場需求的應(yīng)屆生卻寥寥無幾,產(chǎn)生矛盾的原因大致可歸結(jié)為以下幾點。
1) 教學(xué)內(nèi)容抽象、理論性強。生動靈活的程序設(shè)計知識學(xué)習(xí)成為枯燥乏味的機械記憶,這壓制了學(xué)生的學(xué)習(xí)興趣。
2) 程序設(shè)計實際應(yīng)用能力不強。編程能力的培養(yǎng)過多依賴實驗課,學(xué)生在學(xué)習(xí)理論知識后通過編程演練加深理解的環(huán)節(jié)有所欠缺。
3) 學(xué)生發(fā)散性思維缺失。教學(xué)內(nèi)容和方法拘泥于教材,束縛發(fā)散性思維,人才培養(yǎng)模式單一。
4) 對自學(xué)能力培養(yǎng)的忽略。教師單方灌輸知識,導(dǎo)致學(xué)生過于依賴教師,逐漸丟失獨立思考習(xí)慣。
5) 脫離市場需求。教學(xué)內(nèi)容過于保守,學(xué)生難以在課堂上接觸到當(dāng)今流行技術(shù),畢業(yè)求職時感到與社會脫節(jié)并產(chǎn)生挫敗感。
總的來說,隨著時代的發(fā)展,社會對人才提出了更高的要求。企業(yè)需要理論基礎(chǔ)扎實、動手能力強的綜合型應(yīng)用人才。所以,作為學(xué)校來說,在教學(xué)方法、教學(xué)過程等環(huán)節(jié)必須進行相應(yīng)的改革,使學(xué)生在具備扎實的理論基礎(chǔ)的同時,還能把書本知識與動手實踐融合起來,達到相輔相成的效果。對此,本文提出把實例教學(xué)引入面向?qū)ο蟪绦蛟O(shè)計理論課堂,抓住學(xué)生學(xué)過理論后急于實踐驗證知識點的敏感期,擺脫理論課程和實驗課程分離、不能銜接的困境。
1實例教學(xué)法
實例教學(xué)法也叫案例教學(xué)法或個案教學(xué)法[1],即在教師指導(dǎo)下,根據(jù)教學(xué)目標(biāo)和內(nèi)容需要,采用實例組織學(xué)生進行學(xué)習(xí)、研究、鍛煉能力。它打破了以理論知識點為中心的傳統(tǒng)教學(xué)模式,以精心設(shè)計的實例為中心,把教授和學(xué)習(xí)的重心放在實例的分析和領(lǐng)會上。整個教學(xué)過程強調(diào)學(xué)以致用,在應(yīng)用中學(xué)習(xí)。基于實例的教學(xué)必須注意以下5個方面。
1) 實例的連貫性[2]。若知識點相關(guān),則采用同一系列實例進行擴展,即題目內(nèi)容相近,但針對不同知識點做局部改變擴展,使學(xué)生能快速理解實例,并專注于教學(xué)點。
2) 適當(dāng)采用實例的歸納、對比、類比等方法。如窮舉法,通過多種實例類比,說明何種問題可以用窮舉法解決;又如面向?qū)ο蟪绦蚣軜?gòu)與程序設(shè)計思想,通過對同一問題進行結(jié)構(gòu)化設(shè)計和面向?qū)ο笤O(shè)計的對比。
3) 伴隨教學(xué)進度分解一個復(fù)雜的綜合實例,逐步講解程序設(shè)計方法思想。采用問題引導(dǎo)的方法,由綜合實例的某個步驟提出問題,引出新知識點,改進程序,層次推進至最終完成問題。
4) 每講完一次課程,都為學(xué)生總結(jié)本次課程的語法知識點和程序設(shè)計思想,提示下堂課涉及的前序知識點,以及與下堂課有直接關(guān)系的前序?qū)嵗⑻岢鲱A(yù)備問題。布置與課堂實例的算法相似的程序作業(yè),并做到學(xué)生能通過知識的直接遷移來完成作業(yè)。
5) 要求學(xué)生在課余根據(jù)相應(yīng)知識點進行實例自學(xué)。系統(tǒng)學(xué)習(xí)并練習(xí)相應(yīng)實例,達到進一步練習(xí)和提高的目的。
2設(shè)計行之有效的實例
從上述介紹中,我們看到在理論課上引入巧妙設(shè)計的實例可以使課堂教學(xué)化繁為簡,使學(xué)生實踐能力得到鍛煉,前后知識點得以貫穿;反之,不恰當(dāng)?shù)膶嵗龝哟蠼處熤v解難度,使學(xué)生邏輯思維混亂,知識學(xué)習(xí)無法條理化。總之,如何設(shè)計簡練切題、難易適中的實例,并使實例既有一定難度,又將難度控制在通過思考、引導(dǎo)便能解決的程度內(nèi)是面向?qū)ο蟪绦蛟O(shè)計課程引入實例的關(guān)鍵。
教師的理論教學(xué)和學(xué)生的知識學(xué)習(xí)都以教材為依托。為方便教師講解和學(xué)生記筆記,本文建議擴充現(xiàn)有教材每個章節(jié)的實例。在加深知識點理解的實例基礎(chǔ)上,增加擴充程序功能的題目,以使學(xué)生在復(fù)習(xí)舊知識點和編程題目時演練新知識點。這個舉措改變了學(xué)生僅通過讀程序來學(xué)習(xí)知識的傳統(tǒng)授課形式,把動手能力培養(yǎng)引入理論課,這更加符合學(xué)習(xí)理論-學(xué)習(xí)理論如何應(yīng)用-實踐理論如何應(yīng)用的認(rèn)知規(guī)律,并把握住了在理論學(xué)習(xí)后立即消化吸收的最好時機。
實例的設(shè)計應(yīng)遵照培養(yǎng)創(chuàng)新性人才的原則,結(jié)合整改后的教材重新整合教學(xué)內(nèi)容。在課堂上引入有助學(xué)生理解面向?qū)ο笏枷氲某绦蛟O(shè)計題目,力求學(xué)生在掌握知識點的同時,強化對面向?qū)ο笏枷氲暮暧^把握能力,以達到提高學(xué)生再學(xué)習(xí)的能力。下面以一個摘自清華大學(xué)出版社的《面向?qū)ο蟪绦蛟O(shè)計與visual c++6.0教程》[3]中第4.7.2節(jié)的例子來闡明本文的觀點。程序代碼如下:
【例4-20】 類作用域及生存期舉例。
(1)#include
(2)#include
(3)class Test
(4){public:
(5)Test(int a)
(6){i=a;
(7)cout<<"Test:"< (8)private:
(9)int i;};
(10)void fun1(int n)
(11){static Test t1(n); //定義靜態(tài)對象t1
(12)cout<<"fun1:"<
(14){Test t2(188);
(15)fun1(18);
(16)fun1(28);}
本書通過一個在函數(shù)中定義靜態(tài)對象t1的例子并演示其執(zhí)行結(jié)果,旨在讓學(xué)生加深掌握本節(jié)的核心知識點:對象的生存期。這個例子的局限性在于:它只向?qū)W生展示了靜態(tài)對象的創(chuàng)建與終止時間,而缺乏對其他對象的生存期及作用域的關(guān)注。為了使例子涵蓋更全面的知識點、承擔(dān)更多的教學(xué)功能,本文對其做如下4個延展。
1) 在Test類定義中插入一個輸出i當(dāng)前值的display無參函數(shù),并在第15行后插入t1.display();語句。使例子涵蓋與生存期密不可分的作用域知識點。
2) 在第12行后插入Test g_t(33);語句。全局對象g_t的添加改變了執(zhí)行結(jié)果,學(xué)生可以從中掌握靜態(tài)對象之外的其他對象的生存期。
3) 在原程序上添加析構(gòu)函數(shù)的定義。這個延展既復(fù)習(xí)4.4.2節(jié)析構(gòu)函數(shù)的定義,又以靜態(tài)對象與全局對象的生存期知識為鋪墊,考察學(xué)生對析構(gòu)函數(shù)調(diào)用時機的掌握。
4) 定義一個同名不同內(nèi)容的Test類引起命名沖突,以引入4.8名空間的內(nèi)容。
本文為例4-20添加兩個知識難點的應(yīng)用:全局對象的生存期;作用域與生存期的區(qū)別。復(fù)習(xí)前面的知識重點:析構(gòu)函數(shù)。引入后繼的課程內(nèi)容:名空間。這4項擴充使原本一個單一功能的例子包含更多的知識難點,并具有承前啟后的作用。
3實例在課堂上的應(yīng)用法則
在理論課程中以實例教學(xué)為主導(dǎo)是本文的研究重心和特色。為使實例在教學(xué)中的效果達到最大化,做到真正提高學(xué)生綜合能力和創(chuàng)新能力、加強學(xué)生的自學(xué)能力,我們需要在教材建設(shè)、教學(xué)內(nèi)容、教學(xué)模式3方面進行改革,以完善面向?qū)ο蟪绦蛟O(shè)計課程的教學(xué)體系改革。
教學(xué)內(nèi)容與教材建設(shè)的改革是提高教學(xué)質(zhì)量的重要保證和前提,恰當(dāng)?shù)慕虒W(xué)模式是取得良好教學(xué)效果的橋梁[4]。在實施教學(xué)模式、方法與手段改革的過程中,讓教師轉(zhuǎn)變教學(xué)觀念,在教學(xué)過程中樹立以學(xué)生為主體的教學(xué)思想,正確處理傳授知識與培養(yǎng)能力、提高素質(zhì)之間的關(guān)系;改變 “教師單向灌輸”的教學(xué)模式,開展啟發(fā)式、討論式和研究式教學(xué);可根據(jù)學(xué)生水平進行分級教學(xué)、因材施教。此外,結(jié)合當(dāng)前流行技術(shù),進行以案例教學(xué)為內(nèi)容的研究式教學(xué)模式的探索。具體來說,就是教師結(jié)合教學(xué)內(nèi)容設(shè)計編程題目的教材整改,在理論課上要求學(xué)生認(rèn)知所學(xué)知識點和理解相關(guān)實例后,解答相關(guān)問題或完成編程題目的編寫,以完成理論認(rèn)知到實踐應(yīng)用的轉(zhuǎn)化。在學(xué)生完成任務(wù)的過程中,教師除了要強化過程管理與規(guī)范課程的過程監(jiān)控之外,還要給予學(xué)生恰當(dāng)?shù)膮f(xié)助指導(dǎo),在不影響學(xué)生獨立思考和分析總結(jié)的前提下,幫助學(xué)生把握解題的宏觀方向。
在第3節(jié)的例子中,本文為例4-20添加了4項功能延展。第1項延展中教師為例子添加一個函數(shù)定義與函數(shù)調(diào)用,要求學(xué)生給出程序執(zhí)行結(jié)果,以考察學(xué)生對靜態(tài)對象的作用域的掌握,由上一個知識點——靜態(tài)對象的生存期自然過渡而來。因為作用域與生存期是兩個關(guān)系緊密有極易混淆的概念,絕大多數(shù)教材都把它們放在同一章節(jié)利用對比法進行介紹,所以學(xué)生通過實例觀察靜態(tài)對象的生存期后,容易聯(lián)想到它的作用域問題。此時教師不需引導(dǎo)啟發(fā)就可以讓學(xué)生獨立解決這個問題。第2項延展讓學(xué)生對添加一個全局對象后的例子給出執(zhí)行結(jié)果,加深學(xué)生對生存期的理解。雖然學(xué)生已經(jīng)掌握了靜態(tài)對象的生存期,但全局對象是否等同于靜態(tài)對象對學(xué)生是需要思考的問題,這時教師要巧設(shè)疑問,以激發(fā)學(xué)生創(chuàng)新能動性,鼓勵學(xué)生通過類比靜態(tài)類型與全局類型的關(guān)系來解決當(dāng)下的問題。第3項延展要求學(xué)生改寫程序,在類定義中添加析構(gòu)函數(shù)定義后,說出對程序執(zhí)行結(jié)果的影響。定義析構(gòu)函數(shù)屬于復(fù)習(xí)舊知識點,隨后在這個例子中提出靜態(tài)對象與全局對象的析構(gòu)函數(shù)自動調(diào)用時機問題。對學(xué)生來說,這是沒有接觸過的新內(nèi)容,需要教師在學(xué)生思考3到5分鐘后做出適當(dāng)?shù)闹v解。第4項延展需要學(xué)生思考如何解決命名沖突問題,從而引入名空間的概念。教師可以以提出任務(wù)的方式引發(fā)學(xué)生積極思考解決方法。
通過上述分析,我們可以看出,改編后的實例為學(xué)生設(shè)計了4個難度的問題,它符合學(xué)習(xí)規(guī)律的認(rèn)知梯度,對學(xué)生能力提出不同的考驗,因此,老師要應(yīng)對不同的指導(dǎo)方式,創(chuàng)設(shè)符合課堂實際境況的實踐氛圍。相應(yīng)地,我們可以把設(shè)計的實例以及教師指導(dǎo)模式歸納為如下4類。
第1類:駕輕就熟型。教師可以放手讓學(xué)生獨立完成,盡量不去干擾學(xué)生的思路,讓學(xué)生體驗獨立完成任務(wù)的成就感。上面提到的第1項延展即屬于此類。根據(jù)教學(xué)安排與題目難度,學(xué)生能毫不費力地給出題目答案。教師把這類題目放在前面,給予學(xué)生繼續(xù)答題的興趣與克服困難的自信心。
第2類:稍加思索型。教師在保證學(xué)生充分思考的前提下,可以給出簡單提示,盡可能讓學(xué)生在解決問題的過程中少走彎路。比如上述第2項延展考查的是全局對象的生存期,學(xué)生容易把靜態(tài)對象生存期問題生搬硬套到此題目,這時,教師要引導(dǎo)學(xué)生回顧前面學(xué)習(xí)過的靜態(tài)變量與全局變量的區(qū)別。
第3類:絞盡腦汁型。這類問題不局限于課本知識,對學(xué)生來說難度較大,教師需要將其當(dāng)做新知識并以任務(wù)驅(qū)動的方式詳細(xì)講解。上述第3項延展就屬于此類問題,學(xué)生要根據(jù)析構(gòu)函數(shù)的作用與對象的生存期推導(dǎo)出答案。這對學(xué)生的分析總結(jié)能力提出一定考驗,至少半數(shù)學(xué)生會對此問題一籌莫展。對此問題,教師僅僅公布答案并簡單講解還遠(yuǎn)遠(yuǎn)不夠,而需要將其作為重點難點為學(xué)生分析解題方法和思路。
第4類:無計可施型。這類問題設(shè)計的目的是為了激發(fā)學(xué)生好奇心,以引出后面的內(nèi)容。教師可以以輕松的互動模式,讓學(xué)生在他們現(xiàn)有知識基礎(chǔ)上充分發(fā)揮創(chuàng)造性,提出自己的解決方案。老師要對這些方案給予及時的歸納總結(jié)。比如教師在上述第4項延展中提出命名沖突問題,此時并不期望學(xué)生以現(xiàn)有能力加以解決,它只是讓學(xué)生留意到這個常見并易忽略的編程方法,從而引出后面要學(xué)的知識。
4結(jié)語
本文研究目標(biāo)旨在改革現(xiàn)有的面向?qū)ο蟪绦蛟O(shè)計課程教學(xué)內(nèi)容與模式,以培養(yǎng)高素質(zhì)的創(chuàng)新型人才為出發(fā)點,切實提高學(xué)生的思考能力和動手實踐能力,進而保證該課程教學(xué)的高質(zhì)量并保持高校培養(yǎng)人才面向市場的特色。為達到這個目的,我們對教材實踐部分進行擴充和教學(xué)方法改進,使教學(xué)內(nèi)容充實化、教學(xué)模式多樣化和學(xué)生學(xué)習(xí)興趣最大化,進而提高學(xué)生的動手能力和創(chuàng)新能力,力求使學(xué)生更符合當(dāng)今市場需求,并為后續(xù)課程的學(xué)習(xí)和研究打下基礎(chǔ)。
參考文獻:
[1] 葉衛(wèi)華. 淺談案例教學(xué)法的作用[J]. 職業(yè)圈現(xiàn)代