在談?wù)撁嫦驅(qū)ο蠛兔嫦蜻^程區(qū)別之前,我們需要了解一下什么是面向?qū)ο蠛兔嫦蜻^程是什么?總的來說,面向?qū)ο蠛兔嫦蜻^程都只是一種編程思想,對問題不同角度得去分析和解決。
1、思想上的區(qū)別
面向過程:簡單的來說,面向過程就是將事物分為不同的步驟,根據(jù)這些步驟去完成編程。我們可以以五子棋來理解面向過程思想。在面向?qū)ο蟮乃悸分芯褪窍确治鑫遄悠逍枰牟襟E:
(1) 繪制棋盤
(2) 開始游戲
(3) 黑子下
(4) 繪制黑色棋子
(5) 判斷輸贏
(6) 白子下
(7) 繪制白色棋子
(8) 判斷輸贏
(9) 返回步驟(3)
然后,在開發(fā)過程中,將以上步驟一步一步地實(shí)現(xiàn)
面向?qū)ο螅憾嫦驅(qū)ο蟮脑O(shè)計(jì)思路則是將問題分為不同的部分對象,并給對象賦予屬性和行為。同樣拿五子棋為例,在實(shí)現(xiàn)時(shí),需要去分析需要那些對象。
(1) 棋子對象(負(fù)責(zé)黑白雙方落子等行為,僅需要給他們一個(gè)顏色屬性進(jìn)行區(qū)分即可)
(2) 棋盤對象(負(fù)責(zé)繪制棋盤,包括棋子的位置繪制)
(3) 規(guī)則對象(負(fù)責(zé)對五子棋進(jìn)行輸贏判斷,先后手順序判斷等)
從這個(gè)例子中,我們可以發(fā)現(xiàn),面向過程在實(shí)現(xiàn)中比較抽象,考慮的方面比較多。而面向?qū)ο螅脤ο笾苯映霭l(fā),更加趨向于我們?nèi)祟惖乃枷?strong>。
2、維護(hù)上的區(qū)別
不但在實(shí)現(xiàn)上,包括后續(xù)的功能維護(hù)上,也有很多不同。依舊以上述的五子棋為例。我們?nèi)绻谖遄悠宓挠螒蛑刑砑右粋€(gè)新的操作,例如悔棋。那么他們雙方需要如何去實(shí)現(xiàn)呢。
面向過程:如果是面向過程的話,我們不但需要在每個(gè)人操作時(shí)判斷是否有悔棋操作,還可能對前期一系列的步驟進(jìn)行修改,數(shù)據(jù)的存儲(chǔ)。對棋子的落子位置進(jìn)行存放等等問題,改動(dòng)可以說是十分巨大的。
面向?qū)ο螅憾嫦驅(qū)ο缶筒恍枰心敲创蟮母膭?dòng),因?yàn)樵诿嫦蜻^程的思路中,整個(gè)五子棋游戲主要分為:棋子、棋盤、規(guī)則三部分組成。進(jìn)一步分析如果我們加了悔棋,變化在哪里?規(guī)則是不會(huì)變得、棋子也不會(huì)變。唯一會(huì)變得就是棋子在棋盤上的布局。我們只需要在棋盤系統(tǒng)中增加一個(gè)棋譜回退的功能即可。局部的變化就可實(shí)現(xiàn)。
3、從性能上的區(qū)別
這個(gè)就是比較明顯得事情,首先,面向?qū)ο笤趯?shí)現(xiàn)中需要類得組成,而類得調(diào)用需要實(shí)例化,這樣開銷就比較大,會(huì)消耗很多得資源,相對于面向過程在性能上就會(huì)低一些。所以在主要考慮性能時(shí),一般會(huì)采用面向過程而不是面向?qū)ο蟆?/p>
簡單的總結(jié)一下:
面向過程:性能方面比較高,但在維護(hù)、復(fù)用、擴(kuò)展上比較差
面向?qū)ο螅河捎诿嫦驅(qū)ο笥腥筇匦裕悍庋b、繼承、多態(tài)。也就帶來了三個(gè)特點(diǎn):易維護(hù)、易復(fù)用、易擴(kuò)展。但這也同時(shí)消耗了性能,所以性能方面比較低。
最后提個(gè)小問題:面向過程的性能一定比面向?qū)ο蟾邌幔?/p>