摘要:本文闡述了面向?qū)ο蟪绦蛟O(shè)計(jì)課程的重要地位,并就如何培養(yǎng)學(xué)生的自主學(xué)習(xí)模式,幫助學(xué)生真正掌握面向?qū)ο蟮能浖_發(fā)技術(shù)提出了一些創(chuàng)新的想法。
關(guān)鍵詞:面向?qū)ο?;自主學(xué)習(xí);教學(xué)改革;程序設(shè)計(jì)
中圖分類號:G642文獻(xiàn)標(biāo)識碼:B
1引言
采用傳統(tǒng)的面向過程的程序設(shè)計(jì)方法開發(fā)的軟件通??勺x性較差,系統(tǒng)的可擴(kuò)充性不高,尤其是后期維護(hù)非常困難。而面向?qū)ο蟪绦蛟O(shè)計(jì)具有抽象、封裝、繼承和多態(tài)性等特征,以此技術(shù)開發(fā)的軟件模塊化程度高,可讀性、可擴(kuò)充性、可維護(hù)性和可重用性都得到極大地改善,代碼結(jié)構(gòu)更為合理,可以直接在程序中映射問題空間的結(jié)構(gòu)。所以面向?qū)ο蟪绦蛟O(shè)計(jì)是一門非常重要的計(jì)算機(jī)專業(yè)必修課程,它是為滿足計(jì)算機(jī)應(yīng)用領(lǐng)域?qū)τ?jì)算機(jī)應(yīng)用人才的需要而設(shè)置的。面向?qū)ο蟪绦蛟O(shè)計(jì)已經(jīng)在各個領(lǐng)域得到了廣泛的應(yīng)用,尤其適用于中等和大型的程序開發(fā)項(xiàng)目。例如,大量事實(shí)已經(jīng)證明,C++能應(yīng)用于C語言曾經(jīng)使用過的所有場合,其效果比C語言要好得多,從開發(fā)時間、開發(fā)費(fèi)用到形成的軟件的可重用性、可擴(kuò)充性、可維護(hù)性和可靠性等方面,都顯示出了面向?qū)ο蟪绦蛟O(shè)計(jì)的優(yōu)越性。通過學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)課程,學(xué)生不僅掌握面向?qū)ο蟪绦蛟O(shè)計(jì)語言的基本詞法、語法規(guī)則,還可以更深入地學(xué)習(xí)面向?qū)ο蟮能浖_發(fā)技術(shù),培養(yǎng)開發(fā)大型面向?qū)ο笙到y(tǒng)的能力、系統(tǒng)分析的能力和項(xiàng)目管理的能力。
但是,學(xué)生的語言類課程往往首先學(xué)習(xí)的是面向過程的C語言,當(dāng)學(xué)生接著學(xué)習(xí)面向?qū)ο蟮腃++語言時,雖然能比較輕松地掌握一些面向?qū)ο蟮幕靖拍钜约昂唵蔚某绦蚓帉懛椒ǎ陂_發(fā)較大的系統(tǒng)時,卻容易受C語言的影響,往往還是從非面向?qū)ο蟮慕嵌热シ治?、設(shè)計(jì)并實(shí)現(xiàn)系統(tǒng)。因此,面向?qū)ο蟪绦蛟O(shè)計(jì)課程的教學(xué)效果不甚理想,讓學(xué)生感覺學(xué)了等于沒學(xué),這對于學(xué)生今后的工作與進(jìn)一步的學(xué)習(xí)是不利的。
如何才能使學(xué)生吸收并創(chuàng)造性地運(yùn)用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,開發(fā)真正的面向?qū)ο笙到y(tǒng)?如何培養(yǎng)學(xué)生的
自主學(xué)習(xí)模式,變被動學(xué)習(xí)為主動參與?如何在教學(xué)過程中充分發(fā)揮學(xué)生的主動性,體現(xiàn)學(xué)生的創(chuàng)新精神?這些幾乎都是講授面向?qū)ο蟪绦蛟O(shè)計(jì)課程的教師普遍面臨的共同問題。筆者結(jié)合自己多年語言類課程的教學(xué)實(shí)踐,尤其是面向?qū)ο蟪绦蛟O(shè)計(jì)課程,以及其他專家的優(yōu)秀經(jīng)驗(yàn),認(rèn)為面向?qū)ο蟪绦蛟O(shè)計(jì)課程的教學(xué)改革應(yīng)重點(diǎn)培養(yǎng)學(xué)生的自主學(xué)習(xí)模式。所謂自主學(xué)習(xí)是一種建立在建構(gòu)主義學(xué)習(xí)理論指導(dǎo)下的教學(xué)設(shè)計(jì)方法。這種理論強(qiáng)調(diào)學(xué)習(xí)是教師指導(dǎo)下的,以學(xué)生學(xué)習(xí)為中心的學(xué)習(xí),知識是通過學(xué)生的主動意義建構(gòu)而不是通過教師向?qū)W生傳播信息來獲得的,教師只對學(xué)生的意義建構(gòu)過程起促進(jìn)和幫助的作用[1]。
2自主學(xué)習(xí)模式的培養(yǎng)
教師講、學(xué)生聽,教師不講、學(xué)生不懂的傳統(tǒng)的灌輸式的教學(xué)方式已經(jīng)無法滿足課程教學(xué)要求,自主學(xué)習(xí)模式培養(yǎng)的關(guān)鍵在于培養(yǎng)學(xué)生樹立依靠自己學(xué)習(xí)的信念,不斷探索適合自己的學(xué)習(xí)方法,充分利用已有的知識基礎(chǔ)和實(shí)際工作經(jīng)驗(yàn),最大限度地發(fā)揮自己的潛能,這主要通過在課堂教學(xué)、上機(jī)實(shí)踐、輔助教學(xué)等各個教學(xué)環(huán)節(jié)進(jìn)行改革得到實(shí)現(xiàn)。
2.1改革課堂教學(xué)方法
傳統(tǒng)單一的課堂教學(xué)手段已經(jīng)不能滿足學(xué)生團(tuán)隊(duì)合作與個性化學(xué)習(xí)的需要,教師應(yīng)積極改革課堂教學(xué)方法,注重采用啟發(fā)式教學(xué),討論式教學(xué),項(xiàng)目驅(qū)動式教學(xué)等多種教學(xué)形式,通過豐富靈活的教學(xué)模式以及直觀生動的教學(xué)課件使教師和學(xué)生充分互動起來。教學(xué)內(nèi)容應(yīng)面向應(yīng)用,不能單純地只講授面向?qū)ο罄碚摚瑧?yīng)重點(diǎn)突出面向?qū)ο蟮能浖_發(fā)方法,并在課堂教學(xué)中適當(dāng)穿插介紹實(shí)用的軟件開發(fā)工具,例如Visual C++。利用多媒體課件使抽象
內(nèi)容可視化,枯燥內(nèi)容形象化和興趣化,例如,使用多媒體課件演示復(fù)雜程序的詳細(xì)執(zhí)行過程或多重函數(shù)的調(diào)用過程。另外,教師還可以鼓勵學(xué)生參與制作、修改和完善教學(xué)課件。采用這種方式,不但使學(xué)生對抽象概念的理解變得容易,一些復(fù)雜的調(diào)用一目了然,而且極大地調(diào)動和激發(fā)了學(xué)生參與學(xué)習(xí)、主動學(xué)習(xí)、相互學(xué)習(xí)的意識和熱情。這些與教材配套的多媒體課件,不僅在課堂上演示,在開學(xué)初就交給學(xué)生,有助于學(xué)生進(jìn)行自學(xué)和復(fù)習(xí),以加深對所學(xué)知識的理解。
學(xué)科教育強(qiáng)調(diào)能力培養(yǎng)和素質(zhì)培養(yǎng),教學(xué)活動是師生雙方共同的研究活動。如今隨著開放源代碼運(yùn)動的開展,我們可以輕易地找到各種優(yōu)秀的面向?qū)ο笙到y(tǒng),獲得它們的源代碼。因此在教學(xué)中可以采用實(shí)例教學(xué),把學(xué)生分成若干組,由各組學(xué)生分別來分析講述他們所找到的各類真正實(shí)用的面向?qū)ο笙到y(tǒng),介紹其中所采用的面向?qū)ο蟪绦蛟O(shè)計(jì)思想及設(shè)計(jì)技巧。鑒于時間問題,學(xué)生可以選擇某一個專題進(jìn)行介紹和討論,例如一個小組負(fù)責(zé)介紹類和對象的使用,一個小組負(fù)責(zé)介紹用面向?qū)ο蠓椒ń⒏拍钅P?,另一個小組負(fù)責(zé)介紹通過繼承實(shí)現(xiàn)代碼重用等。學(xué)生先學(xué)會閱讀理解程序,再試著模仿編寫,從小程序到大系統(tǒng),一步一步地循序漸進(jìn),最終將對面向?qū)ο缶幊逃幸粋€完整的整體認(rèn)識,并初步掌握實(shí)用程序的編制方法以及大程序的設(shè)計(jì)方法,為課程設(shè)計(jì)打下基礎(chǔ)。教師在一旁輔助指導(dǎo),收集學(xué)生遇到的共性問題,集中講解。這樣學(xué)生不再是被動的學(xué)習(xí)者,而是教學(xué)活動的參與者與實(shí)踐者,是學(xué)習(xí)的真正主人。在教學(xué)中,教師最好從學(xué)生的觀點(diǎn)來指導(dǎo)學(xué)生,沒有必要在課堂上講清楚每一個問題,而是應(yīng)該幫助學(xué)生學(xué)會如何自主地學(xué)習(xí),鼓勵學(xué)生自己學(xué)習(xí)課堂上沒有講過的內(nèi)容,讓他們自己找到那些使他們困惑的問題答案。其實(shí)學(xué)生潛移默化學(xué)到的東西要比教師課堂上教給他們的多得多,而且對于自己潛移默化學(xué)到的知識更容易吸收[2]。
2.2調(diào)整實(shí)踐環(huán)節(jié)內(nèi)容
程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,學(xué)生的實(shí)際編程能力是非常重要的培養(yǎng)目標(biāo),加大實(shí)踐環(huán)節(jié)的比重,調(diào)整實(shí)踐環(huán)節(jié)的內(nèi)容,有助于培養(yǎng)學(xué)生獨(dú)立解決問題的能力,以及加深對概念的理解和編程能力的訓(xùn)練。面向?qū)ο蟪绦蛟O(shè)計(jì)不僅僅作為一種語言,更作為一種方法論貫穿于軟件設(shè)計(jì)的各個階段。該專業(yè)課理論和實(shí)踐緊密結(jié)合,理論知識抽象,實(shí)踐方面要以多門專業(yè)基礎(chǔ)課、專業(yè)課為基礎(chǔ),因此普遍被認(rèn)為是較難掌握的程序開發(fā)語言。而且教師在教學(xué)過程中通常容易偏重于理論的介紹,忽視實(shí)踐環(huán)節(jié),因此學(xué)生對于面向?qū)ο蟪绦蛟O(shè)計(jì)的理解多半只停留在書本概念上,很難真正掌握抽象編程的本質(zhì)。
一個完整的面向?qū)ο笙到y(tǒng)通常是由多個完成不同功能的子程序組成的,通常學(xué)生能夠基本實(shí)現(xiàn)各個子程序的功能,但對如何銜接各個子程序,如何組成一個完整的面向?qū)ο笙到y(tǒng)感到困難,缺乏總體認(rèn)識?;诖?,面向?qū)ο蟪绦蛟O(shè)計(jì)課程的實(shí)踐性環(huán)節(jié)應(yīng)該是開放式的,在掌握系統(tǒng)總體構(gòu)成和基本概念、基本方法的基礎(chǔ)上開展實(shí)驗(yàn),系統(tǒng)訓(xùn)練學(xué)生思考問題和解決實(shí)際問題的能力。實(shí)踐環(huán)節(jié)的重點(diǎn)是使學(xué)生在透徹理解面向?qū)ο笏枷氲幕A(chǔ)上,能有多種機(jī)會在不同的情境下應(yīng)用所學(xué)知識,在學(xué)習(xí)的同時積累編程經(jīng)驗(yàn),在解決問題的活動中學(xué)會解決問題,在實(shí)際的鍛煉中掌握面向?qū)ο蠹夹g(shù),能夠進(jìn)行簡單的面向?qū)ο笙到y(tǒng)的設(shè)計(jì),并進(jìn)一步培養(yǎng)學(xué)生開發(fā)大型軟件的能力,積累項(xiàng)目管理的經(jīng)驗(yàn),為今后從事大型軟件開發(fā)及管理奠定基礎(chǔ)。
只是讀別人的程序是難以真正掌握面向?qū)ο蠹夹g(shù)的,那完全是紙上談兵,即使花上許多的時間反反復(fù)復(fù)地讀上很多遍,也難以真正深入地理解它掌握它。相反,如果自己親自動手編寫一個面向?qū)ο笙到y(tǒng),即使只是一個小規(guī)模的系統(tǒng),卻往往能達(dá)到事半功倍的效果。許多實(shí)踐知識的獲得都是上機(jī)操作的結(jié)果,上機(jī)操作反過來又鞏固和促進(jìn)書本知識的學(xué)習(xí)。因此可以將學(xué)生分成若干個團(tuán)隊(duì),隨著課程學(xué)習(xí)進(jìn)度,結(jié)合正講授的面向?qū)ο蟾拍詈图夹g(shù),從簡單到復(fù)雜,循序漸進(jìn)地進(jìn)行設(shè)計(jì),最終實(shí)現(xiàn)一個較大的完整實(shí)用的面向?qū)ο笙到y(tǒng)。教師要適時嚴(yán)格地進(jìn)行監(jiān)督檢查,幫助學(xué)生發(fā)現(xiàn)錯誤,并在課堂上對實(shí)驗(yàn)中存在的典型問題進(jìn)行點(diǎn)評,推薦學(xué)生中有創(chuàng)意的編程,鼓勵學(xué)生的創(chuàng)新精神。教師還要注意各小組內(nèi)學(xué)生的分工情況,保證力量均等,每個小組成員要有強(qiáng)有弱,不能一組全是精英,一組水平全都很差。
教師還可以通過有趣的、有挑戰(zhàn)性的作業(yè)引發(fā)學(xué)生興趣。例如,鼓勵學(xué)生開發(fā)基于Web的面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)系統(tǒng),設(shè)計(jì)并實(shí)現(xiàn)面向過程系統(tǒng)到面向?qū)ο笙到y(tǒng)的自動轉(zhuǎn)換,建設(shè)面向?qū)ο蟪绦蛟O(shè)計(jì)課程教學(xué)資源庫,和教師一起進(jìn)行精品課程建設(shè)等,引導(dǎo)學(xué)生利用具體的面向?qū)ο蠹夹g(shù)來解決實(shí)際應(yīng)用中的具體問題,將面向?qū)ο罄碚搼?yīng)用到實(shí)際的工程實(shí)踐中。例如C to C++系統(tǒng),主要實(shí)現(xiàn)將面向過程的C程序轉(zhuǎn)換為等價(jià)的面向?qū)ο蟮腃++程序,該系統(tǒng)可以幫助學(xué)生更加深入地理解C與C++這兩種密切相關(guān)的語言,理解C++語言絕不是簡單的C語言的“擴(kuò)充”,真正學(xué)會利用面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)來進(jìn)行軟件開發(fā)。對于學(xué)生來說,都愿意學(xué)習(xí)“立竿見影”的知識,因此通過一些與課程教學(xué)內(nèi)容緊密相關(guān)的項(xiàng)目開發(fā),使學(xué)生自己參與分析、決策、設(shè)計(jì)和編碼,可以加深學(xué)生對所學(xué)知識點(diǎn)的理解,較好地將課堂所學(xué)知識與實(shí)踐緊密結(jié)合,做到學(xué)以致用,從而培養(yǎng)他們分析問題和解決問題的能力、創(chuàng)新能力以及團(tuán)隊(duì)合作能力。
對于程序設(shè)計(jì)能力較弱的同學(xué),其實(shí)踐內(nèi)容可以適當(dāng)調(diào)整。例如,可以由教師提供程序源代碼而空缺部分關(guān)鍵模塊,讓學(xué)生自行完成關(guān)鍵模塊的設(shè)計(jì)。由于只需完成部分模塊,學(xué)生能夠集中精力解決關(guān)鍵問題,實(shí)踐難度有一定程度地降低[3]。也可以讓學(xué)生閱讀一個實(shí)際的程序,然后利用面向?qū)ο蠹夹g(shù)擴(kuò)充其功能。這樣就保證了絕大部分學(xué)生都能夠獨(dú)立完成實(shí)踐任務(wù),真正達(dá)到使學(xué)生通過上機(jī)實(shí)踐加深對面向?qū)ο?/p>
理解的目的。學(xué)生在面向?qū)ο笙到y(tǒng)的實(shí)現(xiàn)中還能夠產(chǎn)生成就感,這有助于消除他們對該課程的恐懼,增強(qiáng)學(xué)習(xí)信心,促進(jìn)對理論知識的理解。通過實(shí)際動手,把原理性的抽象知識具體化和形象化,使學(xué)生能較好地消化課堂上、書本中難于理解的概念和方法,對面向?qū)ο笙到y(tǒng)的整個開發(fā)過程有更清晰的理解。
面向?qū)ο蟪绦蛟O(shè)計(jì)的所有特點(diǎn)都是為了便于面向?qū)ο筌浖拈_發(fā),學(xué)生必須學(xué)會從另一角度來思考,避免過程化編程,充分利用面向?qū)ο蟪绦蛟O(shè)計(jì)語言的標(biāo)準(zhǔn)庫資源,實(shí)現(xiàn)真正的面向?qū)ο缶幊?。?jīng)過大量實(shí)踐證明,通過在上機(jī)操作中融入以下練習(xí),可以幫助學(xué)生減少使用面向過程語言的習(xí)慣,逐步掌握面向?qū)ο笳Z言的思維方式和設(shè)計(jì)技巧。
(1) 重新編譯已有的面向過程程序。例如,通過C++編譯器對C程序重新編譯,可以得到許多有益的收獲。因?yàn)镃++的編譯器比C語言的編譯器更加嚴(yán)格,重新編譯時會發(fā)現(xiàn)許多不一致性和一些小的錯誤,通過這項(xiàng)簡單的啟發(fā)式練習(xí),有助于學(xué)生進(jìn)一步了解面向?qū)ο蟪绦蛟O(shè)計(jì)語言。
(2) 重新設(shè)計(jì)面向過程程序的核心部分。例如,通過在某個C語言程序中,加進(jìn)C++的新特性,可以使學(xué)生將軟件的核心部分轉(zhuǎn)向C++,盡快熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)語言的新特性[4]。
2.3建設(shè)網(wǎng)絡(luò)教學(xué)環(huán)境
目前各高校都建立了校園網(wǎng),網(wǎng)絡(luò)以其跨越時間、空間、信息共享、知識更新迅速等特點(diǎn),正深刻地影響著人們的學(xué)習(xí)方式。網(wǎng)絡(luò)使現(xiàn)代信息技術(shù)充分融入到教學(xué)中,實(shí)現(xiàn)了教育的信息化,解決了傳統(tǒng)教學(xué)過程中難于解決的問題,運(yùn)用新理論、新技術(shù)實(shí)現(xiàn)了傳統(tǒng)教學(xué)手段難以完成的教法[1],并有助于幫助學(xué)生進(jìn)行自主學(xué)習(xí)。通過校園網(wǎng)的教務(wù)在線或面向?qū)ο蟪绦蛟O(shè)計(jì)課程教學(xué)網(wǎng)站等網(wǎng)絡(luò)平臺,不僅可以實(shí)現(xiàn)傳統(tǒng)教學(xué)中的課堂講授、問題討論、輔導(dǎo)、答疑等教學(xué)環(huán)節(jié),讓教師充分參與、管理學(xué)生的學(xué)習(xí)過程,還可以為學(xué)生的自學(xué)、復(fù)習(xí)提供豐富的資源,包括課程的教學(xué)大綱、教學(xué)日歷、網(wǎng)絡(luò)課件、教學(xué)錄像、課程設(shè)計(jì)、參考資料,以及個性化輔助學(xué)習(xí)。例如在線自動測試,或針對學(xué)生個體配合教學(xué)進(jìn)度布置、批改作業(yè),并監(jiān)督作業(yè)的完成情況。最主要的是可以提供大量的問題以吸引、加強(qiáng)學(xué)生的參與,使師生之間、學(xué)生之間方便地建立一個實(shí)時與非實(shí)時的通道。
3結(jié)束語
自主學(xué)習(xí)已成為當(dāng)下最新的熱門教學(xué)模式,與傳統(tǒng)的教學(xué)方式比較,它更有利于創(chuàng)新型人才的培養(yǎng),是一種值得認(rèn)真推廣的教學(xué)方法。但自主學(xué)習(xí)并不等于學(xué)習(xí)者身邊沒有教師和各種規(guī)章制度的監(jiān)督。一方面,教師要從計(jì)算機(jī)學(xué)科教育的角度看待面向?qū)ο蟪绦蛟O(shè)計(jì)課程,以學(xué)生為本,充分調(diào)動學(xué)生的積極性,使學(xué)生相信這是一門非常重要的既有理論意義,又有實(shí)用價(jià)值的課程,明白學(xué)習(xí)這門課程的目的不僅僅是為了單純地學(xué)會用某種面向?qū)ο蟪绦蛟O(shè)計(jì)語言寫程序,更是為了提高自己的面向?qū)ο笙到y(tǒng)的分析能力和設(shè)計(jì)能力。另一方面,學(xué)生需要花費(fèi)大量的時間和精力,要在不斷學(xué)習(xí)的基礎(chǔ)上建立新的課程信念和課程價(jià)值,學(xué)會自主學(xué)習(xí),不要過于依賴教師。只有這樣才能使學(xué)生真正學(xué)會運(yùn)用面向?qū)ο蟮姆椒▉碚J(rèn)識問題和描述問題,獲得豐富的學(xué)習(xí)經(jīng)驗(yàn)和實(shí)用的開發(fā)技術(shù)。經(jīng)過幾年來的教學(xué)實(shí)踐證明,我們在采取自主學(xué)習(xí)模式之后,學(xué)生的程序設(shè)計(jì)能力得到了有效加強(qiáng),學(xué)生對該課程教學(xué)的滿意度大幅度提高,隨后進(jìn)行的畢業(yè)設(shè)計(jì)也提升了一個檔次,消除了以往計(jì)算機(jī)專業(yè)的學(xué)生在大學(xué)畢業(yè)后無法適應(yīng)社會,不會編程的現(xiàn)象。
參考文獻(xiàn):
[1] 李越輝,孫踐知,孫繼蘭,張迎新. 基于自主學(xué)習(xí)模型的網(wǎng)上作業(yè)系統(tǒng)[C]. 第二屆大學(xué)計(jì)算機(jī)課程報(bào)告論壇論文集,2006:220-222.
[2] J.Glenn Brookshear. Computer Science[M]. 北京:清華大學(xué)出版社,2005.
[3] 何炎祥,伍春香. 現(xiàn)代教學(xué)理論指導(dǎo)下的“編譯原理”教學(xué)綜合改革[J].計(jì)算機(jī)教育,2005,(3):10-13.
[4] 劉振安. 面向?qū)ο蟪绦蛟O(shè)計(jì)[M]. 北京:經(jīng)濟(jì)科學(xué)出版社,2000.