張會
(攀枝花學(xué)院 數(shù)學(xué)與計算機學(xué)院,四川 攀枝花617000)
C++面向?qū)ο蟪绦蛟O(shè)計實踐教學(xué)改革探討*
張會
(攀枝花學(xué)院 數(shù)學(xué)與計算機學(xué)院,四川 攀枝花617000)
針對“C++面向?qū)ο蟪绦蛟O(shè)計”課程教學(xué)中存在的問題,提出了包括驗證型、設(shè)計型、綜合型的多樣型實踐教學(xué)改革實施方案,該方案有效的提高了學(xué)生的學(xué)習(xí)興趣及綜合編程能力。
程序設(shè)計;驗證型;設(shè)計型
《C++面向?qū)ο蟪绦蛟O(shè)計》是計算機專業(yè)的一門專業(yè)基礎(chǔ)課,其主要目的是培養(yǎng)學(xué)生采用面向?qū)ο笏季S編寫程序,為后續(xù)軟件開發(fā)類課程打下堅實基礎(chǔ)。該門課程是實踐性較強的一門課程,要求學(xué)生學(xué)完本門課程后能獨立編寫應(yīng)用程序,本文就《C++面向?qū)ο蟪绦蛟O(shè)計》實踐教學(xué)中存在的問題進行分析并提出了多樣型實驗教學(xué)模式的改革探討。
1.1 學(xué)生面向過程編程思想根深蒂固,難于轉(zhuǎn)變
很多高校都是先開設(shè)C語言程序設(shè)計課程,再開設(shè)面向?qū)ο蟪绦蛟O(shè)計的C++程序設(shè)計課程。學(xué)生在學(xué)習(xí)C++程序設(shè)計時難以從面向過程編程轉(zhuǎn)化為面向?qū)ο缶幊趟季S,而很多教師忽略此情況,只注重照搬書本講解概念,導(dǎo)致學(xué)生學(xué)完C++程序設(shè)計課程后,仍采用結(jié)構(gòu)化程序設(shè)計方法的編程思想,未達(dá)到面向?qū)ο蟪绦蛟O(shè)計教學(xué)之目的。
1.2 學(xué)生在學(xué)習(xí)過程中未形成面向?qū)ο蟮闹R體系
在C++程序設(shè)計課程中,教學(xué)內(nèi)容主要包括類、對象、繼承、多態(tài)、抽象、接口、異常、I/O流、運算符重載等。學(xué)生學(xué)習(xí)完C++課程后,腦海中未形成一個完整的知識體系結(jié)構(gòu),無法將各內(nèi)容有機的關(guān)聯(lián)起來,更無法將各知識點靈活應(yīng)用于上機實踐,編寫出一個具有創(chuàng)新水平的應(yīng)用程序。
1.3 不注重提高學(xué)生的編程能力
學(xué)生知識體系不健全,各知識點孤立,片面,無法靈活運用所學(xué)知識解決實際問題,因此在編寫程序過程中顯得特別被動,只會為了驗證一個知識點而編寫程序。老師要求學(xué)生編寫綜合型實踐項目,學(xué)生不會主動思考獨立編寫程序而只會一味等待老師編寫的參考程序。而后再照搬參考程序,因此學(xué)生喪失了主動編寫程序的能力,無法達(dá)到舉一反三,靈活運用各知識點于實際編程中的能力,當(dāng)然也就無法設(shè)計出一個易用性、擴展性和復(fù)用性強的程序,因此編程能力無法得到有效的提高。
1.4 上機實踐項目類型單一
由于C++程序設(shè)計理論教學(xué)中的概念知識點較多,因此與之配套的實踐項目多是驗證型實驗,所設(shè)計的題目基本上都是為了驗證某一個或多個知識點而設(shè)計的實驗項目,從而使學(xué)生感覺對所學(xué)語法或知識點較茫然,不知如何用所學(xué)知識解決實際問題,使學(xué)生覺得學(xué)無所用。
2.1 讓學(xué)生清楚面向?qū)ο蟪绦蛟O(shè)計與面向過程程序設(shè)計間的關(guān)系
基于對象的編程更符合人的思維模式,其具有封裝性、繼承性和多態(tài)性的特點,因此易于擴展和復(fù)用[1]。面向?qū)ο缶幊淌菍傩院筒僮鞣庋b成一個類,再通過類實例化的主體調(diào)用類中定義的方法對屬性變量進行操作。如家用洗衣機將內(nèi)部結(jié)構(gòu)相對于用戶進行封裝隱藏,通過使用對外的接口按鈕來啟動、設(shè)置和停止洗衣功能。
面向過程編程的核心是編寫解決某個問題的程序段,如C中的函數(shù)。函數(shù)是程序執(zhí)行時產(chǎn)生的一種行為,但面向過程函數(shù)沒有行為主體,不符合自然界中的主體行為規(guī)律,即某一行為是由某一主體(對象)所產(chǎn)生。如編寫一個max()函數(shù),該函數(shù)不從屬于任何一個主體,可以直接調(diào)用,不符合自然界中主體發(fā)出操作的規(guī)律,不利于程序的擴展和維護。面向?qū)ο缶幊瘫容^接近人們表達(dá)事物和解決問題的思維方法,其編程的核心圍繞對象,一切行為屬性均從屬于某一特定的對象。
面向?qū)ο缶幊绦枰帉戭愔蟹庋b的方法體,即寫一個小算法,同時面向?qū)ο缶幊套⒅卦鯓雍侠怼⒂行У亟M織類,對象。因此教學(xué)中應(yīng)把結(jié)構(gòu)化程序設(shè)計與面向?qū)ο蟪绦蛟O(shè)計有機地結(jié)合起來,并注意與結(jié)構(gòu)化程序設(shè)計方法相比較,注重面向?qū)ο蟪绦蛟O(shè)計思想的傳授,引導(dǎo)學(xué)生程序設(shè)計思維的轉(zhuǎn)變[2]。
2.2 理論聯(lián)系實踐,學(xué)生在實踐中形成面向?qū)ο蟮闹R體系
學(xué)生在理論教學(xué)中學(xué)習(xí)的知識點片面、孤立,不通過實踐環(huán)節(jié),無法將其有效組合在一起,形成知識體系結(jié)構(gòu),不能有效地應(yīng)用所學(xué)知識點,易遺忘,易產(chǎn)生所學(xué)知識無用的想法,因此只有在掌握基本知識點的基礎(chǔ)上,進行一些綜合項目的訓(xùn)練,才能真正提高學(xué)生利用所學(xué)知識解決問題的能力,才能對實際中需解決的問題觸類旁通,舉一反三,因此項目實踐與課堂教學(xué)缺一不可,不能厚此鄙薄[3]。
驗證型實驗只是為了讓學(xué)生熟悉基本概念,基本語法,建立C++基本的知識框架,但無法讓學(xué)生靈活使用所學(xué)習(xí)相關(guān)知識點,因此,筆者在實踐教學(xué)過程,采用驗證型實驗+設(shè)計型實驗搭配組合,讓學(xué)生實踐一個驗證型實驗后,再讓學(xué)生做一個設(shè)計型實驗項目。學(xué)生在實踐過程中強化理論教學(xué)中的知識點,同時形成有用的知識鏈。如在學(xué)完類、對象相關(guān)概念后,安排學(xué)生先做實驗教材中的驗證型實驗,再做一個貪吃蛇游戲或一個小的系統(tǒng)如職工工資管理系統(tǒng)之類的設(shè)計型實驗,此類設(shè)計型實驗中融合類及對象的相關(guān)用法。學(xué)生在做設(shè)計型實驗時是在驗證型實驗的基礎(chǔ)更進一步的學(xué)習(xí),既鞏固了驗證型實驗中的知識點,同時也提高了學(xué)生的編程能力,使學(xué)生能夠體會到學(xué)以致用的樂趣,從而可以極大的調(diào)動學(xué)生的學(xué)習(xí)主動性和積極性。下面舉例說明。
貪吃蛇游戲是學(xué)生在學(xué)完類、對象概念且做了一個驗證型實驗后,所設(shè)計的一個設(shè)計型實驗,以使學(xué)生把所學(xué)知識及時運用于實踐中,從而提高學(xué)生的學(xué)習(xí)興趣。貪吃蛇游戲中類的設(shè)計主要由圍墻類,蛇身結(jié)點類,食物類實現(xiàn)。圍墻類用一個二維數(shù)組來實現(xiàn),封裝在墻類中的操作包括初始化外墻和輸出外墻。墻類(Fence類)的聲明如下:

蛇身結(jié)點(ShakNode)類,類中包括蛇身結(jié)點在墻內(nèi)的坐標(biāo)x,y值,蛇用類中定義的prior,next指針將蛇身結(jié)點連接,使用鏈表是為方便插入刪除蛇身結(jié)點。定義get_x(),get_y()兩個方法用于獲得蛇頭結(jié)點在墻內(nèi)的x,y坐標(biāo)。add_head()在蛇移動或吃到食物時,蛇頭部插入一個節(jié)點。delete_tail()蛇移動過程中,為使蛇看起來在移動,在蛇頭部插入一個結(jié)點時,尾部刪除一個結(jié)點。moving()方法通過調(diào)用add_head()及delet_tail()方 法 使 蛇 動 起 來 ,change_direction(char)根據(jù)鍵盤上的上下左右鍵操作來確定蛇身的移動方向,蛇身結(jié)點類聲明如下,該類中包含了蛇身結(jié)點的操作和屬性變量的聲明:

食物類(Food),Food類操作當(dāng)食物被蛇在移動過程中吃掉后,通過get_food()隨機生成一個食物,其位置在墻內(nèi)的任一位置,食物的位置值存放于food_x,food_y值中。Food類聲明如下:

在此實驗中既涉及到算法的分析,即如何讓蛇在圍墻中動起來,如何隨機產(chǎn)生食物,如何讓蛇吃食物的算法分析,同時也需要學(xué)生考慮定義哪些類,及定義類中的屬性和方法。通過該實驗項目的練習(xí)后,學(xué)生對類和對象的使用有了更具體的認(rèn)識,體會到了學(xué)有所用的樂趣,也明白了學(xué)習(xí)不只停留在對所學(xué)知識點驗證的層面上。
學(xué)生學(xué)完類的繼承、抽象、虛函數(shù)后,可以讓學(xué)生做一個職工工資管理系統(tǒng)讓學(xué)生將類、繼承、抽象、虛函數(shù)等知識點靈活而很自然的運用于所編寫的系統(tǒng)中。
學(xué)生學(xué)完友元函數(shù),運算符重載,輸入輸出流、文件等相關(guān)知識后,實踐一個復(fù)數(shù)計算器設(shè)計型類的實驗項目。復(fù)數(shù)計算器要求有:①能進行加減乘除,自增,自減,關(guān)系運算(比較復(fù)數(shù)模的大小)。②輸入重載函數(shù),輸入形如a+bi的復(fù)數(shù),給實部虛部正確賦值,輸入有誤時,在程序中進行異常判斷。③記錄下不同用戶使用計算器的情況,以文件的形式保存在計算機內(nèi)。根據(jù)計算器功能的描述,需要聲明兩個類,聲明形式如下:

復(fù)數(shù)計算器例子是一包含了友元函數(shù),運算符重載,輸入輸出流、文件等知識點的一個綜合實例,從而鞏固實驗教材上的驗證型實驗,同時也提高了學(xué)生的學(xué)習(xí)興趣。
2.3 上機實踐實驗需要項目多樣化,注重提高學(xué)生的編程能力
為使C++課程的實驗教學(xué)達(dá)到預(yù)期目標(biāo),就必須重視實驗教學(xué)內(nèi)容的豐富性,啟發(fā)性以及整個實驗課題的系統(tǒng)性[4]。因此與C++程序設(shè)計課程相配套的實驗不能只局限于驗證型實驗,需要有設(shè)計型,綜合型實驗項目,讓學(xué)生通過實驗達(dá)到知識結(jié)構(gòu)的系統(tǒng)性,同時體會到學(xué)有所用,從而使學(xué)生有成就感。為使學(xué)生所學(xué)知識點形成體系結(jié)構(gòu),在學(xué)生學(xué)習(xí)完一定的知識點后實踐一個驗證型實驗,再實踐一個設(shè)計型實驗,對相關(guān)知識進行鞏固,在設(shè)計實驗時一定要考慮到趣味性及實用性。在C++程序設(shè)計教學(xué)結(jié)束時,再做一個綜合型實驗包含整個C++相關(guān)知識點的綜合型實驗。筆者在實踐教學(xué)過程的實驗項目設(shè)計如下:

表1 C++程序設(shè)計實踐教學(xué)安排表
通過筆者多次在所授班級中實踐,采用多樣型實驗教學(xué)模式,教學(xué)效果和教學(xué)質(zhì)量有了顯著的提高。所授課的學(xué)生參加期末考試及各類比賽如ACM大賽,均取得了很好的成績。采用驗證實驗+設(shè)計型實驗的實踐教學(xué)模式既豐富了教學(xué)內(nèi)容,也極大的提高了學(xué)生學(xué)習(xí)的主動性和創(chuàng)新性,能積極的采用面向?qū)ο蟪绦蛟O(shè)計思想進行編程,解決實際問題,從而有效的提高了學(xué)生的編程能力。
注釋及參考文獻(xiàn):
[1]耿祥義,張躍平.Java面向?qū)ο蟪绦蛟O(shè)計[M].第2版.北京:清華大學(xué)出版社,2013.
[2]張本成,龔偉.面向?qū)ο蟪绦蛟O(shè)計教學(xué)改革探討[J].內(nèi)蒙古師范大學(xué)學(xué)報,2008(1):134-136.
[3]魯麗,張采芳.面向?qū)ο蟪绦蛟O(shè)計課程實踐教學(xué)改革的探討[J].電腦知識與技術(shù),2013(3)::285-286.
[4]趙曉,王麗麗.C++面向?qū)ο蟪绦蛟O(shè)計多樣型實驗探究[J].Computer Era,2013(7):46-47.
Discussion on Experiment forC++Object-oriented Programming
ZHANG Hui
(School of Mathematics and Computer Science,Panzhihua University,Panzhihua,Sichuan 617000)
According to teaching problems of“C++object oriented programming”course,this paper puts forward the scheme of the teaching reform practice of biodiversity,including verification type,design type, comprehensive experiment,and gives the implementation method.This scheme effectively improves the students' learning interest and comprehensive ability of programming.
programming;verification type;design type
TP311.1-4
A
1673-1891(2015)01-0151-03
2014-10-10
四川省教育廳理工科一般項目(項目編號:14ZB0407)。
張會(1980-),女,四川射洪人,講師,碩士,研究方向:計算機應(yīng)用,應(yīng)用程序開發(fā)。