鄧芳
摘要:面向對象編程是目前最為流行的編程思想,如何讓學生掌握這種編程思想,并做到觸類旁通,具備快速學習的能力呢?本文對如何在實例教學過程中培養學生面向對象的程序設計思維進行了詳細闡述。
關鍵詞:實例教學;面向對象;思維能力
中圖分類號:G434 文獻標識碼:A 論文編號:1674-2117(2017)08-0087-02
目前,程序設計主要有兩種思維方式:一種是面向過程的程序設計,另一種是面向對象的程序設計。其中,面向對象的程序設計思維更符合對現實世界的描述,為廣大軟件開發者所推崇。面向對象的程序設計思想認為:世間萬事萬物皆為對象,如孩子、轎車、馬、故宮、船、桌子等,我們身邊的事物都是具體的個體(對象),當我們說到或想到這些個體時,頭腦中馬上會想到它們具有什么特點、功能、作用等。也就是說,如果我們想用計算機來解決現實世界的問題,那就要讓計算機按人類的思維習慣來處理問題,這就是面向對象思維的緣由。那教師如何將面向對象的思維方式教給學生呢?在教學過程中,教師應如何培養學生的這種編程思維呢?下面,筆者結合自己的教學實踐來談談如何培養學生面向對象的程序設計思維。
確定教學目標
根據“TIOBE開發語言排行榜”,在全世界排名前二十的開發語言中,有近60%為面向對象的語言,其中包括Java、C#、C++等流行的面向對象的語言,因此學校有必要開設一門面向對象的程序設計課程。但無論選擇開設哪種面向對象的語言課程,都要明確教學目標,也就是說是教授一門語言技術,還是教授一種編程思想,俗話說“授人以魚不如授人以漁”,所以我們確定課程的教學目標是培養學生面向對象的編程思想,教給他們快速學習的能力。
確認教學內容
課程的教學目標決定教學內容。因此,課程內容以講授面向對象的思想為主,其中包括什么是面向對象、面向對象的特點以及面向對象的實現三個方面。
課程從面向對象的封裝性、繼承、多態三大特性展開,這三個特征是所有面向對象的程序設計語言都具備的共同特點,也是面向對象的編程的精髓所在。無論是Java語言還是.net開發語言,都是基于這三大特性展開的,而Java語言是目前最為流行的開發語言,所以筆者選擇依托Java語言,來實現面向對象的編程思想。
優選教學實例
由于案例教學的實踐性較強,所以真實的典型案例能夠激發學生的學習興趣。獨立研究和相互討論的方式,也能提高學生分析問題和解決問題的能力。
在本課程中,選擇的案例不僅要求具有真實性,更強調延續性。所謂延續性,是指對面向對象的各個階段(分析、設計類—封裝—繼承—抽象—多態)均采用同一個項目案例,然后分析各個階段中的這個項目,將項目從小到大排序,逐漸完善。
1.教學案例——寵物商店
(1)分析、設計類:首先分析寵物商店可以有哪些寵物(發現類),然后分析狗、鴨子等動物具有什么特征(發現類的屬性),接著分析狗、鴨子有什么行為(發現類的方法),最后以類圖的形式表示出來。
(2)封裝:這是面向對象的編程三大特性之一。它是指將類的某些信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。例如,我們針對狗類、鴨子類的屬性進行私有化設置,并在方法中添加對屬性的setter/getter方法。
(3)繼承:通過前兩步的分析發現,狗類和鴨子類有共同的屬性(名字、健康值、與主人的親密度等)和方法(輸出相關屬性、setter/getter方法),如果增加一種寵物,那還要再寫一個具有以上屬性和方法的類。因此,我們建立了一個父類Pet,將所有寵物的共同屬性和方法集中在此類中,然后狗類、鴨子類等繼承于父類,由此引出繼承及其方便修改代碼、減少代碼量等優點。
(4)抽象:在繼承中,我們建立了三個類,分別為父類Pet、子類Dog和子類Duck,并創建了屬于這三個類的對象。這在語法結構上沒有任何問題,但是父類Pet產生的對象是沒有任何意義的,因為父類Pet沒有具體的個體,所以我們引入抽象,抽象類可以說是起到了模板的作用。
(5)多態:同一個引用類型使用不同的實例而執行不同的操作。在這個案例中,可以在子類添加為寵物治病的方法public void toHospital(),然后創建一個主人類Master,它可以為生病的寵物治病public void Cure(Pet pet)。最后我們來測試這個功能:
Pet pet = new Dog();
Master master = new Master();
master.Cure(pet);
即,同一個引用類型Pet pet,引用不同的實例pet=new Dog()或pet=new Duck(),會引發對不同寵物的治療方法,而代碼在長度及可讀性上都進行了極大的優化。
通過本案例,筆者對面向對象編程思想的精華進行了講解,并在每個階段中,依托Java語言來實現、驗證案例。學生在這樣的實驗及理論課程中,更加容易理解和體會面向對象的編程思想中的抽象概念。
2.學生自學作品案例
除了教師提供教學案例,學生還要能夠自主分析、設計案例。因此,筆者設計了幾個案例,讓學生在課后完成,以培養學生分析問題和解決問題的能力。例如,在“汽車租賃”項目中,學生完全可以參照教學案例的階段進行設計,這是一個鞏固知識的案例;“消除飛機”或“消除字母”等游戲項目,則是為了提高學生的應用能力的項目。
筆者通過“課上、課下”兩手并進,加深了學生對面向對象編程思想的理解,學生對此也普遍反映良好。
結束語
在案例教學的實施過程中,我們不僅要求學生采用Java來實現項目,還要求他們了解另一種語言(C++或C#)。在學習的過程中,學生不僅能對比不同的開發語言,實現面向對象的程序設計,還能鍛煉舉一反三的能力,做到觸類旁通。
案例教學也有利于提高教師的整體水平。首先,教師必須搜集、整理合適的案例,并對案例中所涉及的相關知識有較深刻的認識;其次,教師還必須有較強的綜合能力,這樣才能在案例分析討論結束后進行總結和點評。