在一段時間的練習中,我都是把代碼一擼到底,而後感受好沒意思。後來呢,和班裏的大佬進行溝通學習才知道個人寫法是面向過程的寫法,可是呢,咱們也都知道java是面向對象的一種編程語言,因此在一段時間裏在網上進行查找面向對象的寫法,並對面向對象進行總結,下面你們一塊兒來探討一下,若是有錯,請批評指正!!!!java
首先,若是想使用面向對象的思想進行編程,那麼就須要知道到底什麼是面向對象和麪向過程,下面我在查詢的時候找到的倆個小列子進行幫助
理解:
面向過程就是分析出解決問題所須要的步驟,而後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就能夠了;面向對象是把構成問題事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。編程
能夠拿生活中的實例來理解面向過程與面向對象,例如五子棋,面向過程的設計思路就是首先分析問題的步驟:一、 開始遊戲,二、黑子先走,三、繪製畫面,四、判斷輸贏,五、輪到白子,六、繪製畫面,七、判斷輸贏,八、返回步驟 九、輸出最後結果。把上面每一個步驟用不一樣的方法來 實現。 若是是面向對象的設計思想來解決問題。面向對象的設計則是從另外的思路來解決問題。整個五子棋能夠分爲一、 黑白雙方,這兩方的行爲是如出一轍的,二、棋盤系統,負責繪製畫面,三、規則系統,負責斷定諸如犯規、輸贏 等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接 收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行斷定。 能夠明顯地看出,面向對象是以功能來劃分問題,而不是步驟。一樣是繪製棋局,這樣的行爲在面向過程的設計 中分散在了多個步驟中,極可能出現不一樣的繪製版本,由於一般設計人員會考慮到實際狀況進行各類各樣的簡化。 而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。
用面向過程的方法寫出來的程序是一份蛋炒飯,而用面向對象寫出來的程序是一份蓋澆飯。所謂蓋澆飯,北京叫 蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白米飯上面澆上一份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我 以爲這個比喻仍是比較貼切的。 因爲咱們不是學廚師的,因此蛋炒飯製做的細節就不在這裏多說了,但最後的一道工序確定是把米飯和雞蛋混在 一塊兒炒勻。蓋澆飯呢,則是把米飯和蓋菜分別作好,你若是要一份紅燒肉蓋飯呢,就給你澆一份紅燒肉;若是要 一份青椒土豆蓋澆飯,就給澆一份青椒土豆絲。 蛋炒飯的好處就是入味均勻,吃起來香。若是恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼惟一的辦法就是所有倒 掉,從新作一份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只須要把上面的蓋菜撥掉,更換一份蓋菜就能夠了。蓋 澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。 究竟是蛋炒飯好仍是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定一個場景,否 則只能說是各有所長。若是你們都不是美食家,沒那麼多講究,那麼從飯館角度來說的話,作蓋澆飯顯然比蛋炒 飯更有優點,他能夠組合出來任意多的組合,並且不會浪費。 蓋澆飯的好處就是"菜"「飯"分離,從而提升了製做蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程 的專業術語就是"可維護性"比較好,「飯」 和"菜"的耦合度比較低。蛋炒飯將"蛋」「飯"攪和在一塊兒,想換"蛋」"飯"中任 何一種都很困難,耦合度很高,以致於"可維護性"比較差。軟件工程追求的目標之一就是可維護性,可維護性主要 表如今3個方面:可理解性、可測試性和可修改性。面向對象的好處之一就是顯著的改善了軟件系統的可維護性。
在瞭解其特色以前,我們先談談對象,對象就是現實世界存在的任何事務均可以稱之爲對象,有着本身獨特的個性設計模式
屬性用來描述具體某個對象的特徵。好比小志身高180CM,體重70KG,這裏身高、體重都是屬性。 面向對象的思想就是把一切都當作對象,而對象通常都由屬性+方法組成! 屬性屬於對象靜態的一面,用來形容對象的一些特性,方法屬於對象動態的一面,我們舉一個例子,小明會跑, 會說話,跑、說話這些行爲就是對象的方法!因此爲動態的一面, 咱們把屬性和方法稱爲這個對象的成員! 類:具備同種屬性的對象稱爲類,是個抽象的概念。好比「人」就是一類,期中有一些人名,好比小明、小紅、 小玲等等這些都是對象,類就至關於一個模具,他定義了它所包含的全體對象的公共特徵和功能,對象就是 類的一個實例化,小明就是人的一實例化!咱們在作程序的時候,常常要將一個變量實例化,就是這個原理! 咱們通常在作程序的時候通常都不用類名的,好比咱們在叫小明的時候,不會喊「人,你幹嗎呢!」而是說的是 「小明,你在幹嗎呢!」
一、面向對象相對面向過程的優勢 1)結構清晰。令人們的編程與實際的世界更加接近,全部的對象被賦予屬性和方法,結果編程就更加富 有人性化。 2)封裝性。減少外部對內部的影響。封裝將對象有關的數據和行爲封裝成總體來處理,使得對象之外的 部分不能隨意存取對象的內部屬性,從而有效地避免了外部錯誤對它的影響,大大減少了查錯和排錯的難 度。 3)容易擴展,代碼重用率高。容易擴展,在大框架不變的狀況下很容易就開發出適合本身的功能,實現 簡單,可有效地減小程序的維護工做量,軟件開發效率高。 二、面向對象相對面向過程的缺點 1)增長工做量。若是一味地強調封裝,當進行修改對象內部時,對象的任何屬性都不容許外部直接存 取,則要增長許多沒有其餘意義、只負責讀或寫的行爲。這會爲編程工做增長負擔,增長運行開銷,並 且使程序顯得臃腫。 2)性能低。因爲面向更高的邏輯抽象層,使得面向對象在實現的時候,不得不作出性能上面的犧牲, 計算時間和空間存儲大小的都開銷很大。
徹底的面向對象固然是須要長期的練習以及熟悉設計模式的,不過第一步很容易。首先把你的代碼改形成,以若干數據結構爲核心,把每個函數都改形成只操做一個數據結構的函數,而後把它們改爲class。若是你要跨數據結構,要麼選擇其中一個數據結構,另外的都用操做那個數據結構的函數,而後就能夠把這個函數放進某個class裏。要麼所有都用操做那些數據結構的函數,而後就做爲一個全局函數,只接受那幾個class。數據結構