面向過程和面向?qū)ο蟮膮^(qū)別

參考文章:
面向?qū)ο蠛兔嫦蜻^程的區(qū)別
面向?qū)ο笈c面向過程的本質(zhì)的區(qū)別

面向過程(pop)和面向?qū)ο?oop)是什么

  1. pop(Process-oriented programming)的縮寫,“面向過程”是一種是事件為中心的編程思想。就是分析出解決問題所需的步驟,然后用函數(shù)把這寫步驟實現(xiàn),并按順序調(diào)用。
  2. oop(Object Oriented Programming)的縮寫面向?qū)ο螅河镁€性的思維。與面向過程相輔相成。在軟件開發(fā)過程中,宏觀上,用面向?qū)ο髞戆盐帐挛镩g復(fù)雜的關(guān)系,分析系統(tǒng)。微觀上,仍然使用面向過程?!泵嫦?qū)ο蟆笆且浴皩ο蟆睘橹行牡木幊趟枷搿?/li>

舉例說明

  1. 簡單的舉個例子:汽車發(fā)動、汽車到站。汽車啟動是一個事件,汽車到站是另一個事件,面向過程編程(pop)的過程中我們關(guān)心的是事件,而不是汽車本身。針對上述兩個事件,形成兩個函數(shù),之后依次調(diào)用。
  2. 對于面向?qū)ο?oop)來說,我們關(guān)心的是汽車這類對象,兩個事件只是這類對象所具有的行為。而且對于這兩個行為的順序沒有強制要求。
  3. 總結(jié): 面向過程的思維方式是分析綜合,面向?qū)ο蟮乃季S方式是構(gòu)造。

可拓展性對比

  1. 簡單來說:用面向過程(pop)的方法寫出來的程序是一份蛋炒飯,而用面向?qū)ο髮懗鰜淼某绦蚴且环萆w澆飯。所謂蓋澆飯,就是在米飯上面澆上一份蓋菜,你喜歡什么菜,你就澆上什么菜。我覺得這個比喻還是比較貼切的。蛋炒飯制作的細節(jié),我不太清楚,因為我沒當過廚師,也不會做飯,但最后的一道工序肯定是把米飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。

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

  3. 蓋澆飯的好處就是“菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業(yè)術(shù)語就是“可維護性”比較好,“飯” 和“菜”的耦合度比較低。蛋炒飯將“蛋”“飯”攪和在一起,想換“蛋”“飯”中任何一種都很困難,耦合度很高,以至于“可維護性”比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表現(xiàn)在3個方面:可理解性、可測試性和可修改性。面向?qū)ο蟮暮锰幹痪褪秋@著的改善了軟件系統(tǒng)的可維護性。

  4. 面向過程(POP)和面向?qū)ο?OOP)是不是就是指編碼的兩種方式呢?不是!你拿到了一個用戶需求,比如有人要找你編個軟件,你是不是需要經(jīng)過需求分析,然后進行總體/詳細設(shè)計,最后編碼,才能最終寫出軟件,交付給用戶。這個過程是符合人類基本行為方式的:先想做什么,再想如何去做,最后才是做事情。有的同學說:“我沒按照你說的步驟做啊,我是直接編碼的”。其實,你一定會經(jīng)歷了這三個階段,只不過你潛意識里沒有分得那么清楚。對于拿到需求就編碼的人,可能編著編著,又得倒回去重新琢磨,還是免不了這些過程,

  5. 以O(shè)O為例,對應(yīng)于軟件開發(fā)的過程,OO衍生出3個概念:OOA、OOD和OOP。采用面向?qū)ο筮M行分析的方式稱為OOA,采用面向?qū)ο筮M行設(shè)計的方式稱為OOD,采用面向?qū)ο筮M行編碼的方式稱為OOP。面向過程(OP)和面向?qū)ο?OO)本質(zhì)的區(qū)別在于分析方式的不同,最終導致了編碼方式的不同。

面向過程總結(jié)

  1. 面向過程是一種自頂向下的編程。
  2. 面向過程優(yōu)點:性能比面向?qū)ο蟾?,因為類調(diào)用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發(fā)、 Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素。
  3. 缺點:沒有面向?qū)ο笠拙S護、易復(fù)用、易擴展

面向?qū)ο罂偨Y(jié)

  1. 面向?qū)ο笫菍⑹挛锔叨瘸橄蠡?。面向?qū)ο蟊仨毾冉⒊橄竽P停笾苯邮褂媚P途托辛恕?/li>
  2. 優(yōu)點:易維護、易復(fù)用、易擴展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計出低耦合的系統(tǒng),使系統(tǒng) 更加靈活、更加易于維護
  3. 缺點:性能比面向過程低
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容