陳新龍
簡單講一講面向對象和面向過程的編程思想。目前市面上流行著不同的編程語言,例如Scratch、Python、Java、GO、C等等,經(jīng)常有同學會問小陳老師,這么多的編程語言,那么到底哪一種編程語言好學?哪一種編程語言容易上手呢?這些編程語言之間有什么區(qū)別呢?
目前的編程語言底層邏輯都離不開三大編程思想:面向過程編程、面向對象編程和面向切面編程。其實編程的這些思想都源自我們的日常生活中,重要的不是學編程本身,而是通過編程來解決問題。
面向過程:面向過程的思想是把一個項目、一件事情按照一定的順序,從頭到尾一步一步地做下去,先做什么,后做什么,一直到結束。這種思想最好理解,和我們?nèi)粘W鍪虑榈姆椒ㄒ恢隆?/p>
面向對象:面向對象的思想是把一個項目或者一件事情分解成更小的項目,或是分解成更小的部分。每一部分負責單一方向的功能,最后再將這些部分組合而成為一個整體。好比制造汽車,汽車公司不會從頭開始打造汽車,他們會從配件廠商那里購買所需要的零件如發(fā)動機、外殼、玻璃、輪胎最后進行總裝即可。這種思想適合多人的分工合作,類似公司的模式,在公司中分成各個部門,每個部門分別負責該部門的職務,這樣各個部門可以充分發(fā)揮自己的特色,產(chǎn)品只要符合標準就可以了。
面向過程的核心是分析出解決問題所需的步驟,然后用函數(shù)把這些步驟一步一步解決實現(xiàn),使用的時候一個一個調(diào)取就可以了。
面向對象是把構成問題的事物分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。
假設我們需要編寫一個五子棋游戲。按照面向過程的設計思路就是首先分析問題的步驟:1.開始游戲;2.繪制棋盤;3.黑子先走;4.白子后走;5.判斷輸贏。從第六步開始重復3、4、5的步驟,直至判斷輸贏得出了最后的勝負結果。
如果按照面向對象的思想來解決五子棋的問題,可以分成三大業(yè)務:1.黑白雙方,這兩方的行為是一模一樣的都是下棋;2.棋盤系統(tǒng)負責繪制畫面;3.規(guī)則系統(tǒng),負責判定勝負結果。
從上述描述我們可以看出,面向對象是以功能來劃分的,而不是步驟,同樣是繪制棋盤,這個行為在面向過程設計中分散成多個步驟,很可能繪制出不同的版本,因為設計人員會根據(jù)實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現(xiàn),從而保證了繪圖的統(tǒng)一。
兩種思想在初期可能感受不出有什么區(qū)別,如果后期游戲需要升級,在游戲中增加一些其他功能時就能體現(xiàn)出區(qū)別了。比如我想在游戲中加入悔棋的功能,在面向過程的代碼中我需要重新構造,程序的順序需要大幅度調(diào)整,但是如果是面向對象的代碼中,只用改動棋盤對象就可以了,只需要在棋盤對象中加入悔棋的功能,不會對整體的順序產(chǎn)生大的影響。
針對不同的問題我們可以通過不同的思維模式去嘗試多種解決方法。條條大路通羅馬,沒有對錯之分,只是針對不同的問題考慮合適的處理方法而已,比如是否需要考慮后期代碼的擴展維護及突發(fā)故障等情況。