前言:函數
接觸面向對象的概念也差很少兩年了,對於面向對象也有着本身的一些感悟,期間也看到過面向過程的一些文章,但老是對於兩種思想沒有明確的區別概念,恰好今天在某篇博客上看到對於二者的區別。因此便寫下這篇博客來記錄下感悟。性能
1、面向對象的特色測試
什麼是對象,簡單來講對象就是現實世界存在的任何事務均可以稱之爲對象,有着本身獨特的個性。spa
用思惟導圖來簡潔表示一下就是這樣:設計
面向對象就是構成問題事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。對象
2、面向過程的特色blog
什麼是過程,我認爲過程就是步驟,是解決問題的循序漸進。繼承
面向過程用圖片表示:圖片
面向過程不一樣於面向對象,面向過程分析出解決問題所須要的步驟,而後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就能夠了。事務
3、面向對象和麪向工程的區別
以前在那篇博客上看到這個比喻,以爲特別恰當,挺容易讓人理解的,如今分享一下:
用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我以爲這個比喻仍是比較貼切的。
蛋炒飯製做的細節,我不太清楚,由於我沒當過廚師,也不會作飯,但最後的一道工序確定是把米飯和雞蛋混在一塊兒炒勻。蓋澆飯呢,則是把米飯和蓋菜分別作好,你若是要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;若是要一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。
蛋炒飯的好處就是入味均勻,吃起來香。若是恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼惟一的辦法就是所有倒掉,從新作一份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只須要把上面的蓋菜撥掉,更換一份蓋菜就能夠了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。
究竟是蛋炒飯好仍是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,不然只能說是各有所長。若是你們都不是美食家,沒那麼多講究,那麼從飯館角度來說的話,作蓋澆飯顯然比蛋炒飯更有優點,他能夠組合出來任意多的組合,並且不會浪費。
蓋澆飯的好處就是」菜」「飯」分離,從而提升了製做蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是」可維護性「比較好,」飯」 和」菜」的耦合度比較低。蛋炒飯將」蛋」「飯」攪和在一塊兒,想換」蛋」「飯」中任何一種都很困難,耦合度很高,以致於」可維護性」比較差。軟件工程追求的目標之一就是可維護性,可維護性主要表如今3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。
4、總結
面向過程:
優勢:性能比面向對象高,由於類調用時須要實例化,開銷比較大,比較消耗資源;好比單片機、嵌入式開發、 Linux/Unix等通常採用面向過程開發,性能是最重要的因素。
缺點:沒有面向對象易維護、易複用、易擴展
面向對象:
優勢:易維護、易複用、易擴展,因爲面向對象有封裝、繼承、多態性的特性,能夠設計出低耦合的系統,使系統 更加靈活、更加易於維護 缺點:性能比面向過程低