1.前言
其實一直對面向過程和物件導向的概念和區別沒有很深入的理解,在自己不斷想完善自己的知識體系中,今天借這個時間,寫一篇部落格。來深入的了解面向過程與物件導向!好記性不如爛筆頭!!
2.物件導向與面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了;物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
舉乙個下五子棋通俗例子吧 哈哈哈 我感覺這兒例子很容易讓人理解
面向過程的設計思路就是首先分析問題的步驟:
1、開始遊戲,
2、黑子先走,
3、繪製畫面,
4、判斷輸贏,
5、輪到白子,
6、繪製畫面,
7、判斷輸贏,
8、返回步驟2,
9、輸出最後結果。
把上面每個步驟用分別的函式來實現,問題就解決了。
而物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為
1、黑白雙方,這兩方的行為是一模一樣的,
2、棋盤系統,負責繪製畫面,
3、規則系統,負責判定諸如犯規、輸贏等。第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子布局的變化,
棋盤物件接收到了棋子的i變化就要負責在螢幕上面顯示出這種變化,同時利用第三類物件(規則系統)來對棋局進行判定。
可以明顯地看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤物件**現,從而保證了繪圖的統一。
功能上的統一保證了物件導向設計的可擴充套件性。比如要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤物件就行了,棋盤系統儲存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對物件功能的呼叫順序都沒有變化,改動只是區域性的。
再比如我要把這個五子棋遊戲改為圍棋遊戲,如果你是面向過程設計,那麼五子棋的規則就分布在了你的程式的每乙個角落,要改動還不如重寫。但是如果你當初就是物件導向的設計,那麼你只用改動規則物件就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是乙個難題嗎?直接在棋盤物件中進行一番小改動就可以了。)而下棋的大致步驟從物件導向的角度來看沒有任何變化。
當然,要達到改動只是區域性的需要設計的人有足夠的經驗,使用物件不能保證你的程式就是物件導向,初學者或者很蹩腳的程式設計師很可能以物件導向之虛而行面向過程之實,這樣設計出來的所謂物件導向的程式很難有良好的可移植性和可擴充套件性
三、面向過程與物件導向的優缺點
很多資料上全都是一群很難理解的理論知識,整的我頭都大了,後來發現了乙個比較好的文章,寫的真是太棒了,通俗易懂,想要不明白都難!
用面向過程的方法寫出來的程式是乙份蛋炒飯,而用物件導向寫出來的程式是乙份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白公尺飯上面澆上乙份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我覺得這個比喻還是比較貼切的。
蛋炒飯製作是把公尺飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把公尺飯和蓋菜分別做好,你如果要乙份紅燒肉蓋飯呢,就給你澆乙份紅燒肉;如果要乙份青椒土豆蓋澆飯,就給澆乙份青椒土豆絲。
蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做乙份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只需要把上面的蓋菜撥掉,更換乙份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定乙個場景,否則只能說是各有所長。如果大家都不是美食家,沒那麼多講究,那麼從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。
蓋澆飯的好處就是」菜」「飯」分離,從而提高了製作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟體工程的專業術語就是」可維護性「比較好,」飯」 和」菜」的耦合度比較低。蛋炒飯將」蛋」「飯」攪和在一起,想換」蛋」「飯」中任何一種都很困難,耦合度很高,以至於」可維護性」比較差。軟體工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。物件導向的好處之一就是顯著的改善了軟體系統的可維護性。
看了這篇文章,簡單的總結一下!
面向過程
優點:效能比物件導向高,因為類呼叫時需要例項化,開銷比較大,比較消耗資源;比如嵌入式開發、 linux/unix等一般採用面向過程開發,效能是最重要的因素。
缺點:沒有物件導向易維護、易復用、易擴充套件
物件導向
優點:易維護、易復用、易擴充套件,由於物件導向有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易於維護
缺點:效能比面向過程低
物件導向和面向過程
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...
物件導向和面向過程
物件導向和面向過程的區別 面向過程 更加關注整個程式的實現流程 物件導向 更加關注整個程式中有哪些類,每個類有哪些屬性,有哪些行為,它將整個功能劃分為許多小功能,分散到不同的類中,使用時,僅需命令相應的類完成相應的事情 物件導向的優勢 1.更高的容錯率 2.更易閱讀的 3.更易擴充套件 物件導向的劣...
物件導向和面向過程
面向過程 顧名思義,其中心意義在於 過程 二字,比如你要吃飯,那麼首先是要選地,播種,施肥,成熟,收穫,煮飯,然後才能吃飯,那麼面向過程就是從開始到結束,分析出解決問題的需要的每乙個步驟,然後用函式將這些步驟乙個乙個實現,使用的時候乙個乙個一次呼叫就行了。物件導向 同樣的,你去飯店吃飯的時候,只需要...