,, ,,,
“面向對象程序設計”課程是我校自2008年起針對信息管理與信息系統專業開設的一門程序設計必修專業課程,也是整個計算機課程教學體系中非常重要的一個環節。該課程采用具有簡單、安全、與平臺無關、多線程等特點的JAVA程序設計語言。開設此門課程,旨在讓學生了解面向對象程序設計的基本思想和基礎知識,提高自主學習能力以及分析和解決問題的能力、創新能力,為其后續課程的學習奠定良好的基礎。根據多年的教學經驗,我們總結了教學過程中存在的的問題,并進行了一些改革和探索以解決這些問題。
“面向對象程序設計”課程涉及的概念多、零散、抽象。教師大多是按照設計好的教學模式,通過電子課件來進行教學。由于教學時數和教學進度的制約,理論課往往成了電子課件的展示課,教師對學生的關心程度幾乎為零,學生不能主動參與到教學環節中[1]。加之我校信管專業部分學生是文科生,因此在學習這門課程時更是有一定的難度。
教師以往在講授這門課程時通常存在兩種情況:一是忽略概念的講解,直接講例題。由于學生之前主要學習C語言程序,已經習慣了面向過程的編程思想,如果缺乏理論的指導,很難轉變到面向對象編程思想。二是先講解JAVA中的概念,然后再舉例說明。由于JAVA的概念和語法本身就難以理解,加上每個例題之間沒有相互的關聯,教師容易陷入解釋概念和語法的誤區中,忽略了算法設計這一環節。因此,學生即使掌握了每個知識點,也不能學以致用。
出現這些問題的根本原因在于沒有把計算思維教育融入到教學中。面向對象程序設計要從面向對象的思想、面向對象的抽象概念和算法編程等方面對學生進行計算思維訓練,提高學生分析、解決問題的綜合能力[2]。
“面向對象程序設計”是一門很重視實踐環節的課程,以往的實驗課僅僅是對理論課所講授的內容做驗證,實驗內容單一、枯燥,自主設計的內容很少。實驗內容大多數來源于教材,針對每個章節所設計,內容陳舊,前后缺乏關聯。另外,學生在實踐環節主要關注語法規則,只是機械地模仿或照抄書本上的例題,找語法錯誤,很難深入分析問題,不能融會貫通,對系統開發的方法、概念認識模糊,即使所有的實驗題目都會做,沒有通過一些綜合的項目訓練,也很難把握面向對象程序設計的總體思想[3]。
由于實驗內容的設置缺乏科學性、系統性,學生僅能使用JAVA語法規則編寫簡單的程序,而分析問題、解決問題和系統設計等一系列的計算思維十分欠缺,遇到實際問題仍感到無從下手。
以往“面向對象程序設計”課程的考核主要采用筆試,考核內容多是類、對象、方法、多態、繼承、接口和多線程等概念。筆試試卷從題庫里抽題,不能根據學生的實際情況進行組卷。學生往往對一些知識點或概念進行記憶性的學習,忽略實際編程能力的提高。這種考核方式存在試題難易度不易把握、評價標準不夠合理的問題,即使學生取得了高分,也不能如實反映教學中的薄弱環節,更體現不出學生的學習能力和創造能力,失去了考核的目的和意義。因此,需要根據該課程和學生的特點,找出合適的考核方式[4]。從2011年起,我校就在調整課程設置、改進理論和實驗課教學內容、加強學生計算思維訓練、提高學生創新能力和綜合素質等方面進行了一系列的改革。
在傳統的教學模式下,學生不知道為什么要學習這門課程,也不明白學習這門課程對今后的學習和工作有何用處。因此,我們利用每學期第一次理論課向學生介紹課程的學習目標和今后學習的方向,讓學生明確JAVA課程學習的目標是掌握JAVA的基本概念和語法,熟悉面向對象的編程思想和方法,能夠使用JAVA語言進行一些簡單的系統設計和開發,在這個基礎上可以繼續學習J2ME編程和J2EE企業開發等。
在2012年為信息管理和信息系統專業制定的新的培養方案中,我們將面向對象程序設計課程教學時數由60學時調整為72學時,其中理論課36學時,實驗課36學時。在課程結束之后,繼續開設一門與JAVA語言相關的“Android應用系統”限選課程,讓學生能夠了解JAVA在實際開發中的應用。
對理論教學內容進行調整,注重將計算思維訓練融入到教學內容中,讓學生掌握面向對象的編程思想和方法。瑞士著名的計算機科學家Niklaus Wirth教授曾經說過:因為要進行程序設計,才學習語言,語言是程序設計的工具,本質是為了程序設計,而不要本末倒置[5]。
課堂上,教師不再過多地講解語法,而是強調面向對象程序設計的優勢,體現面向對象的編程思想。由于學生的先修課程是C語言,面向過程的編程思維方式在學生的腦海里根深蒂固。C語言里的許多功能需要編寫函數來完成,但是在JAVA里只要直接調用系統類庫中的方法就能完成。例如,用JFrame類創建一個簡單的窗口,由此可以引入類的概念。類是對客觀事物的抽象,是用來創建對象的模板。類中包括對同一類型事物的屬性和行為的描述,通過接口和外界發生聯系。類可以建立對象,每個對象可以具體地說明數據和行為,因此能逐步引入面向對象的基本思想,潛移默化地影響學生。向學生解釋面向對象的編程規則、為什么要有這些規則和如何應用這些規則的過程,實際上就是在培養學生的計算思維。
注意概念和例題的講解,前后要有一定的聯系和層次結構。面向對象中的許多概念看似零散,沒有關聯,但實際上對編程起著十分重要的作用[6]。如果只是單純講解某一個點,沒有把相關的概念串聯在一起,學生會感到一頭霧水,毫無頭緒。在進行類和對象這一章的教學時,我們選取了計算梯形面積的例子。具體步驟是先定義一個具有計算面積方法的人,然后分別建立對象laderOne和laderTwo計算不同梯形的面積。在講到后面實例變量和類變量的時候,由于要計算下底相同、上底和高不同的梯形面積,就可以把下底定義成類變量。在講到多態時,可以將這個例題進一步擴展,建立一個圖形類,圖形類有梯形、圓形子類,通過實現圖形類的抽象方法完成面積的計算。在講到接口內容時,仍然可以使用圖形面積的例子,讓學生理解使用多態和接口的不同之處。這樣的教學過程使學生清楚地看出這些主要概念的運用及其之間的聯系[7],有助于進一步從面向對象思想和抽象的概念角度培養學生計算思維能力。
實踐教學是對理論教學效果的檢驗。通過實踐教學,把面向對象編程思想和語言內容相結合,從邏輯思維方面訓練學生的計算思維,提高學生的自主學習能力,培養學生的團隊協作能力[8]。因此,實踐教學的改革顯得尤為重要。
實踐課程的開始階段主要以驗證性實驗為主。針對每次理論課講解的內容,從歷年的全國計算機等級考試、學科競賽中精選一些題目,讓學生完成。在選擇題目時注意前后的連貫性。
實踐課程的中后期則通過課程設計來加強學生的編程能力和面向對象思想的培養。課程設計分為教師引導、學生實踐、交流討論和提交作品考核4個階段。
我們根據學生的具體情況設計了3-4個課程設計項目。這些項目要難度適中、知識覆蓋面廣,每個項目列出需要掌握的教學知識點。4個課程設計項目和涉及的主要知識點如表1所示。學生根據能力組成小組,完成其中的一個項目。指定一名學生為組長,其余學生各有分工,在提交課程設計報告和完成的項目時進行現場答辯演示。在課程設計實施過程中,教師按照軟件工程中需求分析、項目設計、實施、調試維護4個階段指導學生完成整個項目。在實踐課上,教師把實訓項目任務書下達給學生,根據任務書,指導學生完成需求分析,對所涉及的技術要點進行講解;學生在課堂上對所需要實現的功能和技術開展討論,并提出需要解決的問題。學生根據任務書的要求完成項目。

表1 課程設計項目及主要知識點
采用筆試和實踐成績相結合的方式考核,筆試、實踐成績各占50%。實踐成績主要依據最后上交的課程設計報告和現場答辯。答辯以小組為單位,選派一名學生對項目進行演示和現場解答。教師將根據每個小組學習態度、課程設計報告的規范性、項目設計的情況、技術能力、編程能力、現場演示和回答問題情況,并結合每位同學的具體工作量打分[9]。這種考核方式更有利于綜合評價學生的能力,激發學生的學習熱情。
我們改進了理論教學方法,注重培養學生的計算思維;編寫實驗指導,通過案例訓練學生的實踐技能。經過幾年的努力,不僅提高了整個教學團隊的教學能力和科研水平,學生也取得了可喜的成績。
從2012年開始,我校信管專業的學生陸續參加了“藍橋杯”軟件設計大賽,2013年獲得“藍橋杯”軟件設計大賽安徽省的二等獎和三等獎,2014年獲得了全國總決賽三等獎。學生開發的基于Android平臺的“人體導航”軟件,參加安徽省“創青春大學生創業大賽”蚌埠醫學院校內選拔賽中獲得第一名,并選送安徽省參賽。此外,以學生為主體成功申報了3項國家級大學生創新創業項目。
教學改革任重道遠,一切改革工作都要以促進學生成長為目的[10]。
我們在理論和實踐教學改革中注重計算思維能力的訓練,鍛煉了醫學院校學生的邏輯思維能力,培養了學生嚴謹的工作作風和創新能力。教學改革應該是全方位的,不僅要注重課堂教學環節,還要關注學生的課外學習、網絡在線學習等,這些方面都需要我們進一步探索。