羅曉 江西司法警官職業(yè)學院
許昕 江西司法警官職業(yè)學院
很多剛剛學習完面向過程編程的學生在接觸到面向?qū)ο缶幊虒W習時難以適應(yīng),首先是解決思維方式的改變,其次是不會建立該有的類和對象,最后在定義方法時容易出現(xiàn)重復(fù)和程序代碼過于復(fù)雜的情況。根據(jù)以上的問題,本文將探討怎樣形成面向?qū)ο缶幊痰乃枷牒头椒?,從而準確快速的建立模型編寫代碼,同時擁有代碼的強壯性特點。
首先要有一個概念就是對象的特點是封裝和繼承,考慮完這兩點后才是考慮多態(tài)的性質(zhì)。我們的封裝思想就是你要定義的這個類是有一組數(shù)據(jù)和處理這些數(shù)據(jù)的方法。接下來就是我們要想到的是繼承性,也就是在現(xiàn)有的類的基礎(chǔ)上可以創(chuàng)建新的類,最后考慮多態(tài)。
接下來就是要深刻了解構(gòu)造方法的意義。由于構(gòu)造方法是創(chuàng)建并且初始化對象,所以在定義類之前就要想好你定義的類是用賦值法來初始化還是用構(gòu)造方法初始化,構(gòu)造方法初始化有個好處就是構(gòu)造方法進行方法重載,也就是由于參數(shù)的不同,構(gòu)造方法有多樣性。然后我們開始考慮類之間是否有繼承關(guān)系,也就是如果你定義了一個類,是否可以在已經(jīng)有的類的基礎(chǔ)上派生出你需要的新類,而他們可以共享一些屬性和方法,還可以增加一些屬性和方法,這個考慮很重要,可以減少代碼量,后續(xù)的維護性也很好。在我們的現(xiàn)實世界里,有許多對象都有繼承的關(guān)聯(lián),所以剛拿到題目的時候可以先把一些對象列舉出來,分析他們互相之間是否有聯(lián)系。分析完以上內(nèi)容后,開始考慮方法的重載和覆蓋的問題。當你列舉完后考慮是不是不同的類之間會出現(xiàn)做的行為名相同,而由于參數(shù)不同導(dǎo)致行為的內(nèi)容不同,同時進行的另外一個考慮就是繼承關(guān)系的兩個類中其中一個類有可能重新定義另外一個類的方法,這就是方法的覆蓋問題,這樣的好處是在不同的子類中有不同方法具體實現(xiàn),通常在多子類情況下出現(xiàn)。通常在這個時候已經(jīng)有一些類成型,但是這時候如果發(fā)現(xiàn)有一些類有相似的屬性和活動,這是我們可以考慮定義一個基本的抽象類??紤]完抽象類之后,再看看這些列舉出來的類是否可以出現(xiàn)多重繼承的情況,當我們碰到這種情況就可以使用接口來規(guī)范一些類的共同屬性和方法,接口技術(shù)是繼承思想的延續(xù),拿到題目區(qū)分接口和父類的選擇尤為重要。以上的論述就是我們在做面向?qū)ο缶幊填}目的前期工作。
下面我們試想一下當拿到一道需要運用面向?qū)ο蟮念}目解答時,首先考慮的就是根據(jù)功能進行分類,把題目中所有的對象都一一列舉出來,,同時把所有對象涉及到的屬性和行為都寫出來,然后把相識的對象提取出一個類。接下來把所有的類寫在一起,觀察他們之間的關(guān)系,有一些類是可以作為其他類的內(nèi)部成員出現(xiàn)的;有的類是可以通過相互的繼承關(guān)系出現(xiàn)的,這樣將大大減少代碼的工作量。最后就是考慮訪問權(quán)限問題,特別的需要相互訪問的幾個類要把他們的內(nèi)部定義設(shè)置好權(quán)限。做好這些工作后,就可以進行系統(tǒng)的問題分析了,把題目中涉及的類分別寫出來,每個類的成員屬性也全部寫出來,接下來是成員方法,當類與類之間,增加了屬性或者是方法時,可以讓一個類繼承另外一個類。最后為了程序的可讀性增加一個測試的類名,來實現(xiàn)整個活動的操作過程。具體的程序結(jié)構(gòu)為:class 父類{成員變量聲明;public 構(gòu)造方法,賦值給成員變量;public成員方法} class子類extends父類{成員變量聲明;子類的構(gòu)造方法(調(diào)用父類構(gòu)造方法,給成員變量賦值);父類的方法覆蓋}public class父類{main()方法{建立子類的對象子;類的構(gòu)造方法;調(diào)用對象的成員方法;println打印語句}。所有的面向?qū)ο蟮膯栴}大體結(jié)構(gòu)都可以使用這種模式思考,特別適用于剛結(jié)束完面向過程編程學習的大學新生,總結(jié)出規(guī)律性的經(jīng)驗將增強他們的編程自信。
我們在教授學生在面向?qū)ο笤O(shè)計時,首先要告訴他們面向?qū)ο蟮脑O(shè)計是今后編程的主流思想,不管今后在軟件行業(yè)的哪個方向,包括軟件類企業(yè),網(wǎng)絡(luò)類企業(yè)的技術(shù)要求都是需要掌握面向?qū)ο?。多進行實際項目的操作有利于熟能生巧,我們要鍛煉一種思維模式,那是一種概念,判斷和推理的完全化過程,我們要用事物發(fā)展的邏輯化來分析解剖事物,用辯證主義思想來反復(fù)考證事物,最后用進取精神是實現(xiàn)他們。盡管會有很多困難,只要我們多請教,同時發(fā)揮自己的創(chuàng)新能力,就能在IT職場中實現(xiàn)自我價值。課堂的思維時間有限,更多的是課后的理解。作為程序員,應(yīng)該有終身學習的人生概念,終身學習我們要做到把現(xiàn)在流行的編程語言做一些對比,發(fā)現(xiàn)他們之間的聯(lián)系和區(qū)別,把相似的語言都熟練掌握,這樣就會有一種編程的自信。終生學習的重要性對于軟件行業(yè)來說非常重要,流行軟件不斷發(fā)展,要想不被落下,就要不斷掌握新的技術(shù),雖然新技術(shù)很生疏,但是基礎(chǔ)知識卻是和其他編程語言相通的。同時要不放過任何學習機會,通過大學生計算機知識競賽,軟件行業(yè)創(chuàng)新創(chuàng)業(yè)大賽來激勵自己,給自己青春一定的壓力,這些比賽都是非常好的學習機會。同時,學生要熟練掌握編程的學習方法,主要的就是分析法。分析法的關(guān)鍵原理就是先查看編程的正確答案是什么,一條一條的語句自己進行分析理解。然后自己重新做一遍,做完以后再對照原題的答案,找到自己的不足和問題出在哪里。最后根據(jù)自己的思路再想想用其他的編程方法能否同樣得到相同的結(jié)果。所以我們通過常年的編程教學談到了一個情況就是學生不但要有獲得有價值信息的能力和方法,還要有判斷信息有效性以及怎樣把這些信息變成自己能夠利用的資源和參考資料。最后一個面向?qū)ο缶幊痰膶W習有一個方面是關(guān)于正確認識挫折。編程有時間壓力,還有當不能運行出正確答案還找不到錯誤的原因時候,很容易產(chǎn)生放棄的念頭,所以要學會根據(jù)實際情況調(diào)整自己的預(yù)期目標,再逐步地提高難度才行。
總之我們培養(yǎng)學生面向?qū)ο笏枷牒头椒ň蛻?yīng)該先把以上的基本概念和技巧講通俗,然后不斷地講解分析實例,講完同學再自己重做一遍實例,最后練習新的實例,老師再講解新的實例,這樣一個過程才是高效的對象思維的訓(xùn)練模式。