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

2022-08-27 21:39:18 字數 1980 閱讀 2702

面向過程(pop)和物件導向(oop)是什麼

pop(process-oriented programming)的縮寫,「面向過程」是一種是事件為中心的程式設計思想。就是分析出解決問題所需的步驟,然後用函式把這寫步驟實現,並按順序呼叫。

oop(object oriented programming)的縮寫物件導向:用線性的思維。與面向過程相輔相成。在軟體開發過程中,巨集觀上,用物件導向來把握事物間複雜的關係,分析系統。微觀上,仍然使用面向過程。」物件導向「是以「物件」為中心的程式設計思想。

舉例說明

簡單的舉個例子:汽車發動、汽車到站。汽車啟動是乙個事件,汽車到站是另乙個事件,面向過程程式設計(pop)的過程中我們關心的是事件,而不是汽車本身。針對上述兩個事件,形成兩個函式,之後依次呼叫。

對於物件導向(oop)來說,我們關心的是汽車這類物件,兩個事件只是這類物件所具有的行為。而且對於這兩個行為的順序沒有強制要求。

總結: 面向過程的思維方式是分析綜合,物件導向的思維方式是構造。

可拓展性對比

簡單來說:用面向過程(pop)的方法寫出來的程式是乙份蛋炒飯,而用物件導向寫出來的程式是乙份蓋澆飯。所謂蓋澆飯,就是在公尺飯上面澆上乙份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我覺得這個比喻還是比較貼切的。蛋炒飯製作的細節,我不太清楚,因為我沒當過廚師,也不會做飯,但最後的一道工序肯定是把公尺飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把公尺飯和蓋菜分別做好,你如果要乙份紅燒肉蓋飯呢,就給你澆乙份紅燒肉;如果要乙份青椒土豆蓋澆飯,就給澆乙份青椒土豆絲。

蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做乙份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只需要把上面的蓋菜撥掉,更換乙份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定乙個場景,否則只能說是各有所長。那麼從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。

蓋澆飯的好處就是「菜」「飯」分離,從而提高了製作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟體工程的專業術語就是「可維護性」比較好,「飯」 和「菜」的耦合度比較低。蛋炒飯將「蛋」「飯」攪和在一起,想換「蛋」「飯」中任何一種都很困難,耦合度很高,以至於「可維護性」比較差。軟體工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。物件導向的好處之一就是顯著的改善了軟體系統的可維護性。

面向過程(pop)和物件導向(oop)是不是就是指編碼的兩種方式呢?不是!你拿到了乙個使用者需求,比如有人要找你編個軟體,你是不是需要經過需求分析,然後進行總體/詳細設計,最後編碼,才能最終寫出軟體,交付給使用者。這個過程是符合人類基本行為方式的:先想做什麼,再想如何去做,最後才是做事情。有的同學說:「我沒按照你說的步驟做啊,我是直接編碼的」。其實,你一定會經歷了這三個階段,只不過你潛意識裡沒有分得那麼清楚。對於拿到需求就編碼的人,可能編著編著,又得倒回去重新琢磨,還是免不了這些過程,

以oo為例,對應於軟體開發的過程,oo衍生出3個概念:ooa、ood和oop。採用物件導向進行分析的方式稱為ooa,採用物件導向進行設計的方式稱為ood,採用物件導向進行編碼的方式稱為oop。面向過程(op)和物件導向(oo)本質的區別在於分析方式的不同,最終導致了編碼方式的不同。

面向過程總結

面向過程是一種自頂向下的程式設計。

面向過程優點:效能比物件導向高,因為類呼叫時需要例項化,開銷比較大,比較消耗資源;比如微控制器、嵌入式開發、 linux/unix等一般採用面向過程開發,效能是最重要的因素。

缺點:沒有物件導向易維護、易復用、易擴充套件

物件導向總結

物件導向是將事物高度抽象化。物件導向必須先建立抽象模型,之後直接使用模型就行了。

優點:易維護、易復用、易擴充套件,由於物件導向有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統 更加靈活、更加易於維護

缺點:效能比面向過程低

物件導向和面向過程區別

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

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

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

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

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