楊旺明
三峽大學(xué) 計(jì)算機(jī)與信息學(xué)院, 宜昌 443002
基于工程的面向?qū)ο蟪绦蛟O(shè)計(jì)課程教學(xué)的求索與實(shí)踐
楊旺明
三峽大學(xué) 計(jì)算機(jī)與信息學(xué)院, 宜昌 443002
面向?qū)ο蟪绦蛟O(shè)計(jì)是工科學(xué)生必修專業(yè)基礎(chǔ)課程。但由于其在面向?qū)ο笏枷牒头椒ㄉ系膹?fù)雜性和抽象性,導(dǎo)致面向?qū)ο蟮慕虒W(xué)效果不佳,存在著理論與實(shí)際應(yīng)用相脫節(jié)的問(wèn)題。本文在教學(xué)中通過(guò)工程實(shí)例系統(tǒng)講解,解決了面向?qū)ο蠹夹g(shù)難于系統(tǒng)應(yīng)用的實(shí)際問(wèn)題,為面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)提供了一種新的方案,取得很好的教學(xué)效果。
面向?qū)ο?;工程?shí)例;系統(tǒng)教學(xué)
object-oriented; engineering examples; system teaching
近年,面向?qū)ο蠹夹g(shù)覆蓋領(lǐng)域廣泛,面向?qū)ο蠹夹g(shù)已經(jīng)成為程序設(shè)計(jì)的主流。鑒于此,面向?qū)ο蟪绦蛟O(shè)計(jì)已成為計(jì)算機(jī)應(yīng)用類高年級(jí)學(xué)生及研究生必修的一門(mén)專業(yè)。我國(guó)高校開(kāi)設(shè)C++、Java等面向?qū)ο蠹夹g(shù)語(yǔ)言設(shè)計(jì)課程。這些課程的主要教學(xué)目標(biāo)希望實(shí)現(xiàn)學(xué)生從面向過(guò)程編程思想向主流面向?qū)ο?OO)思想的轉(zhuǎn)變,掌握面向?qū)ο缶幊趟枷牒头椒āH欢?,多年教學(xué)實(shí)踐表明,很多學(xué)生學(xué)完該課程后未能達(dá)到預(yù)期教學(xué)目標(biāo)。一些學(xué)生可能在筆試中可以考出不錯(cuò)成績(jī),但在課程設(shè)計(jì)和項(xiàng)目實(shí)習(xí)等一些實(shí)踐環(huán)節(jié)中,面對(duì)一些實(shí)際問(wèn)題時(shí),很多學(xué)生搞不清該如何下手,實(shí)踐動(dòng)手能力差。 結(jié)果,面向?qū)ο蠹夹g(shù)市場(chǎng)需求日益增多的同時(shí),企業(yè)卻抱怨招聘不到合適的掌握面向?qū)ο蠹夹g(shù)的學(xué)生。究其原因,主要有以下幾點(diǎn):其一,教師在講授程序設(shè)計(jì)課程時(shí)喜歡照本宣科,缺少對(duì)學(xué)生動(dòng)手能力的培養(yǎng)教學(xué)實(shí)例,學(xué)生也就成了“紙上談兵”;其二, 教材缺少系統(tǒng)教學(xué)實(shí)例。很多學(xué)生在學(xué)習(xí)過(guò)程中能理解及掌握教材中的一些教學(xué)案例,但這些教學(xué)實(shí)例無(wú)法成為一個(gè)系統(tǒng)體系,導(dǎo)致所學(xué)知識(shí)無(wú)法結(jié)合實(shí)際項(xiàng)目加以融會(huì)貫通。如何能使用面向?qū)ο蠹夹g(shù)解決實(shí)際問(wèn)題是許多高校老師的研究課題。本文以教研項(xiàng)目為背景,創(chuàng)造性的利用工程應(yīng)用實(shí)例來(lái)進(jìn)行教學(xué),在面向?qū)ο蟪绦蛟O(shè)計(jì)的教學(xué)中進(jìn)行嘗試和實(shí)踐,取得了很好的效果。
面向?qū)ο蟪绦蛟O(shè)計(jì)課程包含的知識(shí)點(diǎn)非常多且比較抽象化。其中,有I/O流、Vector容器以及運(yùn)算符的重載等一些知識(shí)點(diǎn)的教學(xué),絕大多數(shù)的教材中一般是針對(duì)性的設(shè)計(jì)一些簡(jiǎn)單的實(shí)例。這樣,學(xué)習(xí)這些實(shí)例難以解決實(shí)際問(wèn)題。那么,如何使得學(xué)生能靈活運(yùn)用所學(xué)的知識(shí)呢?針對(duì)這個(gè)知識(shí)點(diǎn)教學(xué),本文創(chuàng)新性的結(jié)合工程實(shí)例,提出了如何利用面向?qū)ο螅∣O)的思想和方法去解決工程應(yīng)用問(wèn)題,從而使學(xué)生能運(yùn)用所學(xué)的OO技術(shù),結(jié)合I/O流、Vector容器以及運(yùn)算符的重載等知識(shí)點(diǎn),很順利的編寫(xiě)程序?qū)崿F(xiàn)工程問(wèn)題中的相應(yīng)功能。
為了便于學(xué)習(xí)和討論,我們將學(xué)生劃分成幾個(gè)小組,每個(gè)小組由一名組長(zhǎng)負(fù)責(zé)。首先,在提出問(wèn)題階段,我們給出了工程實(shí)際中的原型數(shù)據(jù)。對(duì)于該原型數(shù)據(jù),我們首先讓學(xué)生對(duì)原型數(shù)據(jù)進(jìn)行分析和討論。通過(guò)討論和學(xué)習(xí),學(xué)生逐漸就明白對(duì)該原型數(shù)據(jù)進(jìn)行格式化,理解了如何利用OO中類的設(shè)計(jì)來(lái)實(shí)現(xiàn)該原型數(shù)據(jù)中基礎(chǔ)元素。在提出問(wèn)題階段,教師一定要把問(wèn)題的正規(guī)化條理化。正規(guī)化要求教師把提出的問(wèn)題做成幻燈片,在講解的時(shí)候,學(xué)生便于清晰閱讀,更重要的是它可以作為學(xué)生課后查閱資料的依據(jù);條理化要求教師把所需要用到知識(shí)點(diǎn)列舉出來(lái),便于學(xué)生對(duì)所提出的問(wèn)題結(jié)合相關(guān)的知識(shí)點(diǎn)。接著,通過(guò)相關(guān)理論及教材實(shí)例學(xué)習(xí),再結(jié)合實(shí)例數(shù)據(jù),做到理論聯(lián)系實(shí)際。最后,學(xué)習(xí)完相關(guān)知識(shí)后,要求學(xué)生利用一周的課余時(shí)間,通過(guò)查閱相關(guān)資料,認(rèn)真學(xué)習(xí),實(shí)現(xiàn)相應(yīng)功能。具體工程問(wèn)題的描述為:給定工程原型數(shù)據(jù)集如表1所示。
在分析問(wèn)題階段,要求每個(gè)小組于每周固定時(shí)間的集中討論匯報(bào)本小組對(duì)問(wèn)題的理解。如何從該數(shù)據(jù)集文件中讀數(shù)據(jù),如何存放數(shù)據(jù),如何處理數(shù)據(jù)等。帶著對(duì)對(duì)問(wèn)題存在的疑惑去尋找解決問(wèn)題方法取得了不錯(cuò)的效果。
在解決問(wèn)題方法,為了保證教學(xué)點(diǎn)與實(shí)例一致連貫性,采用問(wèn)題與教學(xué)相關(guān)引導(dǎo)的方法。若知識(shí)點(diǎn)相關(guān),則采用同一實(shí)例進(jìn)行擴(kuò)展,即程序代碼相近,但針對(duì)不同知識(shí)點(diǎn)做局部改變擴(kuò)展,使學(xué)生能快速理解實(shí)例,并專注于新的教學(xué)點(diǎn)。接著適當(dāng)?shù)貙?duì)實(shí)例的歸納、對(duì)比、類比等方法去闡述教學(xué)知識(shí)點(diǎn)。每講完一次課程,都為學(xué)生總結(jié)本次課程所學(xué)的知識(shí)點(diǎn),提示下次課涉及的前序知識(shí)點(diǎn),以及與下堂課有直接關(guān)系的前序?qū)嵗?,并布置與課堂實(shí)例的算法相似的程序作業(yè),要求學(xué)生在課余根據(jù)相應(yīng)知識(shí)點(diǎn)進(jìn)行實(shí)例自學(xué),讓學(xué)生能通過(guò)所學(xué)的知識(shí)的直接遷移來(lái)完成作業(yè)。這樣通過(guò)系統(tǒng)學(xué)習(xí)并練習(xí)相應(yīng)實(shí)例,達(dá)到鞏固和提高的目的。最后,也是最關(guān)鍵的,將前面所學(xué)的實(shí)例按提出問(wèn)題、分析問(wèn)題及解決問(wèn)題步驟,將知識(shí)點(diǎn)進(jìn)行貫通和連接,改進(jìn)程序,層層推進(jìn)至最終完成問(wèn)題。
表1
這樣伴隨教學(xué)內(nèi)容和進(jìn)度,通過(guò)對(duì)同一問(wèn)題進(jìn)行按階梯進(jìn)行深化,一個(gè)復(fù)雜的綜合實(shí)例分解成為若干個(gè)教學(xué)內(nèi)容相關(guān)的小實(shí)例,最后又組裝成一個(gè)大的應(yīng)用系統(tǒng)程序,從而讓學(xué)生系統(tǒng)全面地學(xué)習(xí)和掌握面向?qū)ο蟪绦蚣軜?gòu)與程序設(shè)計(jì)思想。
研究性學(xué)習(xí)是以問(wèn)題為載體的一種全新的學(xué)習(xí)方式。它著力于學(xué)生的學(xué),鼓勵(lì)學(xué)生以類似科學(xué)研究的方式,進(jìn)行主動(dòng)探索[1]。
3.1 數(shù)據(jù)的格式化
經(jīng)過(guò)對(duì)上述原型數(shù)據(jù)集的分析和討論,為了便于文件的讀入和數(shù)據(jù)的處理,我們將上述文件格式化為相應(yīng)的三個(gè)文件,并且對(duì)文件的數(shù)據(jù)進(jìn)行規(guī)范化處理。其基本規(guī)范化操作是去掉多余的符號(hào),空行等一些無(wú)用的數(shù)據(jù),這樣做的目的是便于程序編寫(xiě)。
3.2 類的設(shè)計(jì)
針對(duì)教材的定義和講解,我們根據(jù)原型數(shù)據(jù)的分析,我們可以定義三個(gè)基類:class BaseValue;class Substation;class Unit;這些類的數(shù)據(jù)成員可以參照文件中數(shù)據(jù)字段來(lái)進(jìn)行設(shè)計(jì)。通過(guò)這樣的分析和引導(dǎo),學(xué)生對(duì)類的分析和設(shè)計(jì)就有明確認(rèn)識(shí)和理解。
3.3 文件的讀入及Vector的應(yīng)用
為了能方便的從文件中獲取數(shù)據(jù),需要利用Vector及對(duì)象的思想方法。為此,我們使用3個(gè)對(duì)應(yīng)的的vector容器:vector
圖1
為了能順利將讀的數(shù)據(jù)對(duì)象化,我們需要在對(duì)應(yīng)的類中設(shè)計(jì)構(gòu)造函數(shù),以實(shí)現(xiàn)對(duì)象的創(chuàng)建。代碼如下:
圖2
3.4 文件的寫(xiě)出及Vector的應(yīng)用
在程序中對(duì)數(shù)據(jù)進(jìn)行處理完畢后需要對(duì)結(jié)果進(jìn)行保存。為了讓結(jié)果可以按自己設(shè)計(jì)的格式進(jìn)行保存,我們引入靜態(tài)多態(tài)知識(shí)點(diǎn),講解運(yùn)算符重載,結(jié)合該實(shí)例,需要對(duì)析取運(yùn)算符進(jìn)行重載。通過(guò)該運(yùn)算符的重載,學(xué)生在該實(shí)例實(shí)踐中明白了靜態(tài)多態(tài)的含義和作用。我們引導(dǎo)學(xué)生進(jìn)行編碼測(cè)試,代碼如下:
圖3
確定好輸出格式后,就可以用輸出流輸出到文件中了。由于重載了插入運(yùn)算符》》,所以在程序就能很方便的對(duì)數(shù)據(jù)進(jìn)行輸出。主要代碼如下:
圖4
工程實(shí)例雖然著眼點(diǎn)在于轉(zhuǎn)變學(xué)生學(xué)的方式,但卻是通過(guò)轉(zhuǎn)變教師教學(xué)的觀念和教學(xué)行為的方式來(lái)實(shí)現(xiàn)的。在本課程中進(jìn)行的工程實(shí)例學(xué)習(xí)過(guò)程中,教師主要是學(xué)習(xí)的組織者、參與者和引導(dǎo)者,通過(guò)該實(shí)例來(lái)激發(fā)學(xué)生的學(xué)習(xí)本課程的興趣,培養(yǎng)他們的創(chuàng)新意識(shí)和動(dòng)手能力。在學(xué)習(xí)過(guò)程中,每一位學(xué)生都是通過(guò)親身實(shí)踐,運(yùn)用書(shū)本上的理論知識(shí)及課堂上所講授知識(shí),結(jié)合實(shí)例進(jìn)行編碼并獲取直接經(jīng)驗(yàn)。經(jīng)過(guò)一個(gè)學(xué)期的訓(xùn)練,參加實(shí)例學(xué)習(xí)的學(xué)生,其編程技能特別是系統(tǒng)開(kāi)發(fā)能力明顯得到提高。
這樣的教學(xué),不僅同學(xué)們編程能力逐步得到了提高,而且也逐漸表現(xiàn)出極大興趣和熱情。并且,在相互學(xué)習(xí)和討論的過(guò)程中,大家也逐漸認(rèn)識(shí)團(tuán)隊(duì)作用。團(tuán)隊(duì)成員之間如何有效合作與交流也得到了很大的鍛煉。大部分同學(xué)經(jīng)過(guò)訓(xùn)練,現(xiàn)在不僅能編寫(xiě)出結(jié)構(gòu)清晰、可讀性好的代碼,還能將自己實(shí)踐中的經(jīng)驗(yàn)與心得與他人分享和探討。此外,通過(guò)實(shí)例教學(xué)法在期末考試中的程序設(shè)計(jì)題答起來(lái)也得心應(yīng)手,進(jìn)入學(xué)院工作室也能更快的融合到工作室的團(tuán)隊(duì)中去。
面向?qū)ο蟪绦蛟O(shè)計(jì)作為我們計(jì)算機(jī)學(xué)院及兄弟學(xué)院各相關(guān)專業(yè)必修的一門(mén)專業(yè)基礎(chǔ)課,對(duì)各相關(guān)專業(yè)學(xué)生后續(xù)專業(yè)課程的學(xué)習(xí)乃至培養(yǎng)應(yīng)用型人才的目標(biāo)都起著至關(guān)重要的作用。本文研究目標(biāo)旨在改革現(xiàn)有的面向?qū)ο蟪绦蛟O(shè)計(jì)課程教學(xué)內(nèi)容與模式,以培養(yǎng)高素質(zhì)的創(chuàng)新型人才為出發(fā)點(diǎn),切實(shí)提高學(xué)生的OO開(kāi)發(fā)能力和動(dòng)手實(shí)踐能力,進(jìn)而保證該課程教學(xué)的高質(zhì)量并保持高校培養(yǎng)人才面向市場(chǎng)的特色。為達(dá)到這個(gè)目的,我們采用工程實(shí)例教學(xué)模式。工程實(shí)例教學(xué)法將教學(xué)內(nèi)容與工程實(shí)際緊密結(jié)合,采用當(dāng)今工程中的實(shí)例數(shù)據(jù)集,結(jié)合相關(guān)教學(xué)內(nèi)容及知識(shí)點(diǎn),對(duì)教材知識(shí)點(diǎn)進(jìn)行適當(dāng)?shù)恼{(diào)整和擴(kuò)充。這種教學(xué)模式極大地使學(xué)生學(xué)習(xí)興趣極大化,將充分調(diào)動(dòng)學(xué)生的主觀能動(dòng)性,進(jìn)而提高學(xué)生的動(dòng)手能力和創(chuàng)新能力,力求使學(xué)生符合當(dāng)今崗位需求,并為后續(xù)課程的學(xué)習(xí)和研究打下基礎(chǔ)。改進(jìn)教學(xué)方法。實(shí)踐證明,工程實(shí)例教學(xué)法適合面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué),可以在今后的教學(xué)中大力推廣。并且,教師還可以借助面向?qū)ο蟪绦蛟O(shè)計(jì)課程這個(gè)平臺(tái),采用工程數(shù)據(jù)集,鼓勵(lì)更多的學(xué)生團(tuán)隊(duì)參與,加大力度實(shí)施實(shí)例系統(tǒng)。我們認(rèn)為,該教學(xué)模式還可以廣泛應(yīng)用于其他實(shí)踐性較強(qiáng)課程,以全面提升學(xué)生的整體素質(zhì)。
[1]賈曉霞,吳際,李郭歡.面向Java的對(duì)象行為建模及可視化方法.計(jì)算機(jī)工程,Vol.33 No.18;2007: 48~50.
[2]朱振元,朱承.對(duì)象技術(shù)與抽象數(shù)據(jù)類型的實(shí)現(xiàn).計(jì)算機(jī)工程, Vol.33 No.15.,2007.88-90
[3]張席,王志強(qiáng). 國(guó)內(nèi)外Java教學(xué)模式的比較和探討. 計(jì)算機(jī)教育, 2007.1.44~47.
[4]周啟海.論對(duì)象程序設(shè)計(jì)同構(gòu)化教學(xué)教改與教育創(chuàng)新.計(jì)算機(jī)科學(xué),2003vol.30,183-184
Quest and Practice Based on Engineering in Teaching Object-Oriented
Yang Wangming
Collage of Computer and Information Technology, China Three Gorges University, Yichang 443002, China
Object-oriented programming is the foundation courses of engineering students in compulsory professional. But, Due to its complexity and abstraction of think and methods in objectoriented, resulting in ineffective teaching objectoriented, there are theoretical and practical application of disjointed. Teaching engineering examples to explain practical problems to solve difficult systems application of object-oriented technology, a new program to provide for the teaching of object-oriented programming, made a very good teaching effect.
TP393
A
10.3969/j.issn.1001-8972.2012.21.117