張海林, 夏傳良
(山東建筑大學 計算機科學與技術學院, 濟南 250101)
C++程序設計是中國高校計算機科學與技術專業普便開設的一門專業基礎課程,一般在第二學期開設。由于本課程涉及到的面向對象編程的相關概念抽象性比較強,學生在理解接受時有一定難度,加之許多大一新生在第二學期還沒有完全適應大學里快節奏學習多門課程的特點,這給本課程的教學實踐中的各個環節都增加了難度。在C++的教學實踐中,文獻[1]提出了不僅要從主觀上對學生進行教育,還要創新性的設計一些符合學生專業特色的實驗來進行教學;文獻[2]提出了基于游戲的C++實驗教學系統;文獻[3]提出程序設計基礎的教學實踐應以提高學習興趣為導向;文獻[4]介紹了面向對象程序設計的教學內容的選擇、與MFC的銜接等;文獻[5]分析了計算機專業學生的程序設計能力的提高路徑;文獻[6]提出以提高學習興趣為導向,培養學生面向對象思維的編程能力;文獻[7]分析了面向對象程序設計教學中存在的問題,提出了針對性的課程群建設、師資隊伍建設等方案。
綜合上述分析及本身的教學體會,本文認為目前C++程序設計課程的教學情況還存在以下問題:
(1)課程偏重理論教學,實驗學時較少。以目前安排的實驗學時而言,無法進行太多實用內容的教學。學生畢業之后就業困難,部分有學習能力的學生設法在畢業前聯系相關的培訓機構進行培訓。
(2)實驗環節安排的內容過于簡單,與實際應用脫節。
(3)受限于教材的選擇,無法選擇案例類書籍作為教材。教學內容不能很好地體現目前的企業需求。
(4)學生還習慣于高中的教育模式,刻苦鉆研和自主學習的能力缺乏,對課程學習中遇到的困難準備不足。一旦遇到困難,往往會逃避、逃課甚至完全放棄。
在計算機科學與技術專業的軟件類課程中,C++程序設計課程起著承上啟下的作用。專業課程結構如圖1所示。本課程接第一學期的C語言及程序設計課程,同時也為后續Java程序設計、算法設計與分析、大數據基礎算法和數據倉庫與數據挖掘等課程的學習打下基礎。
本課程以C++語言為例,主要培養學生面向對象程序設計方面的編程能力。通過本課程的理論學習、上機實踐和課程設計,讓學生熟練掌握C++語言的基本概念和編程方法,能夠獨立運用C++語言編寫程序,為后續計算機軟硬件系統的學習研發打下良好基礎。
C++面向對象程序設計課程,主要介紹了面向對象的編程思想,包括類和對象、封裝、繼承、重載和多態等知識點的編程方法。對于初學者來說,這些重要的概念和思想,理解和掌握起來并不容易。因此在教學過程中,應做到深入淺出、重點突出,并準備容易理解的案例,配合概念的理解。本課程的思維導圖如圖2所示。

圖1 C++面向對象程序設計課程在計算機科學與技術專業課程體系中的地位

圖2 C++面向對象程序設計課程思維導圖
本課程的重點是對C++面向對象程序設計思想的理解和掌握,MFC框架編程不是本課程的教學重點。如果界面編程部分安排太多學時,會影響到面向對象基本編程思想的講解,這不利于學生對基本概念的理解和掌握。本課程僅安排6個課時,來講解MFC的基本概念、框架和編程方法,同時鼓勵對界面編程感興趣的學生課后通過網絡、書籍等途徑繼續學習。
本課程的教學內容、基本教學要求、教學的重點、難點和學時安排情況見表1。

表1 C++面向對象程序設計課程授課教學計劃表
根據表1中對C++課程的理論教學安排,本課程的實驗教學要達到下列教學目標。
(1)熟悉Visual C++ 2015集成開發環境,掌握類的定義、對象的定義與初始化、對象數組、對象指針以及友元的定義與訪問。
(2)熟練掌握類的繼承與派生、派生類成員的初始化、派生類析構函數的實現。
(3)熟練掌握虛函數的定義和實現,多態的實現,純虛函數和抽象類的實現。
(4)熟練掌握常用運算符的重載實現。
(5)熟練掌握文本文件和二進制文件的讀寫操作。
(6)綜合利用類的定義、繼承與派生,對象訪問,虛函數與多態等面向對象特征以及文件操作,實現完整的小型程序。
(7)了解簡單界面程序實現,會利用應用程序向導進行簡單的MFC界面程序設計。
根據上述實驗教學目標,C++面向對象程序設計課程的實驗安排見表2。
為了增加實踐時間,在課程理論、實踐教學結束后,安排了為期2周的課程設計。課程設計中布置了16個C++編程題目供學生選擇并設計,每名同學需在題目1-10和題目11-16中分別選擇一個題目來完成。每個題目除了幾條基本要求外,還有選作要求。如,用MFC框架編程完成的課程設計評為優秀,而完成的源碼中沒有包含模板文件內容的不能評為優秀。同時要求學生在開發過程中,要遵循面向對象程序設計的編程思想,根據所選題目實現面向對象中的封裝、繼承、重載和多態。

表2 C++面向對象程序設計的實驗教學安排表
除了平時教學活動中采用案例教學法、項目教學法,引入微課進課堂等教學方法外,還在以下幾方面進行了嘗試。
鼓勵學生參加程序設計相關各個層次的學科競賽。如,齊魯軟件大賽、ACM程序設計大賽和互聯網+大賽等。制定一套鼓勵學生參加學科競賽的激勵機制,如獲得省級一等獎的團隊獎勵5 000元、獲得省級二等獎的獎勵2 000元等,可以促進學生積極參加此類賽事,以進一步提高學生的理論和實踐能力。
在教學過程中,可開展以下方面做工作,以激發學生的學習興趣。
(1)鼓勵開發圖形界面程序。如果一直建立控制臺應用程序,對C++程序設計的學習興趣就會大打折扣,所以鼓勵學生在上機實踐時盡量建立基于MFC框架的界面程序。
(2)開展編程競賽。編程能力的提高是一個循序漸進的過程,僅憑一個學期的上機實驗的練習達不到掌握編程能力的程度。為了增加實踐教學時間,每年暑假都面向所有本專業學生開展為期2周的集中課程設計。課程設計過程中開展編程競賽,營造出人人愛編程的氛圍,并激勵學生的競爭欲,以達到更好的實踐效果。
(3)強調本課程的重要性。在平時理論和實踐教學過程中,有意識的介紹C++程序設計課程與后續課程之間的聯系,以更好的激發學生的學習積極性和學習興趣。也可以從考研筆試和面試角度強調本課程的重要性。
以往考試都是安排2小時筆試,對實踐環節重視不夠,也未考慮到平時的學習過程。目前的C++程序設計的課程考核更多的參考了實踐教學環節的表現,并將筆試更改為機上考試。
(1) 程序設計考核改革。C++程序設計作為專業基礎必修課程,是一門實踐性很強的課程,考核時應更多的考慮實踐環節的表現。現采取平時成績+期末閉卷上機考試的形式進行考核。總成績100分,其中上課考勤占10%,上機操作部分占30%,期末機試部分成績占60%。
(2) 課程設計考核改革。C++程序設計課程設計教學也需要對考核模式與評價方法進行改革,激勵學生重視創新和實踐。最終的課程設計成績實踐占50%,課程設計說明書占30%,平時成績占20%。
其中課程設計說明書部分的成績由每名同學提交的課程設計說明書來確定。重點考核說明書的內容、格式等;平時成績由平常的考勤確定;課程設計的實踐部分需要通過程序答辯來確定成績。答辯過程中,可以通過現場提問的方式考查學生的綜合分析問題和獨立解決問題的能力,在程序答辯過程中可以考察到學生是否真正參與了課程設計工作。
(3)教學評價 。為了客觀了解教學效果,在授課過程中和課程設計結束后,通過學生評教發現教學中存在的問題。學生評教時,每名同學可以針對教師的授課方式、授課內容、教學效果、存在的問題等提出各自的意見建議。教學辦把這些意見建議匯總后,反饋給對應任課老師,任課老師以此檢查教學中存在的問題并做出相應的改進。
C++程序設計是計算機科學與技術專業的一門非常重要的入門級編程語言,目前在市場上仍然有著廣泛的應用。如何講好這門課,如何切實提高學生的實際動手能力,是每個程序設計課程任課老師應該考慮的問題。本文對C++程序設計課程進行了教學研究,從學情分析、課程定位、教學目標、教學內容、教改措施和教學評價等方面進行了介紹。經過多年教學實踐,這門課程已經基本完善,逐步得到學生的認可,在歷年的學生評教中都得到了優秀的成績。本課程在綜合教學案例的更新和教學內容與市場的對接上還存在不足,將來要在這二個方面繼續完善。