面向對象技術現在已經成為計算機科學與技術中的一個重要領域,并滲透到計算機學科的很多方向。面向對象的思想方法屬于計算機專業學生必須學習掌握的核心課程內容。
由于技術發展日新月異,計算機專業教學特別是教材編寫已經相對滯后,面向對象程序設計課程亦不例外。ACM和IEEE/CS把計算機學科的教學歸為理論、抽象、設計三個層次過程。面向對象程序設計課程是一門理論與設計(工程實踐)聯系很強的一門課而且計算機產業界對象技術產品近幾年如雨后春筍,越來越多的工程師加入到使用這些產品的行列,這迫切要求專業教學一定要與社會需要相結合。
目前,大多面向對象程序設計教材對面向對象的概念講述比較多,或者對算法有比較多的闡述,理論性很好。對其中的基本概念是有必要講解清楚,但是缺乏比較恰當的聯系實際程序設計,很多學生學完后對這門課程的收獲僅停留在一些教條或死記硬背的術語上,不能學以致用。
面向對象程序設計課程的教學目標應該定位于掌握應用面向對象做程序設計的概念、方法,并對當前廣泛使用的面向對象程序設計語言及環境有初步了解,培養程序設計的實踐能力。
教學內容的改革——
選定基本核心內容,融合新技術的思想
第一,面向對象語言的選擇問題。
現在很多教材是以C++為語言工具來講授的,但C++/C不是純面向對象的語言,而是一種過程、對象混合型語言。學生一般開始學習程序設計接觸的便是面向過程的程序語言,以帶有面向過程成分的語言來講述面向對象程序設計對學生的對象思維有影響。另外一方面,用ISO標準的C++來教學與產業界Windows平臺近幾年廣泛使用的面向對象的MFC 有差距,而且現在windows平臺上的開發也正從win32的MFC/VC++全面向.Net過渡(基于.Net平臺上也有純面向對象語言C#),其變化之大就跟當初從DOS轉向windows平臺;也曾經使用過VC ++來作為面向對象程序設計教學的語言工具,但學生往往被集成開發環境及龐大的MFC所迷惑,本課程的學習的重點得不到保障。
因此,純面向對象特性的java語言來作為面向對象程序設計的教學語言是很好的選擇,不但java語言能較好地體現面向對象的思維方式,而且產業界在高端計算方面java語言正在更多地奪取C++的陣地,成為主流。由于java語言應用廣泛,本身涉及很多的技術知識,在面向對象程序設計課程的上機實驗使用java時,需要預先給學生準備好java程序設計必備的程序設計環境安裝配置基礎知識的材料,不讓語言本身的因素成為障礙,雖然對基礎好的善于自學的學生不是問題。Java語言的集成開發環境選用Sun公司的跨平臺的開發工具NetBean,在本課程的網頁上給出調試程序的簡單例子及步驟,從學生實驗來看,大多數學生能較快地使用這個工具,比以前用MS VC++的班級的實驗課效果大有改進,讓學生把更多注意力放在程序設計方面。
第二,選擇基本的教學內容,不求內容多,重點對這些核心內容教學。可以主要選擇這些內容來講:類和對象、方法、繼承、接口、事件處理、多態性與抽象類、線程、程序和包。
第三,對象概念的圖形表示法選用UML. 講到有關概念需要用圖形來表示時,用業界標準的統一建模語言來表達,不但能清晰地描述概念,而且能讓學生對復雜系統建模有潛移默化的影響。 UML本身也是很龐大的,在這門課程里同樣不能讓UML成為學習概念的障礙,而是理解概念的更好的助手,所以當講到相關概念要用圖形來表示概念時才出現UML的表示法,要讓學生知道UML是面向對象思維分析的工具。在這里不過多講述UML,不會影響課程的教學效果。實際上,盡管UML內容繁雜,往往也是80%的場合只用到了20%的UML.我們在教學時只在本課程教學用的網頁上給出一個精練的可視化的UML表示法,讓學生需要使用時到上面自己查找圖形表示法,而不另外用專門的學時講授UML。
教學方法的改革——
重點突破,重視實踐,引入實例分析
這些內容應該作為重點讓學生掌握:類與對象、分類與繼承、事件處理。對象技術在各個領域應用很多,其中的概念及方法是很多的,但應該使學生把最基本的東西多花時間去學習理解。
在講述有關概念時,讓學生明白為什么要提出使用該概念或方法是很重要的,使他們清楚在什么場合應用,有不少學生會被眾多的概念所迷惑,因為他們本來就很少程序設計的經驗。所以針對每部分內容, 都應該準備一些實例結合相關的概念來講授。現在的面向對象程序開發環境大多有PME(Properties, Methods, Events)模型,有幾章的內容都可以聯系起來讓學生看一些精選的內容。還有就是框架(基礎類庫)技術, 也應該作為實例結合相關內容進行講述。
有一些由編程經驗豐富的技術專家寫出的技術叢書,里面有不少經典易懂的實例講述,我們可以把平時在那些開發類的技術叢書中學習積累的例子引入來講,當然科研工作中也可能積累一些對講課很有益的東西可以轉化到講課當中。從一些開發經驗豐富的著作中及自己的開發實踐中提取的恰當例子,對學生的學習很有幫助,有助于他們“現場直播式”的較快理解有關概念,并有可能通過教師設計的實例親自動手加以實踐、實現,同時也可以增強了學生學習的興趣、積極性。
為了讓學生通過實踐理解所學內容,除了提供實例分析外,還向他們提供規模難度不同的大作業題目讓其選做, 學得好的、學得差根據自己的掌握程度在教師指導下選做大作業。這也是教學方法的一個改革實踐。
結語
本文結合作者面向對象程序設計的教學經驗和軟件開發實踐經驗, 就面向對象程序設計課程的教學內容的選擇、更新,理論與實踐的結合等方面提出了一些觀點及措施, 有些也是教學方法的改革嘗試。在軟件技術發展迅猛的時代,我們這方面的課程教學也應該相應有發展,也應有更多的教學、產業界人員、學生一起來促進教學效果的改進。