面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調(diào)用就可以了。
面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個對象露久,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為欺栗。
例如五子棋毫痕,面向過程的設(shè)計思路就是首先分析問題的步驟:1、開始游戲迟几,2消请、黑子先走,3瘤旨、繪制畫面梯啤,4竖伯、判斷輸贏存哲,5因宇、輪到白子,6祟偷、繪制畫面察滑,7、判斷輸贏修肠,8贺辰、返回步驟2,9嵌施、輸出最后結(jié)果饲化。把上面每個步驟用分別的函數(shù)來實現(xiàn),問題就解決了吗伤。
而面向?qū)ο蟮脑O(shè)計則是從另外的思路來解決問題吃靠。整個五子棋可以分為 1、黑白雙方足淆,這兩方的行為是一模一樣的巢块,2、棋盤系統(tǒng)巧号,負責(zé)繪制畫面族奢,3、規(guī)則系統(tǒng)丹鸿,負責(zé)判定諸如犯規(guī)越走、輸贏等。第一類對象(玩家對象)負責(zé)接受用戶輸入卜高,并告知第二類對象(棋盤對象)棋子布局的變化弥姻,棋盤對象接收到了棋子的i變化就要負責(zé)在屏幕上面顯示出這種變化,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定掺涛。
可以明顯地看出庭敦,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟薪缆。同樣是繪制棋局秧廉,這樣的行為在面向過程的設(shè)計中分散在了總多步驟中,很可能出現(xiàn)不同的繪制版本拣帽,因為通常設(shè)計人員會考慮到實際情況進行各種各樣的簡化疼电。而面向?qū)ο蟮脑O(shè)計中,繪圖只可能在棋盤對象中出現(xiàn)减拭,從而保證了繪圖的統(tǒng)一蔽豺。
功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計的可擴展性。比如我要加入悔棋的功能拧粪,如果要改動面向過程的設(shè)計修陡,那么從輸入到判斷到顯示這一連串的步驟都要改動沧侥,甚至步驟之間的循序都要進行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑捚茄唬挥酶膭悠灞P對象就行了宴杀,棋盤系統(tǒng)保存了黑白雙方的棋譜,簡單回溯就可以了拾因,而顯示和規(guī)則判斷則不用顧及旺罢,同時整個對對象功能的調(diào)用順序都沒有變化,改動只是局部的绢记。
再比如我要把這個五子棋游戲改為圍棋游戲扁达,如果你是面向過程設(shè)計,那么五子棋的規(guī)則就分布在了你的程序的每一個角落蠢熄,要改動還不如重寫罩驻。但是如果你當(dāng)初就是面向?qū)ο蟮脑O(shè)計,那么你只用改動規(guī)則對象就可以了护赊,五子棋和圍棋的區(qū)別不就是規(guī)則嗎惠遏?(當(dāng)然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎骏啰?直接在棋盤對象中進行一番小改動就可以了节吮。)而下棋的大致步驟從面向?qū)ο蟮慕嵌葋砜礇]有任何變化。