袁國武 張學杰 孔兵 丁海燕 楊軍
摘要:針對面向?qū)ο蟪绦蛟O(shè)計課程教學中存在的問題,從課程設(shè)置、理論課教學、實踐課改革等方面提出改革基本思路、原因和改革方法。
關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計;教學改革;Java
1 教學中存在的問題
筆者根據(jù)多年的教學經(jīng)驗,總結(jié)出面向?qū)ο蟪绦蛟O(shè)計課程教學中主要存在以下問題。
(1)學生熟悉了c語言為代表的過程化程序設(shè)計思想,難以轉(zhuǎn)變?yōu)槊嫦驅(qū)ο蟪绦蛟O(shè)計的思想。在第1學期,學生學習了c語言,第2學期學習數(shù)據(jù)結(jié)構(gòu)時,也大量采用c語言進行編程,學生已經(jīng)熟悉了過程化程序設(shè)計的思想,因此,當接觸到面向?qū)ο缶幊陶Z言時,難以接受面向?qū)ο蟮乃枷牒头椒?。部分學生在學習了一學期后,仍然會寫出“方法名(對象名)”這樣的語句,并且不習慣于“對象名.方法名”這樣的調(diào)用方式。
(2)理論課所講實例間關(guān)聯(lián)性小,實驗課中驗證型實驗過多,且驗證內(nèi)容單一,前后實驗沒有關(guān)聯(lián)和連續(xù)性,嚴重地影響了學生自主學習的興趣和對知識點的統(tǒng)一性認識?,F(xiàn)有的實驗依賴課后的上機習題。這些習題通常只針對本章的某個語法或知識點進行設(shè)計,前后章節(jié)的上機習題沒有關(guān)聯(lián),學生不能通過這些上機習題對面向?qū)ο蟪绦蛟O(shè)計思想從整體上進行認識。即便全部上機習題做完,也都是一些非常小的“玩具”程序,不能對學生進行綜合型實驗訓練。
(3)計算機軟件水平考試中面向?qū)ο蟪绦蛟O(shè)計題目做的不好,嚴重影響該專業(yè)認證考試的通過率。軟件水平考試是計算機的專業(yè)認證考試,能在很大程度上體現(xiàn)所培養(yǎng)學生綜合掌握計算機各方面知識的水平。該考試的證書是用人單位挑選計算機專業(yè)學生的重要指標。經(jīng)過多年參加計算機軟件水平考試云南省考區(qū)軟件設(shè)計師試題的閱卷,我們發(fā)現(xiàn)軟件設(shè)計師試題中面向?qū)ο蟪绦蛟O(shè)計題目的得分情況不好,多數(shù)學生的得分低于總分的1/3。所以,教學中加強對軟件水平考試中面向?qū)ο蟪绦蛟O(shè)計的訓練是非常必要的。
因此,對面向?qū)ο蟪绦蛟O(shè)計課程進行教學改革,提高學生面向?qū)ο蟪绦蛟O(shè)計的能力勢在必行。
2 教學改革的措施和方法
2.1 課程設(shè)置的調(diào)整
在2009年教學計劃修訂中,面向?qū)ο蟪绦蛟O(shè)計被提前安排在第3學期開設(shè),以Java語言為例進行講解和實驗,有3個學分,理論講授36課時,實驗36課時,與之前的18課時實驗課相比,加大了實驗的比例。課程調(diào)整的主要原因如下。
(1)以Java為代表的面向?qū)ο蟪绦蛟O(shè)計語言應用非常廣泛,是計算機專業(yè)學生必須掌握的技能,提早講授會讓學生有更多的時間去熟悉。
(2)Java語言可以作為其他專業(yè)課的實驗工具,表1為Java在各門課程實驗中的應用,其中的某些知識點可以采用Java方便地進行實驗。
(3)在專業(yè)課的安排上,保證每學期至少有一門課程與程序設(shè)計緊密相關(guān),使程序設(shè)計貫穿本專業(yè)4年的學習過程。教學計劃修改后,實驗中需要進行編程的課程見表2。可以看出,面向?qū)ο蟪绦蛟O(shè)計提前到第3學期,用Java語言為例講解,對后續(xù)課程的學習非常有利。
2.2 理論課教學改革
在用Java講授面向?qū)ο蟪绦蛟O(shè)計的知識時,傳統(tǒng)的講解方法是先講Java語言的歷史、基本語法,然后再講解面向?qū)ο蟮睦碚撝R、類、對象、封裝、繼承、多態(tài)等概念,這也是課本常規(guī)的編寫順序,但是對于很多學校來說,學生學習的第一門編程語言是C語言,已經(jīng)習慣了把程序分成多個函數(shù)的思想。在講解了Java語言的歷史、基本語法之后,學生在接觸到類時,仍然習慣于過程化的程序設(shè)計思維。由于課堂講解的例子都很簡單,這些例子采用c語言也可以很方便地實現(xiàn),而采用Java語言實現(xiàn)時,反而顯得代碼更多、語法更復雜,這就令學生懷疑采用面向?qū)ο蟮姆椒〞詈唵蔚膯栴}復雜化。
事實上,面向?qū)ο蟪绦蛟O(shè)計課程的目的是在學生已有過程化程序設(shè)計思想的基礎(chǔ)上,讓學生的思維向面向?qū)ο蟪绦蛟O(shè)計思想上轉(zhuǎn)變。我們可以調(diào)整部分教學內(nèi)容的順序,以達到更好的效果。
1)Java和C語言基本語法的不同之處。
由于Java和c的基本語法大部分相似,學生有c語言的基礎(chǔ),因此教學過程中只需要說明兩者的不同之處?;菊Z法中,Java和c的不同之處主要有兩點。
(1)基本數(shù)據(jù)類型:char類型,c語言中是1個字節(jié),采用ASCII編碼,而Java語言采用Unicode編碼,長度是2個字節(jié);布爾類型,C語言中用0表示false,非0表示true,而Java語言提供的boolean是一種基本數(shù)據(jù)類型,只有false和true兩種取值。
(2)數(shù)組類型:在c語言中,數(shù)據(jù)類型直接聲明后就可以使用,如“int a[10]”,而在Java中語言,聲明后還要創(chuàng)建才能使用,如“int a;a=new int”,或者聲明和創(chuàng)建連在一起寫為“int a[]=qtew int[10]”。
2)講解幾個Java系統(tǒng)類,讓學生體會面向?qū)ο缶幊痰暮锰帯?/p>
Java的系統(tǒng)類庫很多,可以挑選幾個讓學生熟悉,編程實現(xiàn)一些小程序,體會面向?qū)ο蟮镊攘?,讓學生習慣“對象名.方法名”這樣的調(diào)用方式。
(1)String類:編程中用的比較多的運算是字符串的操作,在c語言中很多操作要自己編寫代碼實現(xiàn)。而在Java中,字符串的定位、比較、連接、查找、求長度、替換、拆分、去空格等多種操作只要簡單地用“字符串名稱,方法名(參數(shù))”的調(diào)用方式就可以完成,完全不用了解這些功能到底是怎樣實現(xiàn)的,只需知道怎樣調(diào)用、參數(shù)需要什么,就可以輕松使用。
(2)Frame類或JFrame類:現(xiàn)在的程序基本上都是窗口形式的可視化用戶界面,學生在學習c語言以后,一直很好奇可視化用戶界面是怎樣實現(xiàn)的,可是在C語言中學生沒有辦法實現(xiàn)。在Java中,給學生簡單講解Frame類或JFrame類的基本方法,學生就能用“JFrame myWindow=new JFrame();”這樣一條簡單的語句創(chuàng)建一個窗口進行顯示,然后可以用“myWindow.setTitle(“我的窗體”);設(shè)置窗口標題,用“myWindow.setSize(800,600);”設(shè)置窗體大小為800×600點,還可以改變窗口背景顏色、添加標簽等。這些操作都只需要簡單的幾行語句,不需要了解Frame類或JFrame類是怎么實現(xiàn)的,就能實現(xiàn)一個可視化窗口,學生就會覺得以Java為代表的面向?qū)ο缶幊陶Z言很簡潔、方便。講解時,可以順便講解如何使用“import”導入包。endprint
3)面向?qū)ο蟮闹R。
學生了解到所講的幾個Java系統(tǒng)類使用的便捷性、簡易性后,就會有興趣學習自己怎樣定義需要的類。講解時,可以用前后有關(guān)聯(lián)的例子進行舉例,最常見的例子就是圖形計算面積的例子。例如,可以定義圓類Circle,它有1個公有成員變量radius,表示圓的半徑,1個方法getArea(),求圓的面積。這時,定義一個圓的對象c后,可通過“c.radius=10;”直接賦值,但是這樣的方式可以給radius一個負數(shù),這顯然不符合圓的定義。這時,我們可以引導學生把radius設(shè)置為私有類型,不允許直接修改,并增加方法setRadius()設(shè)置半徑。該方法可以先判斷半徑值,如果給定半徑是負數(shù),則把radius設(shè)為0。如果學習了異常處理后,這里可以修改為半徑小于0就拋出一個異常,這樣就可以保證radius得到一個合理的值,保證程序的正確性和合法性,通過這個例子可以引出封裝性的概念。
由于每個圓在定義后,都需要用setRadiusf()設(shè)置半徑,很不方便,因此可以引出構(gòu)造方法的概念。有了構(gòu)造方法,可以方便地在定義對象時進行初始化。隨后,為了記錄生成了幾個圓對象,可以引出靜態(tài)變量。在講解繼承性時,可以引入圓柱體類Cylinder,因為圓柱體的底面是一個圓,可以在圓的基礎(chǔ)上,增加圓柱體高度height,計算圓柱體體積時可以使用圓的getArea()方法得到底面積,然后再乘以height,這樣可以引導出繼承性的概念。當然這個例子最好用類的組合來實現(xiàn),在講解類的組合時可以用繼承實現(xiàn)的方式進行比較。在講解多態(tài)性時,可以引入其他圖形,如三角形、矩形,將它們求面積的方法名稱統(tǒng)一為getArea(),引出抽象類的概念。定義抽象類Graphics,在Graphics中定義抽象方法getArea(),可以講解方法覆蓋的概念。
在子類中,同樣也需要初始化對象的構(gòu)造方法,這時可以引出子類的構(gòu)造方法的寫法,講解this和super關(guān)鍵字。這樣,就可以通過圖形計算面積的例子引出很多重要概念,并且通過這個例子,可以看出這些主要概念運用的意義和之間的聯(lián)系。如果后面講解圖形用戶界面,可以要求學生在這些基礎(chǔ)上,設(shè)計一個求各種圖形面積的圖形界面程序。
2.3 實踐教學改革
在理論課進行改革的同時,對實踐教學的改革更為重要。面向?qū)ο蟪绦蛟O(shè)計課程知識點多、應用廣泛,因此我們可以建立多層次實踐教學體系。
(1)課堂內(nèi)實驗。該類實驗主要驗證各個知識點。設(shè)計實驗內(nèi)容時,我們盡量做到前后實驗有關(guān)聯(lián),后面的實驗是對前面實驗的完善,讓學生最終能得到一個實用的小系統(tǒng)。在實驗中,可以精選一些往年計算機軟件水平考試中的軟件設(shè)計師的程序設(shè)計試題讓學生實現(xiàn),要求所有學生都必須完成,讓學生提前進入軟件水平考試的實戰(zhàn)。
(2)課程設(shè)計。設(shè)計一些規(guī)模稍大、有難度、有工作量的題目,這些題目是知識的綜合運用,讓3-5個學生組隊完成,并在最后花部分時間給每個小組進行講解,綜合評分。
(3)各類程序設(shè)計競賽、本科科研和全國計算機軟件水平考試。要求學生在學習該課程中和學完該類課程后,參加每年兩次的全國計算機軟件水平考試中的程序員和軟件設(shè)計師的考試。可對部分學習能力強的學生進行相關(guān)培訓,鼓勵他們參加ACM國際大學生程序設(shè)計競賽、百度之星程序設(shè)計競賽、TopCoder程序設(shè)計競賽、甲骨文ThinkQuest程序設(shè)計競賽等;鼓勵部分有創(chuàng)新思維的學生,讓他們選定指導教師,參加校級、省級、國家級本科科研項目。
經(jīng)過以上多個層次的實踐教學,學生的面向?qū)ο蟪绦蛟O(shè)計能力會有較大提高。參加程序設(shè)計競賽、本科科研和計算機軟件水平考試,對學生能力的鍛煉、更好的就業(yè)都有很大的好處。
3 結(jié)語
面向?qū)ο蟪绦蛟O(shè)計是計算機專業(yè)的基礎(chǔ)課,對其他課程的學習和實驗教學有較大的幫助。由于面向?qū)ο蟪绦蛟O(shè)計是當今程序設(shè)計的主流,而程序設(shè)計能力是計算機專業(yè)學生能力的最大體現(xiàn),所以該門課程至關(guān)重要。對該門課程進行教學改革,從而提高學生的面向?qū)ο蟪绦蛟O(shè)計能力也非常重要。
(見習編輯:劉麗麗;編輯:宋文婷)endprint