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