?面向過(guò)程
面向過(guò)程就是分析出解決問(wèn)題所需要的步驟潜沦,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn)艾凯,使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了副编。
?面向?qū)ο?/h2>
面向?qū)ο笫前褬?gòu)成問(wèn)題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟妆毕,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為慎玖。
例如五子棋,面向過(guò)程的設(shè)計(jì)思路就是首先分析問(wèn)題的步驟:1笛粘、開(kāi)始游戲凄吏,2远舅、黑子先走,3痕钢、繪制畫面,4序六、判斷輸贏任连,5、輪到白子例诀,6随抠、繪制畫面,7繁涂、判斷輸贏拱她,8、返回步驟2扔罪,9秉沼、輸出最后結(jié)果。把上面每個(gè)步驟用分別的函數(shù)來(lái)實(shí)現(xiàn)矿酵,問(wèn)題就解決了唬复。
而面向?qū)ο蟮脑O(shè)計(jì)則是從另外的思路來(lái)解決問(wèn)題。整個(gè)五子棋可以分為 1全肮、黑白雙方敞咧,這兩方的行為是一模一樣的,2辜腺、棋盤系統(tǒng)休建,負(fù)責(zé)繪制畫面,3评疗、規(guī)則系統(tǒng)测砂,負(fù)責(zé)判定諸如犯規(guī)、輸贏等壤巷。第一類對(duì)象(玩家對(duì)象)負(fù)責(zé)接受用戶輸入邑彪,并告知第二類對(duì)象(棋盤對(duì)象)棋子布局的變化,棋盤對(duì)象接收到了棋子的i變化就要負(fù)責(zé)在屏幕上面顯示出這種變化胧华,同時(shí)利用第三類對(duì)象(規(guī)則系統(tǒng))來(lái)對(duì)棋局進(jìn)行判定寄症。
可以明顯地看出,面向?qū)ο笫且怨δ軄?lái)劃分問(wèn)題矩动,而不是步驟有巧。同樣是繪制棋局,這樣的行為在面向過(guò)程的設(shè)計(jì)中分散在了總多步驟中悲没,很可能出現(xiàn)不同的繪制版本篮迎,因?yàn)橥ǔTO(shè)計(jì)人員會(huì)考慮到實(shí)際情況進(jìn)行各種各樣的簡(jiǎn)化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤對(duì)象中出現(xiàn)甜橱,從而保證了繪圖的統(tǒng)一逊笆。
功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。比如我要加入悔棋的功能岂傲,如果要改動(dòng)面向過(guò)程的設(shè)計(jì)难裆,那么從輸入到判斷到顯示這一連串的步驟都要改動(dòng),甚至步驟之間的循序都要進(jìn)行大規(guī)模調(diào)整镊掖。如果是面向?qū)ο蟮脑捘烁辏挥酶膭?dòng)棋盤對(duì)象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜亩进,簡(jiǎn)單回溯就可以了症虑,而顯示和規(guī)則判斷則不用顧及,同時(shí)整個(gè)對(duì)對(duì)象功能的調(diào)用順序都沒(méi)有變化归薛,改動(dòng)只是局部的谍憔。
再比如我要把這個(gè)五子棋游戲改為圍棋游戲,如果你是面向過(guò)程設(shè)計(jì)苟翻,那么五子棋的規(guī)則就分布在了你的程序的每一個(gè)角落韵卤,要改動(dòng)還不如重寫。但是如果你當(dāng)初就是面向?qū)ο蟮脑O(shè)計(jì)崇猫,那么你只用改動(dòng)規(guī)則對(duì)象就可以了沈条,五子棋和圍棋的區(qū)別不就是規(guī)則嗎?(當(dāng)然棋盤大小好像也不一樣诅炉,但是你會(huì)覺(jué)得這是一個(gè)難題嗎蜡歹?直接在棋盤對(duì)象中進(jìn)行一番小改動(dòng)就可以了。)而下棋的大致步驟從面向?qū)ο蟮慕嵌葋?lái)看沒(méi)有任何變化涕烧。
當(dāng)然月而,要達(dá)到改動(dòng)只是局部的需要設(shè)計(jì)的人有足夠的經(jīng)驗(yàn),使用對(duì)象不能保證你的程序就是面向?qū)ο笠榇浚鯇W(xué)者或者很蹩腳的程序員很可能以面向?qū)ο笾摱忻嫦蜻^(guò)程之實(shí)父款,這樣設(shè)計(jì)出來(lái)的所謂面向?qū)ο蟮某绦蚝茈y有良好的可移植性和可擴(kuò)展性。