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