心得 : 面向對象和麪向過程的區別

面向對象:用線性的思維。與面向過程相輔相成。在軟件開發過程中,宏觀上,用面向對象來把握事物間複雜的關係,分析系統。微觀上,仍然使用面向過程。

面向過程”是一種是事件爲中心的編程思想。就是分析出解決問題所需的步驟,然後用函數把這寫步驟實現,並按順序調用。

  ”面向對象“是以“對象”爲中心的編程思想。

 

  簡單的舉個例子:汽車發動、汽車到站。汽車啓動是一個事件,汽車到站是另一個事件,面向過程編程的過程中我們關心的是事件,而不是汽車本身。針對上述兩個事件,形成兩個函數,之後依次調用。

  對於面向對象來說,我們關心的是汽車這類對象,兩個事件只是這類對象所具有的行爲。而且對於這兩個行爲的順序沒有強制要求。

  面向過程的思維方式是分析綜合,面向對象的思維方式是構造。

 

可拓展性:

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

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

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

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

以OO爲例,對應於軟件開發的過程,OO衍生出3個概念:OOA、OOD和OOP。採用面向對象進行分析的方式稱爲OOA,採用面向對象進行設計的方式稱爲OOD,採用面向對象進行編碼的方式稱爲OOP。面向過程(OP)和麪向對象(OO)本質的區別在於分析方式的不同,最終導致了編碼方式的不同。

 

總的來說:

                   面向對象是將事物高度抽象化。

 

                   面向過程是一種自頂向下的編程

 

                   面向對象必須先建立抽象模型,之後直接使用模型就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章