王小玲
(上海立信會計金融學院信息管理學院 上海 201620)
C++面向對象程序設計是計算機專業(yè)的核心基礎課,是后續(xù)專業(yè)課程的知識基礎,包括數據結構、操作系統(tǒng)、計算機網絡、數據庫技術等。這些都與程序設計有關聯。目前,C++程序設計教學主要采用了理論和實驗相結合的教學模式。在理論教學部分,學生主要學習面向對象理論。在上機實驗時,學生主要是對所學內容進行驗證。由于學生缺乏大型軟件開發(fā)的經驗,對面向對象的理解不夠深入,加上理論學習比較枯燥,學生在學習過程中存在缺乏學習興趣、編程能力難以提高等問題。筆者經過多年的C++面向對象程序設計教學,從教學方法和手段等方面探討了C++程序設計教學,希望能有效解決上述教學中的問題。[1]
封裝、多態(tài)、繼承是面向對象的三大特征。學生從面向過程轉向面向對象,思維受到限制。很多學生難以順利接受這些概念。筆者通過實踐教學的摸索,發(fā)現多多舉例,尤其是利用比喻的手段讓學生在概念的遷移中掌握理論知識,效果較好。具體舉例如下,在封裝概念的教學中,我以電腦為例,其顯示器以及主機全部被面板包裝(封裝),無法直接操縱內部元器件(私有屬性類外不可訪問)。如果想控制這些部件,只能通過對外開放的面板上的按鈕(公有成員函數),如Power、Zomm、亮度調節(jié)等,而不能直接使用暴力拆解這些設備(類外非法訪問私有屬性)。對其中的描述,對應著的概念已經在括號中給出。我再由此引出封裝的好處以及知識點、術語,學生便易于接受。然后,我再讓學生通過自己的思考舉出類似的例子,促使學生加深對這一概念的理解。友元的理解也可以通過這種方法進行教學。友引申出朋友、閨蜜。我便向學生提問:這些人來拜訪自己,可不可以邀請他們進入自己的私密空間,而不限于客廳這樣的公共場合呢?答案是肯定的。這就是友元的意義所在,可以直接訪問類的私有成員,提高程序效率。在整個教學中,這樣的方法可以運用到很多概念上,效果比單純講解理論以及結論更容易讓學生接受。[2]
C++語法非常重要。如果語法過關,那么編程的出錯率將極大降低,給學生造成的困然也能減少很多,從而有利于學生充滿自信地學習這門語言。由于有C語言的學習基礎,因此,很多新概念的使用完全可以通過類比的方法進行學習。學生接受起來比較快,記得也牢,實踐證明效果非常好。從類這個最基本的概念開始,與基本類型的變量做類比,從變量定義、初始化、運算、輸出這幾個環(huán)節(jié)做類比,學生便能輕松掌握對象的定義、對象的賦值、對象成員變量的輸出。
int a;//定義
a=5;//賦值
int b=sqrt(a);//運算
cout<<b<,endl;//輸出
Studnt s;//定義對象
s.setvalue(“Wang”,18);//對象賦值
//此處空白
s.show();//對象成員變量輸出
指針在C++中的地位非常重要,也非常容易出錯。此處也可以與變量定義、初始化、運算、輸出這幾個環(huán)節(jié)做類比,輕松、正確地使用指針。
Student s(“Wang”,18),*p;//定義
p=&s;//指針賦值
p-> reset(“Wang”,19);;//運算
p->show();//輸出
每個概念的引入和學習都可以通過對經典案例的深入學習、反復研究,達到舉一反三、提高學習效率的目的。我們要給予這些案例足夠的重視,而不急于全面展開,陷入題海戰(zhàn)術。以數組為例,其經典的案例就是排序算法。在C++中,又加入了指針、對象的概念,我們可根據對象的某個屬性,對對象進行排序。例如,對學生對象按照成績降序排序。搞清楚這個案例,學生便能極大地提高綜合運用上述概念的能力。抽象類與虛函數的經典案例是幾何圖形的繼承派生層次問題。這個問題非常好理解,對何時使用抽象類、虛函數給出了非常好的示范。學生只要吃透這個程序,遇到類似問題就可以遷移類比,很快模仿出正確的代碼。類似的還有靜態(tài)成員,多以班級學生總分、平均分為例。按照同樣的思路,教師可給學生講透如何分析出其中的靜態(tài)數據成員,如何定義,在哪里初始化,為了訪問靜態(tài)成員變量該如何設計靜態(tài)成員函數,為什么靜態(tài)成員函數不能訪問非靜態(tài)成員變量等等。那么,學生對這個知識點的掌握就可以過關了。在實操過程中,教師可以一邊寫代碼,一邊引入概念,這樣學生的印象才會更加深刻。另外,教師可將編譯錯誤反饋給學生,并提出問題,從而引導學生思考和接受新的知識。[3]
筆者結合多年C++面向對象程序設計的教學經驗,針對理論多、理論枯燥的問題,就如何開展更加有效的教學展開探討,希望能提高教學效果,提高學生的學習效果。