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

針對(duì)不同的問(wèn)題我們可以通過(guò)不同的思維模式去嘗試多種解決方法。條條大路通羅馬,沒(méi)有對(duì)錯(cuò)之分,只是針對(duì)不同的問(wèn)題考慮合適的處理方法而已,比如是否需要考慮后期代碼的擴(kuò)展維護(hù)及突發(fā)故障等情況。