


摘要:面向對象是隨著GUI迅速發展起來的編程技術,如何組織好面向對象課程的教學,是近年來高等教育的熱門話題之一。本文結合面向對象程序設計課程的教學經驗和建構主義學習理論,針對面向對象程序設計技術的特點,提出螺旋式遞進案例教學法。實踐證明,該教學方法能夠激發學習者的學習興趣、提高信息技術類課程的教學質量。
關鍵詞:案例教學法;面向對象;程序設計;C++語言
計算機區別于其他計算工具的根本特征是“存儲程序”,計算機本質上是“程序的機器”,程序設計能力在計算機學科知識體系中具有核心地位。因此,程序設計作為計算機及其相關專業的一門重要核心課程,其教學質量直接影響到后續專業課程的學習和畢業生未來的發展。鑒于程序設計課程的基礎性和綜合性,如何設計好教學過程以增強教學效果,培養學生的編程能力和實際動手能力以適應社會的需求,始終是教師、學者和專家關注的問題。面向對象編程技術是一個教學難點,為此,很多教育工作者在實踐中不懈努力,摸索出一些經驗,提出不少有價值的見解[1-6]。
筆者結合多年從事程序設計教學的經驗與體會,對程序設計類課程的教學特點和方法做了研究,并在近年教學實踐基礎上,探索如何將案例教學運用于面向對象的程序設計教學,以螺旋式遞進分解子任務的方法展開案例教學內容,在有限的學時內收到較好的教學效果。
1面向對象程序設計課程教學中存在的問題
1.1面向對象方法的特點決定了傳統教學法的不適宜性
面向對象程序設計方法作為設計基于GUI(Graph User Interface)軟件系統的一種新方法,不僅實踐性和技術性較強,包含的新概念、新名詞也較多,諸如繼承和派生、多態、重載、消息、事件驅動、模板,等等。由于其思維方式和知識結構的變化,傳統的羅列概念語法、編程舉例講解、練習驗證鞏固的三部曲灌輸型教學法容易使學習者從一開始就感覺面向對象既抽象、又龐雜,易產生畏懼心理,而且難以體會到面向對象程序設計方法的本質,導致實際開發能力嚴重不足。
1.2現有教材體系不利于培養學習者的創新思維和系統觀
面向對象程序設計方法對編程者的系統觀念、全局觀念要求較高,而且在面向對象的軟件開發過程中,對團隊協作配合能力要求較高。但是從現有的教材體系來看,基本都是按照知識點分章節按部就班組織學習內容,各章節的實例不連貫,且很多例子與實際求解問題無關,僅僅是為了說明某個知識點或者原理而設計的代碼。這種短小精悍的例子難以貫穿面向對象程序設計方法的大部分內容,進而導致學習者在學習過程中只見樹木,不見森林的片面性,也難以形成軟件工程人才應具備的科學的系統觀。
1.3在大多數高校的培養計劃中屬于小學時課程
對于程序設計課程而言,其特點是更新快、內容多、課時少。所以按照傳統的講授法和系統的學習方法,難以在小學時內達到課程的教學要求。
傳統的系統學習和講授有許多缺點,它偏重知識的灌輸,重理論輕實踐,以教師為中心,以單項講授為主,是代理式的學習方法,培養出的學生實踐能力不足,不能滿足當前社會對創新型人才的需要。雖然近年來教學方式有所改變,但受傳統教學影響,教學內容仍然是理論與實踐相脫節,課堂教學空洞、呆板,缺乏吸引力,束縛學生的思維發展且不能發揮學習者的潛力。
2案例驅動教學法
所謂案例就是為了一定的教學目的,圍繞選定的一個或幾個問題,以事實或實際情境為素材對某一實際情境的客觀描述。
案例教學就是以案例為基本素材,將學習者引入一個特定的真實情境中,通過師生、生生之間雙向和多向互動、積極參與、平等對話和研討,從而重點培養學習者的批判反思意識及團體合作能力,促使學習者充分理解問題的復雜性、變化性、多樣性等屬性的重要教學形式[7-9]。案例教學是近年來倡導的主流教學方法之一,它能很好解決理論與實踐的銜接問題。
在案例教學中強調學習者的參與和師生間的互動。情境性、互動性、實踐性是案例教學的基本特征。由于案例教學法自身的特點,決定了案例的好壞直接影響到教學的效果及質量。所以案例的選擇要做到精、夠、深,同時還要注意到量和規模的控制。
3螺旋式遞進案例教學法
螺旋式案例教學法是指教師根據對教學內容的理解,將精心選擇的案例以知識點的逐漸遞進為原則,分解為環環相扣的子任務,每個教學子任務的教學過程設計,均以學習者建構知識點為目標,采用循序漸進的方式展開。
螺旋式遞進案例教學法以案例為素材,從學習者已有的知識能力為起點,不斷提出新的目標和子任務,又以新任務的解決和新知識點的建構作為新的起點,引出下一個子任務。整個教學過程由若干個循環依次提升所形成的螺旋組成,其中的每一個循環如圖1所示。
這種由淺入深、層層遞進、螺旋式上升的案例教學法容易吸引學習者注意力,并且,由于設計的子任務能夠自然引入新知識,學習者總是可以從一個比較容易解決的已熟悉的內容進入到新知識點的學習過程中,所以學生興趣高、主動參與度好,絕大部分同學能夠跟上教師的進度。同時,通過不斷地探索每個簡單子任務的求解過程,使學習者能夠體驗到勝利的喜悅,從而產生學習的成就感,進而轉化為學習的動力和源泉。
由于教學時數的限制和案例教學本身的特點,同時考慮到教學內容及學習者的特點,以實用、夠用為原則,精心選擇三個案例,以C++語言為依托,完成面向對象程序設計方法的基礎內容教學。
4螺旋式遞進案例教學法的教學設計
4.1精心選擇案例
案例1:幾何形狀的面積和體積。
案例2:學生成績管理系統的設計與實現。
案例3:員工管理系統的設計與實現。
為了達到教學目的,每個案例的側重點不同,專門針對面向對象技術的特點而設計。案例1重在面向對象基本知識點的理解;案例2側重于批量數據的處理和文件操作;案例3強調設計較大型軟件系統時的建模方法、以及利用const、static等修飾符處理細節問題的技巧。
本文以案例1為例說明螺旋式遞進案例教學法的具體實施過程。
4.2合理安排螺旋式遞進子任務
將案例分解為一個個循序漸進的子任務,每個子任務的設計以能引入新的課程內容為益,且預留較強的擴展空間。
案例1的子任務按照層層深入、逐漸提升知識點的原則依次設計。如表1所示。
4.3課堂組織實施
螺旋式遞進案例課堂教學的基本組織過程如下。
(1) 教師提出學習目標,引入案例明確任務,針對案例分解子任務。
(2) 分析和求解子任務。這是螺旋式遞進課堂教學的關鍵環節,每個子任務的學習和求解依賴于前一階段的學習成果,各個子任務的知識點之間構成層層遞進的環鏈關系。子任務的求解過程以層層遞進、螺旋式展開。具體可以細化為:利用已知的方法求解子任務,找出舊方法存在的問題和矛盾,分析矛盾和案例,啟發學生思考并解決問題,教師引導拓展,提出新的問題和矛盾,解決新的矛盾,總結知識點和它們的用法,通過學生實踐鞏固和升華。如圖2所示。
4.4案例1的教學過程和實施
(1) 案例引入。
任務1對于已經具備一點程序設計基礎的學習者來說,非常簡單,只用順序結構和簡單的幾行代碼即可求解。但是此時教師可以提出,雖然短短幾行可以解決這個問題,但如果需要反復求不同圓的圓面積,那么代碼幾乎不能重用,此時可以用兩種方法解決:函數或者類。于是,自然地引入使用類的一種解法,類的定義如下:
class Circle {
public:
double R;
double area(){
return 3.14159*R*R;
}
};
(2) 尋找問題和矛盾。
教師繼續引導:該程序雖然使用類求解,但是其中沒有任何OO(Object–Oriented)思想,對象的所有內部細節對外都是可見的,數據的安全性不強,而且,對于外部用戶來說,他必須了解半徑這個數據成員在類內部的標識符名稱,否則無法使用這個類。
(3) 引導拓展新的方法。
如果利用面向對象的思想求解該題,那么我們必須換個角度來思考。對于任務1,具體的某個圓可以看做是一個實物,即對象。如果能夠精確描述這個實物,那么,不論需要處理或求解多少個圓面積,程序中只需奉行“拿來主義”。根據求解的側重點,這一類對象的屬性就是半徑,行為就是計算面積,一般來說,我們不希望外界能夠訪問屬于對象自身的一些數據。因此,可以定義一個與前述不同的類Circle,類的定義如下:
class Circle {
public:// 定義對外接口
void set_data(double r);
void displayArea();
private: // 封裝部分數據和行為
double m_R;
double calculateArea(void);
};
(4) 知識點的回顧與提升。
根據類Circle的定義分析用private實現封裝的方法及好處,以及封裝之后設計接口的技巧,同時指出,利用面向對象的程序設計方法解決問題時,是以實體作為處理的基本單位,而不是描述實體的數據,這是和面向過程的程序設計方法所不同的。
(5) 提出新矛盾引入新任務。
緊接著,可以利用學習者面對十幾行代碼持有的疑惑,指出發現的新問題:簡單的問題卻編寫了很長的代碼,似乎將問題復雜化了。
但是,對于前兩種解法來說,在求圓柱體積時必須要重新將求圓面積的代碼重復寫一遍,出現了代碼冗余。而對于第三種做法,只需要在其基礎上進行類的派生和繼承,就可以復用Circle類中計算圓面積的代碼。
(6) 講解分析遞進子任務2。
給出圓柱體類的定義,使之從Circle類繼承半徑和計算圓面積,像前文一樣分析其優點,并總結繼承和派生的使用要點。
(7) 引導拓展提出新任務3。
如果繼續求解其他一些幾何圖形的面積,諸如三角形面積,長方形面積,或球體積,圓柱體體積等,一般希望對外部用戶只提供一樣的接口就能夠完成相似的操作。由此,自然地引出抽象類,多態等概念,而且使學生輕松了解了什么是多態,以及為什么使用抽象類等知識。
(8) 知識點的總結與提升。
課程進行到這里時,大部分面向對象的基本概念已經學習完畢,從類的定義到繼承和派生,多態和重載,抽象類等。在學習者主動參與,分析和解決了問題之后進行分析和總結,將習得的新知識系統化、條理化,從而使學習者的理解得到升華。
在新知識得到總結和鞏固之后,可以進一步提出新的子任務4,就是當幾何圖形的數據已知時,可以在聲明對象時初始化,然后引入構造函數、析構函數等。
在案例1的處理上,始終以問題為導向,通過提出問題,促使學習者卷入學習;通過引導學生探究,促使學生積極思考。在各個螺旋式漸進子任務的設計中,為保證學習者思維的連貫性,將構造函數、析構函數等內容后移,這樣,反而使得整個課堂節奏緊湊,內容易于理解。這也是螺旋式漸進教學法的好處,即思維連貫,難點分散。
根據案例1的教學過程設計,通過對教學內容和知識點的螺旋式遞進安排,使得很多比較抽象的概念和知識簡單化,使學習過程成為一個不斷主動探索完成任務的過程,并且,這種層層深入、逐漸提升的方式給學習者留下深刻印象,學習者在較短的學時內完成了學習內容,且效果良好。教學實踐證明,這種教學方法值得在信息類課程中推廣。
5螺旋式遞進案例教學法實施過程中易出現的問題及對策
(1) 案例選取不合理。
案例如何選取,選擇的規模如何控制,以及案例教學的具體實施過程都是教學中遇到的新問題。案例選擇不好,其原因要么是案例中包含的新知識太多,要么是不能完全闡述教學計劃內容。幾十年來,傳統教學法沉淀了不少優秀的教學用例,隨著案例教學法在信息類課程中的推廣,我們也急需設計和積累這方面的教學案例。
(2) 遞進子任務分解不合理。
這是分解子任務的關鍵和難點所在。由教師分解后的子任務太小或太大。難度太小不利于課程內容層層深入式展開,難度太大則授課進度緩慢,課程內容容易被淡化。因此,教師要根據學生特點和教學目標,以夠用、實用為原則,循序漸進,適當分解。
(3) 子任務中引入和展開的知識點太多。
這是教師在講授子任務時,受傳統教學法影響,而最容易走入的一個誤區。一個子任務求解過程涉及的知識點太多,學習者會感到內容龐雜且無所適從。因此,教師在備課時,要仔細分析,認真取舍,深刻把握和界定難度,引領學生逐步認識面向對象的精髓。
6結語
在程序設計課程教學法經歷了傳統的講授法、“任務驅動”法等教學模式后,本文以建構主義理論為依據,結合實際教學經驗提出一種新的“螺旋式遞進案例教學法”,它要求教師認真做好準備,充分發揮課堂的主導作用,以案例為驅動,將案例按照螺旋式遞進關系適當分解、細化,并以分解后的子任務為線索展開教學。實踐證明,該教學方法能有效激發學習者的學習興趣和實踐積極性,在較短的學時內能完成原定的教學任務,顯著提高程序設計類課程的教學效果和質量。
參考文獻:
[1] 賀海暉,石林祥.“面向對象程序設計”課程建設的實踐與探索[J]. 計算機教育,2009(10):37-38.
[2] 王桂平. 基于實訓項目的面向對象程序設計課程教學[J]. 計算機教育,2009(13):191-193.
[3] 張麗梅. 案例教學法的研究與教學實踐[J]. 黑龍江教育:高教研究與評估,2006(03):51-52.
[4] 李長榮,吳迪. 軟件工程專業程序設計基礎課程教學的研究[J]. 計算機教育,2009(13):140-142.
[5] 張東生,李玉玲. 面向對象程序設計的教學研究[J]. 河南大學學報:自然科學版,2002(03):107-110.
[6] 朱清華. 面向對象程序設計的教學改革[J]. 教書育人,2005(11):43-44
[7] 梁濤. 建構主義學習理論在C程序設計教學中的應用[J]. 新疆師范大學學報,2007(2):117-120.
[8] 陳洪東, 劉思琦. 案例教學法及應用[J]. 科教文匯(中旬刊),2009(01):95.
[9] 戴維#8226;加文,王公龍. 創造案例教學:為了適應現實世界的專業教育:哈佛大學戴維#8226;加文教授關于21世紀案例教學的新思考[J]. 黨政論壇,2009(06):57-59.
Teaching Research with Spiral Case-task to Implement Object-oriented Pogramming Courses
YANG Zhao-xia
(Department of Software Engineering, Lanzhou Jiaotong University, Lanzhou 730070, China)
Abstract: The programming techniques of object-oriented developed rapidly along with GUI.How to organize teaching process of object-oriented curriculum is one of hot issues in the fields of higher education in recent years.In this paper, aimed at the object-oriented programming technology features,one teaching method of spiral case-task has been put forward according to our teaching experience and constructivist learning theory.It has been proved by practice that the teaching methods of spiral case-task could stimulate learners interest in learning and improve the quality of education about courses of information technology.
Key words: teaching with case-task; objected-oriented; programming; C++ language
(編輯:郭小明)