淺談面向對象和麪向過程的編程及優缺點

前言:

在一段時間的練習中,我都是把代碼一擼到底,而後感受好沒意思。後來呢,和班裏的大佬進行溝通學習才知道個人寫法是面向過程的寫法,可是呢,咱們也都知道java是面向對象的一種編程語言,因此在一段時間裏在網上進行查找面向對象的寫法,並對面向對象進行總結,下面你們一塊兒來探討一下,若是有錯,請批評指正!!!!java

1、面向對象與面向過程的區別:

首先,若是想使用面向對象的思想進行編程,那麼就須要知道到底什麼是面向對象和麪向過程,下面我在查詢的時候找到的倆個小列子進行幫助
理解:
面向過程就是分析出解決問題所須要的步驟,而後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就能夠了;面向對象是把構成問題事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。編程

第一個列子:

能夠拿生活中的實例來理解面向過程與面向對象,例如五子棋,面向過程的設計思路就是首先分析問題的步驟:一、
開始遊戲,二、黑子先走,三、繪製畫面,四、判斷輸贏,五、輪到白子,六、繪製畫面,七、判斷輸贏,八、返回步驟
九、輸出最後結果。把上面每一個步驟用不一樣的方法來
實現。

若是是面向對象的設計思想來解決問題。面向對象的設計則是從另外的思路來解決問題。整個五子棋能夠分爲一、
黑白雙方,這兩方的行爲是如出一轍的,二、棋盤系統,負責繪製畫面,三、規則系統,負責斷定諸如犯規、輸贏
等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接
收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行斷定。

能夠明顯地看出,面向對象是以功能來劃分問題,而不是步驟。一樣是繪製棋局,這樣的行爲在面向過程的設計
中分散在了多個步驟中,極可能出現不一樣的繪製版本,由於一般設計人員會考慮到實際狀況進行各類各樣的簡化。
而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。

第二個列子:

用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫
蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我
以爲這個比喻仍是比較貼切的。

因爲咱們不是學廚師的,因此蛋炒飯製做的細節就不在這裏多說了,但最後的一道工序確定是把米飯和雞蛋混在
一塊兒炒勻。蓋澆飯呢,則是把米飯和蓋菜分別作好,你若是要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;若是要
一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。

蛋炒飯的好處就是入味均勻,吃起來香。若是恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼惟一的辦法就是所有倒
掉,從新作一份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只須要把上面的蓋菜撥掉,更換一份蓋菜就能夠了。蓋
澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。

究竟是蛋炒飯好仍是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否
則只能說是各有所長。若是你們都不是美食家,沒那麼多講究,那麼從飯館角度來說的話,作蓋澆飯顯然比蛋炒
飯更有優點,他能夠組合出來任意多的組合,並且不會浪費。

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

2、面向對象的特色:

在瞭解其特色以前,我們先談談對象,對象就是現實世界存在的任何事務均可以稱之爲對象,有着本身獨特的個性
淺談面向對象和麪向過程的編程及優缺點設計模式

屬性用來描述具體某個對象的特徵。好比小志身高180CM,體重70KG,這裏身高、體重都是屬性。
面向對象的思想就是把一切都當作對象,而對象通常都由屬性+方法組成!

屬性屬於對象靜態的一面,用來形容對象的一些特性,方法屬於對象動態的一面,我們舉一個例子,小明會跑,
會說話,跑、說話這些行爲就是對象的方法!因此爲動態的一面, 咱們把屬性和方法稱爲這個對象的成員!

類:具備同種屬性的對象稱爲類,是個抽象的概念。好比「人」就是一類,期中有一些人名,好比小明、小紅、
小玲等等這些都是對象,類就至關於一個模具,他定義了它所包含的全體對象的公共特徵和功能,對象就是
類的一個實例化,小明就是人的一實例化!咱們在作程序的時候,常常要將一個變量實例化,就是這個原理!
咱們通常在作程序的時候通常都不用類名的,好比咱們在叫小明的時候,不會喊「人,你幹嗎呢!」而是說的是
「小明,你在幹嗎呢!」

3、面向對象的優缺點:

一、面向對象相對面向過程的優勢

    1)結構清晰。令人們的編程與實際的世界更加接近,全部的對象被賦予屬性和方法,結果編程就更加富
        有人性化。

    2)封裝性。減少外部對內部的影響。封裝將對象有關的數據和行爲封裝成總體來處理,使得對象之外的
        部分不能隨意存取對象的內部屬性,從而有效地避免了外部錯誤對它的影響,大大減少了查錯和排錯的難
        度。

    3)容易擴展,代碼重用率高。容易擴展,在大框架不變的狀況下很容易就開發出適合本身的功能,實現
        簡單,可有效地減小程序的維護工做量,軟件開發效率高。

二、面向對象相對面向過程的缺點

    1)增長工做量。若是一味地強調封裝,當進行修改對象內部時,對象的任何屬性都不容許外部直接存
        取,則要增長許多沒有其餘意義、只負責讀或寫的行爲。這會爲編程工做增長負擔,增長運行開銷,並
        且使程序顯得臃腫。

    2)性能低。因爲面向更高的邏輯抽象層,使得面向對象在實現的時候,不得不作出性能上面的犧牲,
        計算時間和空間存儲大小的都開銷很大。

四:如何向面向對象的思想轉變

徹底的面向對象固然是須要長期的練習以及熟悉設計模式的,不過第一步很容易。首先把你的代碼改形成,以若干數據結構爲核心,把每個函數都改形成只操做一個數據結構的函數,而後把它們改爲class。若是你要跨數據結構,要麼選擇其中一個數據結構,另外的都用操做那個數據結構的函數,而後就能夠把這個函數放進某個class裏。要麼所有都用操做那些數據結構的函數,而後就做爲一個全局函數,只接受那幾個class。數據結構

相關文章
相關標籤/搜索