物件導向與面向過程的區別

2021-06-19 18:27:29 字數 1580 閱讀 8351

由我們學習的由淺入深,我們逐漸的接受了物件導向的思想,那麼物件導向和面向過程有什麼區別和聯絡呢?

記得當時學過的vb就說是物件導向的視覺化程式語言,但是vb還是有面向過程的影子,那時候對這兩個概念很是模糊。

最近學習了物件導向技術,簡單的總結一下。物件導向技術是一種以物件為基礎以物件為基礎,以事件或訊息來驅動物件執行處理的程式設計技術。它以資料為中心而不是以功能為中心來描述系統,資料相對於功能而言具有更強的穩定性。它將資料和對資料的操作封裝在一起,作為乙個整體來處理,採用資料抽象和資訊隱蔽技術,將這個整體抽象成一種新的資料型別——類,並且考慮不同類之間的聯絡和類的重用性。事件驅動程式的執行圍繞訊息的產生與處理,靠訊息迴圈機制來實現。

物件導向程式的設計方法使得程式結構清晰、簡單,提高了**的重用性,有效減少了程式的維護量,提高了軟體的開發效率。

那麼面向過程和物件導向有什麼區別呢?

面向過程是分析出乙個問題或程式所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個一次呼叫。

舉個五子棋的例子。面向過程的設計思路就是首先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函式來實現,問題就解決了。

而物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪製畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類物件(玩家物件)負責接受使用者輸入,並告知第二類物件(棋盤物件)棋子布局的變化,棋盤物件接收到了棋子的變化就要負責在螢幕上面顯示出這種變化,同時利用第三類物件(規則系統)來對棋局進行判定。

可以明顯地看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤物件中出現,從而保證了繪圖的統一。

功能上的統一保證了物件導向設計的可擴充套件性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤物件就行了,棋盤系統儲存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對物件功能的呼叫順序都沒有變化,改動只是區域性的。

再比如要把這個五子棋遊戲改為圍棋遊戲,如果是面向過程設計,那麼五子棋的規則就分布在了程式的每乙個角落,要改動還不如重寫。但是如果當初就是物件導向的設計,那麼只用改動規則物件就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是乙個難題嗎?直接在棋盤物件中進行一番小改動就可以了。)而下棋的大致步驟從物件導向的角度來看沒有任何變化。

這樣看來理解起來就清楚多了,在以後的程式設計中很難劃分好面相過程和物件導向,也許會在面相過程的程式中使用了物件,但也不是完全的物件導向。那麼程式就很難有很好的可移植性和可擴充套件性。

物件導向的思想中有封裝和繼承,這樣就很好的體現了程式的可移植性和和擴充套件性,並可以**復用。

逐漸培養自己的物件導向思想很重要。

物件導向與面向過程區別

物件導向是以事物為中心的程式設計思想,把構建問題事務分解成各個物件,建立物件的目的是為了描述某個事物在整個解決問題的步驟中的行為 面向過程是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用時依次呼叫就可以了 區別 物件導向程式設計,往往是從問題的一部分著手,一點一點地構建出整個程式...

物件導向與面向過程的區別

面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...

面向過程與物件導向的區別

面向過程 1 現實世界是物件,分析階段是物件,在設計及開發階段是方法與方法之間的呼叫,與現實世界 分析階段不統一,容易出現偏差,增加了開發的難度,容易 出問題。2 因為方法與方法之間的直接呼叫,讓我們系統依賴底層具體實現,而不是 依賴高層概念及巨集觀的商業邏輯。3 方法與方法之間有呼叫 的藕合度太,...