張曉民 張 楓 李 博南陽理工學院軟件學院 河南南陽 473004
?
面向工程應用的C++程序設計實踐教學探索
張曉民 張 楓 李 博
南陽理工學院軟件學院 河南南陽 473004
摘 要:C++程序設計是應用型本科院校計算機相關專業(yè)一門非常重要的專業(yè)基礎課,該課程的學習效果直接影響后續(xù)專業(yè)課的學習以及相應的職業(yè)能力培養(yǎng)。目前C++程序設計課程中的實驗多為驗證型和習題型,缺乏工程性和趣味性,難以激發(fā)學生興趣。為此設計了以工程應用為主導的基礎和工程應用實驗,采用課堂和課外相結合、教師驗收和學生答辯相結合等教學、考核方式,并結合應用類型的課程設計,讓學生在掌握知識的同時,運用所學知識和方法解決實際問題。實踐表明,這種方法不僅提高了學生運用C++語言進行程序設計的能力,而且加強了學生的工程實踐,取得了良好的教學效果。
關鍵詞:C++程序設計;工程實踐;實踐教學;教學改革
C++程序設計是計算機相關專業(yè)一門核心專業(yè)基礎課程,具有很強的實踐性,其主要目的是培養(yǎng)學生運用C++面向對象的技術和方法進行基本程序設計的能力,是后續(xù)面向對象軟件分析、設計等專業(yè)課程的重要基礎[1,2]。絕大多數(shù)高等院校在進行面向對象程序設計教學時,采用了C++程序語言,不僅因為C++具有歷史長久、應用廣泛、支持所有主流系統(tǒng),而且C++對于面向對象技術的實現(xiàn)具有完整和嚴密的技術體系[2]。正是這一完整和嚴密的體系使得學生學習起來倍感困難,對于各類概念和方法,也難以掌握。
鑒于此,C++程序設計的實踐教學多以知識詮釋型、技術驗證型、習題型的獨立小實驗為主,最后輔以綜合性的實驗項目,目的在于讓學生更好地理解基本概念和語法知識,但學生的語言運用能力卻未能自始至終地得到體現(xiàn)[3],造成很多學生只會看程序,卻不會寫程序的窘境。筆者通過分析《C++程序設計》實踐教學中存在的這些問題,提出了一種面向項目應用的實踐教學模式,充分體現(xiàn)了課程的實踐性,而且對實踐教學的組織和考核也進行了大膽的探索和改革,形成了較為完整的實踐教學體系。
結合C++程序設計課程特點,以工程應用為主線,采用循序漸進的方式,對實踐教學的內容進行了全新的設計,摒除了驗證型和知識型的實驗。整個實踐教學體系以工程項目為主,突出實驗的工程性與實踐性,將工程實踐、團隊合作貫穿于整個教學過程[4]。其好處是不僅有效訓練和提高學生的工程能力和設計能力,而且充分調動了學生的積極性和參與度。
1.1 選擇專業(yè)開發(fā)平臺
對計算機及相關專業(yè)來說,C++程序設計無疑是最重要的一門專業(yè)基礎課程,學生在學會基本程序設計方法的同時,也要能運用C++編程知識解決一些實際編程問題[5]。不僅如此,學生還應該對計算機體系的操作和體會有一個更為深刻的認識。鑒于此,試圖從以下幾個方面實踐教學體系進行構建。
由于Windows操作系統(tǒng)的易用性和界面的直觀性,使得Windows大行其道,深入人們日常工作和生活的方方面面[6],高等學校的計算機教育也不例外。針對C++程序設計這門課程,絕大多數(shù)高校都是采用Windows平臺下的Visual C++編譯器作為開發(fā)平臺。
考慮到學生專業(yè)為計算機類,因此對開發(fā)平臺提出了更高的要求,經過權衡,確定采用更為專業(yè)的Linux操作系統(tǒng),開發(fā)工具采用Code::Blocks或者vim和g++工具,其優(yōu)勢表現(xiàn)在:開源項目,不需要付費;學生盡早接觸更為專業(yè)的Linux平臺。
1.2 構建基于項目的實驗內容
根據(jù)理論教學進度,采用循序漸進、逐步推進的方式,構建一個不同層次、階梯式的項目群。上一階段工程項目是在下一階段工程項目的基礎上,并且融入新的知識單元,形成一個由簡單到復雜、由模擬到真實的環(huán)環(huán)相扣的工程化培養(yǎng)過程。
1.2.1 實驗項目總體結構
在C++程序設計知識模塊結構中,在重點知識單元設計專門的工程訓練項目,并貫穿各個教學環(huán)節(jié)。隨著時間推移,項目中所涉及的C++內容逐步增多。這種實踐結構能很好地訓練學生運用C++解決實際工程問題的能力(如圖1所示)。
圖1 實驗項目與C++知識的關系
實驗教學所設計的工程訓練項目以實際應用為主,其目的在于:(1)讓學生在工程實踐中逐步掌握C++面向對象的基礎知識;(2)通過工程項目訓練讓學生更好地理解C++程序設計語言和C語言相比,其優(yōu)越性所在,如代碼復用、繼承、多態(tài)等;(3)培養(yǎng)學生工程實踐應用和獨立解決實際問題的能力。
1.2.2 實驗項目學時安排與教學要求
所設計的5個實驗項目的具體要求和教學安排如下。
(1)小學生算術運算練習軟件
課內學時:4學時,課外學時:3周(不少于12學時)。
具體教學要求:①編寫一個小學生算術運算練習軟件,每一道算式的要求是:完成加減乘除;加減為100以內的數(shù);乘除為乘法表里的數(shù);被減數(shù)大于減數(shù);除法要求能整除;被乘數(shù)小于乘數(shù)。②程序能夠記錄做錯的題目,并能在下一次做題時,有針對地選擇上次的錯題進行專門練習。③每道算式出現(xiàn)是隨機的。④軟件界面要求直觀并便于操作。
(2)平面幾何圖形及關系
課內學時:4學時,課外學時:3周(不少于12學時)。
具體教學要求:①定義四個類:Point,Line,Triangle,Quadrangle。Point功能:一是移動一個點;二是顯示一個點;三是可計算這個點到原點的距離。②Line功能:一是計算點到直線的距離;二是直線的斜率;三是判斷兩條直線的關系:平行、相交(交點坐標)、垂直。③Triangle功能:一是三點能否構成三角形;二是判斷三角形是等邊,等腰或者是直角;三是計算三角形的面積。④Quadrangle功能:一是判斷四點能否構成四邊形,并判斷其是凹還是凸;二是判斷四邊形是否是等腰梯形;三是判斷四邊形是否是平行四邊形、菱形、矩形;四是計算四邊形的面積和周長。
(3)快樂牧場游戲
課內學時:4學時,課外學時:3周(不少于12學時)。
具體教學要求:①根據(jù)給定的牧場場景(牧場主、狼、牧羊、獵狗、狼狗、奶牛),構建牧場的類層次結構,實現(xiàn)農場管理,模擬快樂牧場游戲。②必須使用虛基類和虛函數(shù)。③使用繼承和多態(tài)實現(xiàn)系統(tǒng)的靈活性和多樣性。
(4)課題研討
課內學時:4學時,課外學時:1周。
具體教學要求:①在教學組織中,打破傳統(tǒng)的以教師為主導的教學模式,采用以學生為主導的自主學習方式,充分調動學生的參與度和學習的主動性。②學生通過自主學習和查閱資料,完成一個主題的探討和研究。③學習討論的主題范圍必須是課堂上所沒有學習過的,以保證學習過程的探究性和學習內容的新穎性。④學習過程仍以小組進行,結束時,每個小組輪流向全班學生交流分享。
(5)綜合項目實戰(zhàn)
課內學時:4學時,課外學時:3周(不少于12學時)。
具體教學要求:①利用所學的C++知識,編寫一款軟件,解決個人生活碰到的實際問題,題目自定。②項目必須要有應用價值,解決某個實際問題。③必須應用所學的面向對象的編程方法和技巧。④要有較為規(guī)范的軟件文檔(問題描述、問題分析、軟件設計、測試及應用)。
1.3 面向應用課程設計在課程結束,一般都需要安排為期1周到2周的課程設計,用專門時間進一步鞏固知識,提高學生運用C++面向對象技術解決問題的能力[7]。為了和工程應用的實驗體系配套,課程設計選題也是以實際應用為主,避免空泛課題,具體選題如表1所示。
表1 面向應用的課程設計選題表
在課程設計中,對每一個題目都提出下列的基本要求。
(1)要求利用面向對象的方法以及C++的編程思想來完成系統(tǒng)的設計。
(2)要求在設計的過程中,突出C++語言的類和對象的特征,以多個類實現(xiàn)對每一個子功能的封裝;至少定義4個類,每個類包含各自的屬性和方法,完成類的詳細定義,并建立清晰的類層次;對于復雜算法要求畫出清晰的程序流程圖。
(3)進行界面設計,實現(xiàn)和用戶的友好交互。
(4)所有數(shù)據(jù)和信息均需要保存在磁盤文件中。
確定了以工程應用為主線的實踐教學體系后,在實施和考核環(huán)節(jié)中也要采用相應的工程化和系統(tǒng)化的方法,才能達到理想的教學效果。既可以調動學生學習實踐的主動性和積極性,又可以讓學生將所學運用于實踐,在實踐中鞏固和提高所學知識和技能[7,8]。為培養(yǎng)學生運用面向對象知識分析和解決實際問題的能力提供有效的途徑和檢驗手段。
2.1 實驗教學實施
在實踐教學活動中,為了讓學生對軟件開發(fā)規(guī)范化方法、軟件開發(fā)流程、團隊合作、文檔寫作與成果展示、口頭書面交流等工程實踐環(huán)節(jié)有一個初步的體驗和認識,對傳統(tǒng)一人一題的封閉式做法進行變革,采用多人共同完成一個小型課題的方式,時間分配上也不拘泥于課堂學習,給學生以充分的信任和自主,以鍛煉學生的團隊和工程能力。
2.1.1 以自由分組形成工程化團隊
在實施過程中,采用項目化管理。項目實施以小組進行,每組推選組長1名,成員3~5人,成員之間要有明確的任務和分工。在實施不同項目時,各個小組必須進行重新劃分,保證學生在不同的項目中可以擔任不同的角色,擴展學生交流和溝通的范圍,以訓練每個成員的溝通能力。項目組長負責項目進度、成員分工、成員考核以及項目質量。項目的考評也是以項目組為單位,也就是分級考評。
2.1.2 教學模式采用課堂與課外相結合
受翻轉課堂的啟發(fā),該實驗教學采用課內和課外相結合的方式,不僅解決了C++程序設計實驗學時緊張的問題,而且充分調動了學生的積極性。
(1)課堂的任務是下達任務、分析設計、輔導答疑和項目驗收。
(2)課后的任務是項目的編碼、測試、總結和報告編寫。
2.2 實驗教學的考核
在構建實踐教學考核體系之前,首先需要明確評價的目標和標準,才能采用更為有效的方式對教學目的和效果進行評價?;诠こ虘玫膶嵺`教學,評價考核的目的在于檢驗學生運用知識解決問題的程度和能力[4,9],而不是知識記憶。評價標準是知識的運用、工程化、規(guī)范化的程度以及項目的應用價值等因素。
2.2.1 考核內容
考核的主要內容包括:程序功能是否完善、有沒有創(chuàng)新和創(chuàng)意、程序代碼是否正確、代碼結構是否清晰、編程風格是否規(guī)范、陳述和表達是否清楚、對程序代碼的理解是否正確、對C++基礎知識是否掌握、軟件界面是否友好、程序注釋是否明了以及教師隨機提問等方面。
2.2.2 考核方式
工程實踐以學生演示和答辯為依據(jù),從工作量、實用性、創(chuàng)新性、合作性和規(guī)范性等多個角度進行考核。根據(jù)項目類別和規(guī)模的不同,考核方式主要采用以下3種方式。
(1)陳述答辯
由任課教師以答辯形式檢查和驗收學生小組的項目,主要考查學生工程能力、知識綜合運用以及解決實際問題的能力。
(2)作品演示
每個項目組向全體學生演示所完成的項目作品,主要考查作品的設計思路和主要算法以及作品的可用性、新穎性以及應用價值。
(3)學生主導的討論
學生主導的討論以任課教師評判為主,從內容的透徹性、實用性、條理性以及表現(xiàn)的活潑性等方面進行考評。
2.2.3 考核管理
借鑒項目管理中的考評方法,實驗成績評定采用分級方式,一方面符合工作實際,另一方面減少了任課教師的工作量。具體來說,分為兩個級別:(1)組長/項目考核。由任課教師對項目進行評定,并作為組長成績。(2)成員考核。由各小組長根據(jù)組內成員的表現(xiàn)給出每個人的成績權值,組長權值為1,其余成員權值不能高于組長。
在實踐課程考核上,通過加大實踐的過程和能力考核力度,完善考核體系,建立以培養(yǎng)學生工程和實踐能力為主的教學評價體系,重點突出能力考核以及考核形式的多樣性,體現(xiàn)考核的客觀性和公正性。通過多元化考核,可以激勵學生自主學習的積極性和主動性,全面提高實踐教學質量。
通過調查問卷、學生座談、課程考核等多種途徑,反映了該實踐教學體系的合理性和實用性,達到了預期的教學效果。在課題項目實施以來,學生對C++的學習興趣和學習效果明顯提高。特別是解決了教學中學生只會看程序不會寫程序的問題,在不斷的項目應用實踐中,學生對知識的掌握也越來越牢固,解決問題的能力也是越來越強。
在新構建的實踐教學體系中,通過強化工程應用、突出工程實踐、加強實踐考核,使學生在應用技術和方法的同時逐步掌握C++面向對象程序設計的基本原理、概念和方法。沿著分層次工程應用的主線,學生從基本的結構化問題到復雜的面向對象應用項目,在不斷的應用實踐中,不僅掌握了C++語言的基本知識、原理和方法,而且掌握了C++面向對象程序的設計過程和方法,具備一定的面向對象程序設計能力和運用C++解決實際問題的能力。當然,文中所提出的體系和模式并不是完美無缺的,只是作者實踐的積累和總結,教師還可根據(jù)學生實際情況和自身教學需要,增加和完善工程應用項目,以培養(yǎng)基礎理論和工程實踐都合格的應用型計算機技術人才。
參考文獻
[1] 季耀君.“面向對象程序設計與C++”教學對策研究[J]. 西南農業(yè)大學學報:社會科學版,2013,11(8):168-169.
[2] 白霞,高飛,趙娟.基于計算思維的C++面向對象程序設計教學改革[J].計算機教育,2014(11):7-9.
[3] 謝晉.項目教學法在《C++面向對象程序設計》中的實踐[J].電子世界,2014(5):174.
[4] 馮紀南,劉晶,楊德俊.項目驅動式實踐教學模式的探索[J].中國現(xiàn)代教育裝備,2015(15):88-90.
[5] 黃柳紅.C++面向對象程序設計的實驗教學研究[J]. 廣東技術師范學院學報:自然科學版. 2012, 33(1):70-72.
[6] 費雄偉,陳偉宏.基于工程實踐能力的Visual C++程序設計課程改革與實踐[J].大學教育,2014(4):114-115.
[7] 彭召意,文志強,朱艷輝.以項目驅動的面向對象程序設計課程教學研究[J].計算機教育,2012(24):95-98.
[8] 王瓊.項目教學法在《面向對象程序設計》實踐教學環(huán)節(jié)中的應用[J].湖北廣播電視大學學報,2011,31(1):18-19.
[9] 張會.C++面向對象程序設計實踐教學改革探討[J].西昌學院學報:自然科學版,2015,29(1):151-153.
Probing into Engineering-oriented Practical Teaching for the Course of C++ Programming
Zhang Xiaomin, Zhang Feng, Li Bo
School of Software, Nanyang Institute of Technology, Nanyang, 473004, China
Abstract:C++ programming is one of the most important basic specialty courses of the computer-related majors in applied universities and it can directly impact on the study of the follow-up specialty courses and the corresponding professional competence acquisition. Currently, the experimental teaching of C++ programming are mainly classified by verified experiments and basic exercises, which may cause a critical problem that it is difficult to stimulate student interest with the lack of engineering training. To this end, project-based and application-oriented experiment system based on engineering has been designed, and teaching and assessment methods involve integrating intra-curricular and extra-curricular, combining teacher check-passing and students’ defense, and so on. In addition, students can acquire knowledge with the practical course-designing projects, and also apply such knowledge and methods to solve practical problems. Practices show that this approach not only improves the ability of students to use the C++ programming language but also strengthens the students' engineering practice. Both teacher and students are satisfied with the teaching results.
Key words:C++ programming; engineering practice; practical teaching; teaching reform
收稿日期:2015-09-27
作者簡介:張曉民,本科,副教授。張楓,碩士,講師。李博,碩士,講師。
基金項目:南陽理工學院C++專業(yè)核心課程教學改革專項研究課題(編號:NIT2014BKHX-10)。