兩者的區(qū)別如下:
面向過程就是分析出解決問題所需要的步驟疏旨,然后用函數(shù)把這些步驟一步一步實現(xiàn),使用的時候一個一個依次調用就可以了爬骤。
面向對象是把構成問題事務分解成各個對象充石,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為霞玄。
例如五子棋骤铃,面向過程的設計思路就是首先分析問題的步驟:1、開始游戲坷剧,2惰爬、黑子先走,3惫企、繪制畫面撕瞧,4陵叽、判斷輸贏,5丛版、輪到白子巩掺,6、繪制畫面页畦,7胖替、判斷輸贏,8豫缨、返回步驟2独令,9、輸出最后結果好芭。把上面每個步驟用分別的函數(shù)來實現(xiàn)燃箭,問題就解決了。
而面向對象的設計則是從另外的思路來解決問題舍败。整個五子棋可以分為 1招狸、黑白雙方,這兩方的行為是一模一樣的瓤湘,2瓢颅、棋盤系統(tǒng),負責繪制畫面弛说,3挽懦、規(guī)則系統(tǒng),負責判定諸如犯規(guī)木人、輸贏等信柿。第一類對象(玩家對象)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化醒第,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化渔嚷,同時利用第三類對象(規(guī)則系統(tǒng))來對棋局進行判定。
可以明顯地看出稠曼,面向對象是以功能來劃分問題形病,而不是步驟。同樣是繪制棋局霞幅,這樣的行為在面向過程的設計中分散在了總多步驟中漠吻,很可能出現(xiàn)不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化司恳。而面向對象的設計中途乃,繪圖只可能在棋盤對象中出現(xiàn),從而保證了繪圖的統(tǒng)一扔傅。
功能上的統(tǒng)一保證了面向對象設計的可擴展性耍共。比如我要加入悔棋的功能烫饼,如果要改動面向過程的設計,那么從輸入到判斷到顯示這一連串的步驟都要改動试读,甚至步驟之間的循序都要進行大規(guī)模調整杠纵。如果是面向對象的話,只用改動棋盤對象就行了钩骇,棋盤系統(tǒng)保存了黑白雙方的棋譜淡诗,簡單回溯就可以了,而顯示和規(guī)則判斷則不用顧及伊履,同時整個對對象功能的調用順序都沒有變化,改動只是局部的款违。
再比如我要把這個五子棋游戲改為圍棋游戲唐瀑,如果你是面向過程設計,那么五子棋的規(guī)則就分布在了你的程序的每一個角落插爹,要改動還不如重寫哄辣。但是如果你當初就是面向對象的設計,那么你只用改動規(guī)則對象就可以了赠尾,五子棋和圍棋的區(qū)別不就是規(guī)則嗎力穗?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎气嫁?直接在棋盤對象中進行一番小改動就可以了当窗。)而下棋的大致步驟從面向對象的角度來看沒有任何變化。
當然寸宵,要達到改動只是局部的需要設計的人有足夠的經(jīng)驗崖面,使用對象不能保證你的程序就是面向對象,初學者或者很蹩腳的程序員很可能以面向對象之虛而行面向過程之實梯影,這樣設計出來的所謂面向對象的程序很難有良好的可移植性和可擴展性巫员。
來自:https://zhidao.baidu.com/question/316478935.html