尹鴻峰
摘 要:面向?qū)ο蟪绦蛟O(shè)計(jì)是計(jì)算機(jī)專業(yè)的一門重要專業(yè)基礎(chǔ)課程,讓學(xué)生正確理解類的概念是掌握面向?qū)ο蟪绦蛟O(shè)計(jì)方法的關(guān)鍵一步。文章提出通過使用結(jié)構(gòu)體和類兩種方式實(shí)現(xiàn)相同功能,讓學(xué)生通過對照理解類的使用方法及其與結(jié)構(gòu)體的區(qū)別,從中體會(huì)面向?qū)ο笈c面向過程兩種編程方式的差異,從而引申出類的訪問控制方式等方面內(nèi)容。
關(guān)鍵詞:面向?qū)ο?;類;結(jié)構(gòu)體;面向過程
文章編號:1672-5913(2017)05-0082-03
中圖分類號:G642
0 引 言
面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)是計(jì)算機(jī)專業(yè)的一門重要專業(yè)基礎(chǔ)課程,很多院校一般將其安排在C語言程序設(shè)計(jì)課程之后,并作為C/C++程序高級開發(fā)及Java語言程序設(shè)計(jì)的先修課程進(jìn)行設(shè)置,因此該課程在程序設(shè)計(jì)課程中起著承上啟下的作用,其重要地位不言而喻,但是在教學(xué)過程中,由于學(xué)生在先期的C語言程序設(shè)計(jì)課程中已經(jīng)基本確立了面向過程的程序設(shè)計(jì)思想,面對新的程序設(shè)計(jì)思想,很多學(xué)生難以適應(yīng)新的編程方式,尤其是在入門過程中對類的概念及應(yīng)用的理解。
1 面向?qū)ο笈c面向過程的區(qū)別
面向過程是以函數(shù)為單位實(shí)現(xiàn)的[1],每個(gè)函數(shù)代表一個(gè)獨(dú)立的動(dòng)作,完成一個(gè)獨(dú)立的功能,而完成動(dòng)作的實(shí)體都是被動(dòng)地在函數(shù)間傳遞,實(shí)體和動(dòng)作之間沒有緊密聯(lián)系,實(shí)體只是像提線木偶一樣被動(dòng)地接受加工,目標(biāo)的實(shí)現(xiàn)完全由動(dòng)作的代表——若干個(gè)函數(shù)貫穿完成;而面向?qū)ο笫且詫?shí)體,即對象為單位實(shí)現(xiàn)的[1],每個(gè)動(dòng)作完全由明確的實(shí)體執(zhí)行,實(shí)體貫穿于程序的整個(gè)執(zhí)行過程,目標(biāo)的實(shí)現(xiàn)則是由多個(gè)實(shí)體相互協(xié)作完成,因此面向?qū)ο筮@種設(shè)計(jì)方式更加符合人們的思維方式。
2 類的引入
在課堂講授過程中,如果直接引入類的概念及應(yīng)用方法,難免會(huì)導(dǎo)致部分學(xué)生在理解上與面向過程產(chǎn)生混淆,從而出現(xiàn)概念上的偏差,影響對后面內(nèi)容的進(jìn)一步學(xué)習(xí),因此在引入類的概念時(shí),可以結(jié)合面向過程程序設(shè)計(jì)方法中學(xué)生熟識的內(nèi)容進(jìn)行講解。
C語言程序設(shè)計(jì)是C++語言的先期課程,在學(xué)習(xí)課程時(shí),學(xué)生已經(jīng)對結(jié)構(gòu)體的使用有了一定了解,而結(jié)構(gòu)體與類之間的區(qū)別僅體現(xiàn)在訪問控制方式及行為,即成員函數(shù)的引入方面。因此,引入類的概念就可以借助于結(jié)構(gòu)體來實(shí)現(xiàn),這樣可以讓學(xué)生通過對日常生活中的一些普通事件進(jìn)行編程處理,來觀察兩者之間的區(qū)別,如待處理的學(xué)生信息包括姓名、年齡和成績(包括數(shù)學(xué)、語文和英語3門課程)3種,要求對每位學(xué)生的總成績和平均成績進(jìn)行計(jì)算統(tǒng)計(jì),試通過使用結(jié)構(gòu)體和類兩種方式對學(xué)生進(jìn)行成績分析,并觀察兩者之間的區(qū)別。
1)使用結(jié)構(gòu)體方式。
(1)聲明結(jié)構(gòu)體類型。
struct stud {char name[10]; int age; float score[3];};
(2)定義計(jì)算函數(shù),以計(jì)算每位學(xué)生的總成績和平均成績并輸出。
void CalSum_Avg( struct Stud *s){ …… //中間過程略 }
(3)在主函數(shù)中定義學(xué)生結(jié)構(gòu)體數(shù)組并賦值。
struct stud s[N];
……//賦值過程略
(4)對每位學(xué)生分別進(jìn)行函數(shù)調(diào)用計(jì)算結(jié)果。
for( int i=0; i CalSum_Avg( &s[i] ); 2)使用類方式。 (1)聲明學(xué)生類。 class stud { protected: char name[10]; int age; float score[3]; public: void InitStud();//為成員賦值 void CalSum(); //計(jì)算自己的總成績 void CalAvg(); //計(jì)算自己的平均成績 }; ……//成員函數(shù)實(shí)現(xiàn)部分略 (2)在主函數(shù)中定義學(xué)生對象數(shù)組并賦值。 stud s[N]; for( int i=0; i s[i]. InitStud (); (3)讓每位學(xué)生分別調(diào)用相應(yīng)成員函數(shù)計(jì)算結(jié)果。 for( int i=0; i s[i].CalSum(); s[i].CalAvg(); 教師可讓學(xué)生觀察上述兩種程序設(shè)計(jì)方法在思路上的區(qū)別,體會(huì)面向過程與面向?qū)ο髢煞N程序設(shè)計(jì)思想的不同之處,并討論這兩種設(shè)計(jì)思想中哪種方法更接近人們的行為方式,理解類的定義及使用方法,解釋類的訪問控制方式;此外,還可以融入以下示例作為過渡。 3 用結(jié)構(gòu)體實(shí)現(xiàn)類的概念的過渡 在C++編譯器中,使用結(jié)構(gòu)體代替類,以實(shí)現(xiàn)上述類的功能,讓學(xué)生在應(yīng)用中體會(huì)從結(jié)構(gòu)體向類的過渡過程。 (1)依照類的定義格式,使用結(jié)構(gòu)體方式定義上述學(xué)生類。 struct stud { char name[10]; int age; float score[3]; void InitStud(){ …… }//為成員賦值 void CalSum(){…… } //計(jì)算自己的總成績 void CalAvg(){…… } //計(jì)算自己的平均成績 }; (2)在主函數(shù)中定義學(xué)生結(jié)構(gòu)體數(shù)組并賦值。 struct stud s[N]; for( int i=0; i s[i]. InitStud (); (3)讓每位學(xué)生分別調(diào)用相應(yīng)成員函數(shù)計(jì)算結(jié)果。 for( int i=0; i s[i].CalSum(); s[i].CalAvg(); } 教師可讓學(xué)生觀察這種實(shí)現(xiàn)方法并對比以上3種實(shí)現(xiàn)方式的區(qū)別,分析哪些行為應(yīng)該是公開展現(xiàn)的,哪些是應(yīng)該隱藏的,由此確定哪些屬性或行為應(yīng)該公開,哪些是不能公開的,從而進(jìn)一步解釋為什么需要設(shè)置數(shù)據(jù)訪問控制方式;并理解私有、保護(hù)與公有的區(qū)別,闡述類的封裝與隱藏的意義所在,同時(shí)分析并介紹類與結(jié)構(gòu)體在使用上的區(qū)別。 4 概念的強(qiáng)化 經(jīng)過上述講解,學(xué)生對類的使用及類與結(jié)構(gòu)體在應(yīng)用中的區(qū)別有了一定了解,初步確立了面向?qū)ο蟮木幊趟枷?。為了進(jìn)一步鞏固學(xué)習(xí)效果,需要在此基礎(chǔ)上對上述內(nèi)容進(jìn)行強(qiáng)化練習(xí),如可以布置下一個(gè)任務(wù),要求學(xué)生嘗試在學(xué)生類中增加實(shí)現(xiàn)以下相關(guān)內(nèi)容。 (1)增加分?jǐn)?shù)統(tǒng)計(jì)功能,要求對每位學(xué)生的最高成績及最低成績進(jìn)行統(tǒng)計(jì)。 (2)增加對數(shù)據(jù)成員進(jìn)行修改賦值的成員函數(shù)。 (3)嘗試對學(xué)生的年齡進(jìn)行比較,找出年齡最大的學(xué)生,體會(huì)保護(hù)或私有成員的使用方法,掌握如何對保護(hù)或私有成員進(jìn)行讀、寫等基本操作。 5 結(jié) 語 類的概念是面向?qū)ο蟪绦蛟O(shè)計(jì)方法中最基礎(chǔ)也是最重要的概念,關(guān)系著學(xué)生能否進(jìn)一步理解和運(yùn)用面向?qū)ο蟪绦蛟O(shè)計(jì)課程的后續(xù)內(nèi)容,因此,講好類的入門這一節(jié)課對于學(xué)生能否順利掌握C++編程語言是相當(dāng)重要的。我們對面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)過程中類的概念及應(yīng)用的引入、比較和強(qiáng)化進(jìn)行了一定的探索,并在實(shí)踐教學(xué)過程中取得了比較滿意的效果,加深了學(xué)生對類的理解,為學(xué)生學(xué)習(xí)后續(xù)課程知識奠定了良好的基礎(chǔ)。 參考文獻(xiàn): [1] 譚浩強(qiáng). C++程序設(shè)計(jì)[M]. 2版. 北京: 清華大學(xué)出版社, 2011: 223. (編輯:宋文婷)