最近,我們開始學(xué)習(xí)計(jì)算機(jī)圖形學(xué),由于我們專業(yè)是設(shè)計(jì)專業(yè),關(guān)于代碼方面的課程總是淺嘗輒止,一些同學(xué)很苦惱,他們知道我在計(jì)算機(jī)學(xué)習(xí)方面有一定的深入,就跑來問我很多問題,其中一個(gè)普遍的問題就是:“面向?qū)ο蟮降资鞘裁???/p>
其實(shí),在我最早學(xué)習(xí)代碼的時(shí)候,遇到的第一個(gè)難題就是這個(gè),當(dāng)時(shí),我花了很多時(shí)間,通過了各種渠道,才算弄懂了這個(gè)問題。但我花了不少功夫給同學(xué)們講,他們表示并不是太懂。于是回想當(dāng)時(shí)學(xué)習(xí)面向?qū)ο蟮慕?jīng)歷,嘗試把學(xué)到的內(nèi)容提煉出來,講給他們聽,果然有所成效。
第一重境界:擬物,讓概念具象
①什么是面向?qū)ο螅?/p>
收音機(jī)怎么使用?相信大家都會(huì)。但收音機(jī)由什么組成呢?相信大家都不知道了。這便是面向?qū)ο?,?b>使用對(duì)象時(shí),只關(guān)注對(duì)象提供的功能,不關(guān)注內(nèi)部細(xì)節(jié)。
②什么是對(duì)象?什么是屬性和方法?
收音機(jī)由一大堆零件構(gòu)成,被組合和包裝后提供相應(yīng)的功能。故對(duì)象是一個(gè)整體,對(duì)外提供一些操作。
它的外殼是塑料,按鈕是金屬。這就是對(duì)象的屬性。按下其中一個(gè)按鈕就可以播放接收到的聲音,這就是對(duì)象的方法。
③面向?qū)ο笥心男┨攸c(diǎn)?(封裝、繼承、多態(tài),但對(duì)于他們,先只講封裝和繼承)
我們把收音機(jī)包裝起來,不在乎它的內(nèi)部結(jié)構(gòu)。這就好比是封裝,即不考慮內(nèi)部實(shí)現(xiàn),只考慮功能使用。比如說:
class Clock
{
public: //共有成員,外部接口
void SetTime(int NewH,int NewM,int NewS);
void ShowTime();
private: //私有成員,外部無法訪問
int Hour,Minute,Second;
}
我們想改裝收音機(jī),使得它便攜,我們就給手機(jī)加上一個(gè)手柄,這樣得到的東西,擁有收音機(jī)全部的特性和功能,但又多了自己的特性和功能。這就是繼承,即從已有基類上,派生出新的基類。比如說:
classDerive:privateBase1,publicBase2{};
這樣,他們就對(duì)面向?qū)ο笥辛嘶镜母拍?,而且紛紛表示我講的他們都明白了,這讓我很有成就感。但是,很快問題就出現(xiàn)了,他們很快就跑來問各種問題——類和對(duì)象有什么區(qū)別?繼承里面的pubilic、private等到底是什么?……問題一個(gè)接一個(gè),我發(fā)覺并不能一次性有效地解決完,于是我開始反省,我的確用擬物讓概念具象,但面向?qū)ο笫且粋€(gè)不小的知識(shí)體系,想一下子講清楚很難,但概念與概念間沒有產(chǎn)生聯(lián)系,所以他們不能夠自行解決問題,于是我調(diào)整了講法,使得整體的思路更加清晰。
第二重境界:系統(tǒng)圖加講故事,讓概念成體系。

我就先講故事:從前有一群工人,負(fù)責(zé)生產(chǎn)收音機(jī),造出來的收音機(jī)各式各樣,但用的材料和提供的功能是相同的,于是有一天有個(gè)人就造了一臺(tái)機(jī)器,這臺(tái)機(jī)器可以生產(chǎn)無數(shù)臺(tái)收音機(jī)。這臺(tái)機(jī)器就是類,這個(gè)收音機(jī)就是對(duì)象,而收音機(jī)怎么使用呢?(見上第一重境界)……
在這個(gè)故事里,我用了連貫的手法敘述所有的概念,使得他們一目了然,再結(jié)合系統(tǒng)圖,使得他們對(duì)面向?qū)ο蟮挠辛苏w的把握,這樣問問題的同學(xué)越來越少,因?yàn)樗麄兘K于有了自學(xué)的能力。
第三重境界:教學(xué)相長,品物外之趣
經(jīng)過這次的“教學(xué)經(jīng)歷”,我也體驗(yàn)了一盤小老師的樂趣,可以說學(xué)習(xí)十幾年,作為學(xué)生,我們最熟悉的職業(yè)是教師,所以我一直也在思考究竟什么樣的方式才是真正好的教學(xué)方式。我身邊有很多好老師,甘于奉獻(xiàn),循循善誘,他們一直想讓教育回歸本質(zhì)。我想這次的經(jīng)歷或許能帶來某些啟示,即用正確的方式讓學(xué)生了解整個(gè)課程體系,用巧妙的方式激發(fā)他們的興趣和潛能,再讓他們根據(jù)自己的興趣和能力選擇一方面深入學(xué)習(xí),這樣的教育可能才更加接近本質(zhì)。
值得一提的是,后來一個(gè)同學(xué)跑來問我,既然現(xiàn)在都有了造收音機(jī)的機(jī)器了,那我們?yōu)槭裁催€要拼命去學(xué)習(xí)怎么造收音機(jī)呢?
這個(gè)問題很好,我當(dāng)時(shí)沒有立刻回答。我經(jīng)過了一夜的思考,告訴他:“雖然我們有了這么多機(jī)器,但都是別人制造的,我們要想真正的創(chuàng)新,就首先要追本溯源去學(xué)習(xí)原理,這就好比英文雖然有無數(shù)個(gè)單詞,但都是由26個(gè)字母按照一定的規(guī)則排列的,學(xué)習(xí)這些基本的原理,不僅更容易讓我們記住這些單詞,還給我們提供了制造新詞語的能力。同理,計(jì)算機(jī)語言學(xué)習(xí)亦是如此。”
這不就是教學(xué)相長么?
賺到就要給(奉獻(xiàn)),學(xué)到就要教(傳承)。況且,在幫助他人的同時(shí),我們的能力、思想和境界就能更上一層樓!