摘 要:C#程序設(shè)計(jì)課程是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)基礎(chǔ)課,在教學(xué)中面向?qū)ο蟮某绦蛟O(shè)計(jì)思想的講授一直是一個(gè)難點(diǎn),但使用傳統(tǒng)教學(xué)無法解決其抽象和本質(zhì)及聯(lián)系的學(xué)習(xí)和理解。為此在其課程上,通過迭代法的項(xiàng)目教學(xué)進(jìn)行知識(shí)的逐步深入講授,來探討一種學(xué)生從抽象概念理解向?qū)嵺`動(dòng)手能力運(yùn)用和提升的方法。
關(guān)鍵詞:C#程序設(shè)計(jì);迭代;項(xiàng)目驅(qū)動(dòng)
中圖分類號(hào):TP393.092
C#程序設(shè)計(jì)課程是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)基礎(chǔ)課,課程要求學(xué)生能夠熟練運(yùn)用面向?qū)ο蟪绦蛟O(shè)計(jì)的各類方法,實(shí)現(xiàn)開發(fā)實(shí)際運(yùn)用的各種應(yīng)用程序。但是在面向?qū)ο蟾拍詈退枷氲膶W(xué)習(xí),對(duì)于學(xué)生是一個(gè)十分抽象的知識(shí)學(xué)習(xí),很多學(xué)校在該問題的課堂講授中,也采用了大量的例子來灌輸該部分的學(xué)習(xí),但是大部分效果都不理想。為此,能否采用軟件開發(fā)中經(jīng)常使用迭代式開發(fā)[1]作為課堂教學(xué)改革的方法,將一個(gè)大案例分解若干個(gè)功能,按照知識(shí)的學(xué)習(xí)進(jìn)度,不斷使用新知識(shí)來迭代設(shè)計(jì)每個(gè)功能,從而使學(xué)生能在實(shí)際項(xiàng)目實(shí)踐動(dòng)手能力上進(jìn)行融會(huì)貫通。
1 迭代法教學(xué)方法概述
在數(shù)學(xué)上為了求解方程不斷重復(fù)某一過程,利用不同結(jié)果作為初值的方法叫迭代。當(dāng)今的計(jì)算機(jī)軟件開發(fā)中引用了該方法,將一個(gè)任務(wù)分為若干個(gè)功能,采用多次重復(fù)開發(fā),每次增加功能模塊開發(fā)。在由簡到繁的迭代過程中,實(shí)現(xiàn)系統(tǒng)的各個(gè)功能的實(shí)現(xiàn)。
在程序設(shè)計(jì)教學(xué)中,可以采用軟件開發(fā)[2]中的這種迭代開發(fā)方法,以任務(wù)驅(qū)動(dòng)進(jìn)行組織教學(xué),將任務(wù)分解為相關(guān)聯(lián)的獨(dú)立功能,由淺到深、由易到難地進(jìn)行知識(shí)點(diǎn)的貫穿和螺旋上升的教學(xué),最終實(shí)現(xiàn)教學(xué)的知識(shí)目標(biāo)[3]和教學(xué)任務(wù)。在這種迭代項(xiàng)目的學(xué)習(xí)中,學(xué)生不僅能夠不斷地鞏固程序設(shè)計(jì)的基礎(chǔ)知識(shí),同時(shí)也能夠設(shè)計(jì)出功能完整的系統(tǒng),學(xué)生的積極性和實(shí)際動(dòng)手能力能夠得到很好地提升,并有助于實(shí)現(xiàn)課堂到企業(yè)的無縫對(duì)接。
2 迭代法在教學(xué)中的運(yùn)用
2.1 迭代教學(xué)的設(shè)計(jì)
通過分析現(xiàn)有C#程序設(shè)計(jì)課程內(nèi)容,我們細(xì)化了實(shí)驗(yàn)教學(xué)的方式和內(nèi)容。整個(gè)實(shí)驗(yàn)教學(xué)過程中,我們采用兩個(gè)原則作為實(shí)驗(yàn)教學(xué)主線。
(1)教學(xué)內(nèi)容迭代貫穿始終。將關(guān)聯(lián)的知識(shí)系統(tǒng)化,把實(shí)驗(yàn)任務(wù)及內(nèi)容采用迭代的方式依次分解之各個(gè)實(shí)驗(yàn)中,使學(xué)生能夠從淺入深、從易到難地完成。我們?nèi)滩捎糜?jì)算器和學(xué)生信息管理系統(tǒng)兩個(gè)不同角度的案例進(jìn)行知識(shí)的分解和迭代,把系統(tǒng)功能分階段在各次實(shí)驗(yàn)中迭代完成,把其具體實(shí)現(xiàn)的功能也采用新的知識(shí)迭代實(shí)現(xiàn)。
(2)任務(wù)驅(qū)動(dòng)方式教學(xué)。每次項(xiàng)目的分解,均采用任務(wù)驅(qū)動(dòng)式教學(xué),明確任務(wù)需求,并講解任務(wù)實(shí)現(xiàn)所需關(guān)鍵知識(shí)。學(xué)生按照規(guī)范的軟件開發(fā)過程進(jìn)行實(shí)現(xiàn),并提交任務(wù)清單及實(shí)現(xiàn)代碼。任課教師會(huì)將學(xué)生優(yōu)秀作品在下一次的講授中進(jìn)行展示和點(diǎn)評(píng)。
2.2 迭代教學(xué)實(shí)施
依據(jù)C#程序設(shè)計(jì)課程的教學(xué)目標(biāo),本文以學(xué)生最難理解的面向?qū)ο蟮念惙庋b及繼承的教學(xué)為例,選取“計(jì)算器”作為迭代式項(xiàng)目教學(xué)法的程序設(shè)計(jì)項(xiàng)目,來說明該課程教學(xué)中迭代教學(xué)法的具體實(shí)施過程。
計(jì)算器軟件實(shí)現(xiàn)模擬Windows計(jì)算器功能,系統(tǒng)功能分解為算術(shù)運(yùn)算、公式計(jì)算、科學(xué)計(jì)算、進(jìn)制計(jì)算四大功能任務(wù),四個(gè)功能均可采用迭代式教學(xué)法進(jìn)行教學(xué)。為了實(shí)現(xiàn)類的封裝、類的繼承教學(xué)目標(biāo),下面就以算術(shù)運(yùn)算的實(shí)現(xiàn)解釋迭代式教學(xué)過程。
(1)第一次迭代。該環(huán)節(jié)教學(xué)圍繞著掌握基本的C#語言基本結(jié)構(gòu),熟練運(yùn)用各種運(yùn)算符、表達(dá)式以及常用流程控制語句使用,注重培養(yǎng)學(xué)生分析問題、解決問題的能力。因此,第一次迭代的教學(xué)內(nèi)容為使用C#語言的基本控制語句設(shè)計(jì)簡單計(jì)算器的算術(shù)運(yùn)算功能,能夠現(xiàn)輸入兩個(gè)數(shù)和運(yùn)算符號(hào)得出結(jié)果。涉及知識(shí)點(diǎn)主要包括輸入輸出語句的使用,if選擇結(jié)構(gòu)的使用及f語句嵌套使用的程序設(shè)計(jì)基礎(chǔ)。
(2)第二次迭代。該環(huán)節(jié)教學(xué)圍繞著學(xué)習(xí)C#語言的控制結(jié)構(gòu)的應(yīng)用技巧,學(xué)習(xí)運(yùn)用程序結(jié)構(gòu)的調(diào)整來提升程序的執(zhí)行效率,并讓學(xué)生養(yǎng)成程序的行業(yè)命名規(guī)則和程序代碼的編寫規(guī)范。為此,第二次迭代具體的教學(xué)主要采用功能上增加和調(diào)整、代碼上進(jìn)行編碼規(guī)范修改。
功能上進(jìn)行了修改和新增內(nèi)容主要為:將原使用if時(shí),出現(xiàn)每個(gè)條件都要做判斷的多次無用執(zhí)行過程進(jìn)行修改,改為switch判斷分支;新增異常處理try—catch語句,解決數(shù)據(jù)輸入有效性判斷處理,比如增加用戶輸入的是字符符號(hào)而不是數(shù)字、用戶輸入除數(shù)為0等情況。代碼的編寫規(guī)范內(nèi)容主要為:規(guī)范變量名、代碼縮進(jìn)、注釋的使用及其它命名規(guī)范的使用。
(3)第三次迭代。該環(huán)節(jié)教學(xué)圍繞著掌握基本的C#語言基本結(jié)構(gòu),熟練運(yùn)用各種運(yùn)算符、表達(dá)式以及常用流程控制語句使用,注重培養(yǎng)學(xué)生分析問題、解決問題的能力,養(yǎng)成良好的編程規(guī)范。為了解決代碼耦合度過高,重復(fù)率高的問題,實(shí)現(xiàn)可復(fù)用、可擴(kuò)展的程序設(shè)計(jì)思想,需要將業(yè)務(wù)邏輯與界面邏輯分開。涉及知識(shí)點(diǎn)主要為:類的建立,類的封裝及使用等。從而將運(yùn)算過程單獨(dú)提取出來,從而實(shí)現(xiàn)易復(fù)用。
(4)第四次迭代。使用類的繼承知識(shí),把加減乘除等運(yùn)算分離,修改其中一個(gè)不影響另外的幾個(gè),增加運(yùn)算算法也不影響其它代碼。首先定義一個(gè)運(yùn)算類,它有兩個(gè)Number屬性,主要用于計(jì)算器的前后數(shù);然后有一個(gè)虛方法GetResult(),用于得到結(jié)果;然后把加減乘除都寫成了運(yùn)算類的子類,繼承它后,重寫了GetResult()方法。這樣如果要修改任何一個(gè)算法,都不需要提供其它算法的代碼了。整個(gè)程序?qū)㈩惖睦^承、類的虛方法的使用、方法的重寫等知識(shí)點(diǎn)的靈活融合起來。
(5)第五次迭代。在本次迭代過程中,使用簡單工廠的設(shè)計(jì)模式來重新整合程序,用一個(gè)單獨(dú)的類來做這個(gè)創(chuàng)造實(shí)例的過程,從而解決讓計(jì)算器精確實(shí)例化各種對(duì)象的問題。這樣,不管是控制臺(tái)程序、Windows程序、Web程序,PDA或手機(jī)程序,都可以用統(tǒng)一代碼來實(shí)現(xiàn)計(jì)算器的功能。實(shí)現(xiàn)了面向?qū)ο蟮目蓮?fù)用及可維護(hù)的特性。
3 結(jié)束語
C#程序設(shè)計(jì)引入迭代式教學(xué)方法后,內(nèi)容緊緊圍繞著項(xiàng)目的迭代案例開發(fā)逐步展開,每一個(gè)迭代不僅使學(xué)生復(fù)習(xí)以前掌握的知識(shí)點(diǎn),而且使學(xué)生在不斷開發(fā)新功能過程中激發(fā)了其求知欲和創(chuàng)新意識(shí)。學(xué)生的程序設(shè)計(jì)能力均得到了大幅提高,不僅基礎(chǔ)技能扎實(shí),而且掌握了理論和實(shí)踐相輔相成的學(xué)習(xí)方法和技巧。
教學(xué)實(shí)踐證明,迭代式項(xiàng)目教學(xué)能夠有效激發(fā)學(xué)生的學(xué)習(xí)興趣,調(diào)動(dòng)學(xué)生的學(xué)習(xí)積極性,潛移默化地滋養(yǎng)了學(xué)生的編程邏輯思維,有效提高學(xué)生學(xué)習(xí)效果。使學(xué)生的學(xué)習(xí)、技術(shù)和設(shè)計(jì)方法循序漸進(jìn)、環(huán)環(huán)相扣,形成了一條合理的認(rèn)知鏈。同時(shí)對(duì)后繼課程包括整個(gè)專業(yè)課程的學(xué)習(xí)都產(chǎn)生了非常重要的影響。
參考文獻(xiàn):
[1]王艷娟,崔敏,宋建敏.案例式教學(xué)在ASP.NET 動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)中的應(yīng)用[J].科技創(chuàng)新導(dǎo)報(bào),2009(14).
[2]曾愛民,蔣麗波,于順達(dá).采用項(xiàng)目教學(xué)法培養(yǎng)學(xué)生職業(yè)能力的研究與實(shí)踐[J].職業(yè)技術(shù),2009(09):37.
[3]蔣慶斌,徐國慶.基于工作任務(wù)的職業(yè)教育項(xiàng)目課程研究[J].職業(yè)技術(shù)教育,2005(22):46-50.
[4]王艷娟,崔敏,宋建敏.案例式教學(xué)在ASP.NET動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)中的應(yīng)用[J].科技創(chuàng)新導(dǎo)報(bào),2009(14).
作者簡介:高志宇(1979-),男,河南社旗人,講師,碩士研究生,主要研究方向:計(jì)算機(jī)應(yīng)用、嵌入式開發(fā);
作者單位:河南中醫(yī)學(xué)院 信息技術(shù)學(xué)院,鄭州 450046