面向對象和麪向過程

        (博客參考百度和各位巨人的博客總結而來)

        什麼是面向對象和麪向過程??一天之內接觸了兩次這個概念,第一次很迷茫,第二次有點懵懂了。這一次通過搜尋資料和自己理解來進行進一步的總結。

      一、什麼是面向對象和麪向過程

         面向過程(Procedure Oriented)就是分析出解決問題的步驟,然後用函數把這些步驟一步步的實現,使用的時候一個個的調用就可以了

         面向對象(Object Oriented,OO)是把構成問題事務分解成各個對象,建立對象的目的不是爲了完成一個步驟,而是爲了描述某個事物在整個解決問題的步驟中的行爲。

         面向對象也可以說是從宏觀方面思考問題,而面向過程可以說是從細節處思考問題。

         可以結合一下例子來理解什麼是面向對象和麪向過程。

         1.面向對象:蓋一座大樓,想到的是大樓怎麼蓋,哪裏有柱子,哪裏有樓梯,哪裏有房樑。

         2.面向過程:至於柱子該怎麼建,用什麼材料,建成什麼樣式的等等。

          再比如吃飯。吃飯這件事兒,就可以分爲面向過程吃飯和麪向對象吃飯。自己親自下廚就是面向過程,點外賣就是面向對象。面向過程的吃飯中,我們想要填飽肚子,需要自己親自下廚把這頓飯做出來,那麼,我們就需要先想好吃什麼、然後去買菜、洗菜、洗米、蒸飯、炒菜等等一系列的事情。面向對象,其實就是我們通過點外賣的方式來“做飯”。我們知道我們需要一頓飯,我們只需要打開外賣軟件,在裏面選擇我們需要的菜品然後下單就可以了。我們不關心飯店做飯的過程。想吃什麼點什麼,家裏來人了就再下一個訂單,不想吃米飯了,想吃饅頭了,也可以給飯店打電話,讓他們把米飯換成饅頭。

        二、面向對象

         面向對象的三大特點:封裝、繼承和多態。通俗點講對象是由:屬性和方法組成的;是對象的抽象概念。

        屬性:用於描述某個對象的特徵,比如:身高,體重,膚色等,屬性描述的是對象靜態的一方面

        方法:描述的則是對象動態的一方面,比如:一個人會跑,會唱歌,會說話等等。

         :是對象的一種抽象概念,對象是類的實例化。比如:人類就是一個“類”,而具體的小明、小紅等就是類中的一個對象。所以說對象就是類的實例化。

     封裝、繼承和多態鏈接

        三、面向對象和麪向過程的優缺點

面向過程
  優點:性能比面向對象高,因爲類調用時需要實例化,開銷比較大,比較消耗資源,比如單片機、嵌入式開發、Linux/Unix等一般採用面向過程開發,性能是最重要的因素。 
  缺點:沒有面向對象易維護、易複用、易擴展

面向對象
  優點:易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護 
  缺點:性能比面向過程低

        網上搜索到一個例子,講的十分透徹:

         形容OP和OO的不同:用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我覺得這個比喻還是比較貼切的。
        蛋炒飯製作的細節,我不太清楚,因爲我沒當過廚師,也不會做飯,但最後的一道工序肯定是把米飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把米飯和蓋菜分別做好,你如果要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;如果要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲
       蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做一份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只需要把上面的蓋菜撥掉,更換一份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否則只能說是各有所長。如果大家都不是美食家,沒那麼多講究,那麼從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。
        蓋澆飯的好處就是“菜”“飯”分離,從而提高了製作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是“可維護性”比較好,“飯” 和“菜”的耦合度比較低。蛋炒飯將“蛋”“飯”攪和在一起,想換“蛋”“飯”中任何一種都很困難,耦合度很高,以至於“可維護性”比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。
         面向過程(OP)和麪向對象(OO)是不是就是指編碼的兩種方式呢?不是!你拿到了一個用戶需求,比如有人要找你編個軟件,你是不是需要經過需求分析,然後進行總體/詳細設計,最後編碼,才能最終寫出軟件,交付給用戶。這個過程是符合人類基本行爲方式的:先想做什麼,再想如何去做,最後纔是做事情。有的同學說:“我沒按照你說的步驟做啊,我是直接編碼的”。其實,你一定會經歷了這三個階段,只不過你潛意識裏沒有分得那麼清楚。對於拿到需求就編碼的人,可能編着編着,又得倒回去重新琢磨,還是免不了這些過程,
       以OO爲例,對應於軟件開發的過程,OO衍生出3個概念:OOA、OOD和OOP。採用面向對象進行分析的方式稱爲OOA,採用面向對象進行設計的方式稱爲OOD,採用面向對象進行編碼的方式稱爲OOP。面向過程(OP)和麪向對象(OO)本質的區別在於分析方式的不同,最終導致了編碼方式的不同。

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