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