原理:大話面向對象(一):理解面向對象
作者:強官濤   類型:Java開發    類別:原理   日期:2017-12-08    閱讀:1401 次   消耗積分:0 分


要學好程序設計,我們首要的必修課就是程序設計中的面向對象相關的原理和基本概念。

何為面向對象呢?要理解面向對象,我們先來看看與面向對象相對應的另外一種程序設計方法:面向過程。

面向過程的編程的基本構成便是“過程”,過程實現的方式就是“函數”,我們通過不同函數來實現不同的功能,并按照程序的執行順序調用相應的函數,組成一個完整的可以運行的應用程序。我們可以通過把不同的功能在不同的函數中實現或者給函數傳遞不同的參數來實現不同的功能,這是面向過程中模塊化設計的原理。

但是面向過程有很多問題,當我們總是按照教科書上的小例子來學習程序設計時是永遠也體會不到面向過程中存在的這些問題的,反而會覺得面向過程更簡單,更容易理解。而事實是當我們設計一些大型的應用的時候你將會發現使用面向過程編程是多么的痛苦和無奈,代碼極難維護,我們不得不為相似功能設計不同的函數,天長日久,代碼量越來越大,函數越來越多,而重復的代碼越來越多,噩夢就此產生。

于是乎產生了另外一種設計思想:面向對象,從此程序員發現編程是多么快樂的一件事情。我們可以把現實世界的很多哲學思想或者模型應用于編程,這是計算機的一次偉大的革命。那么究竟何為面向對象?要理解這兩個重要的字“對象“,我們首先需要理解一下類和實例:

舉一個簡單的例子,大家都會下五子棋,我們就以開發一個五子棋的游戲來講解面向過程和面向對象最本質的區別,在早期以面向過程為主要開發方法時,我們是這樣來設計這個游戲的:
1) 開始游戲
2) 黑方出子
3) 繪制畫面
4) 判斷勝負
5) 白方出子
6) 繪制畫面
7) 判斷勝負
8) 循環2、3、4、5、6、7步
9) 輸出結果
最后將每一個步驟作為一個處理函數開發出來,每次運行都調用一遍函數(或者過程)。面向過程最關鍵的概念就是“過程”,所以程序運行都是一步接一步,從上往下。

而面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為:
1) 黑白雙方:負責出子和悔棋
2) 棋盤系統:負責繪制畫面
3) 規則系統:負責判定諸如犯規、輸贏等
4) 輸入輸出系統:負責接收黑白子放的位置信息和輸出游戲過程中的相關信息

這就是面向對象,更強調將程序模塊化,我們甚至可以將該程序抽象出來使其適用于五子棋和圍棋(它們除了規則不一樣以外沒有其它區別,那么我們只需要修改規則系統便可輕易支持圍棋)。

540e53c80001243d06000338-590-330

何為類?
類就是“一類東西”,比如“車”是一類東西,“汽車”,“自行車”也是一類東西,“大眾汽車”,“永久自行車”也是一類東西。
何為實例?
實例就是明確告知哪一類東西的哪一個,比如“小明家的桑塔納Vista”,或者“編號為1389756的永久牌自行車”就屬于一個實例。
那么何為對象?
在面向對象的程序設計中,“一切皆是對象”(記住這句話,對面向對象理解得有多深取決于對這句話的理解有多深)。一個類是一個對象,一個實例是一個對象,一個變量也是一個對象,甚至一個數據類型,也都可以視為一個對象。

對象有什么特性?
對象不同于過程的最基本的特質有兩點:
1) 對象有方法,比如車可以“開”,可以“?!?,可以“剎車”,這些屬于方法。
2) 對象有屬性,比如車有“重量”,“排量”,“軸距”,“油耗”等,這些屬于屬性。

對于屬性,這在面向過程中是沒有相關概念與之對應的,而對于方法,方法本身來說就是一段處理程序,方法與面向過程的函數其實是類似的(方法和函數都由一段代碼組成,可以包括參數,可以有返回值或沒有返回值),它們之間唯一的區別在于函數是不存在公有私有一說的,而方法卻有類型修飾符(public, private, protected等),這種類型修飾符直接決定了該方法能不能被別的子對象使用。

何為子對象呢?這里牽涉著面向對象另一個非常重要的特性:繼承。簡單理解繼承就是“子承父業”,與生物學上的繼承,遺傳的概念沒有區別。就拿人類來說,父親有的方法(如走,跑,跳,吃,睡等)同樣兒子也可以有,兒子還可以自創一個自己的方法(如射擊,沖浪),同樣,兒子也有可能某些方法不能用(比如殘廢,不能走,跑,跳,但可以吃,睡),這是繼承。

關于繼承,有兩個重要的概念大家容易混淆:重寫和重載,二者區別在于:
重寫:父親走路是向前走的,兒子重寫父親走路的動作,橫著走。(雖然都是走,結果完全不同),這屬于繼承的范疇。
重載:對同一個類,比如父親,同一個方法可以有多種實現手段,比如跑,可以快跑,可以慢跑,可以短跑,可以長跑,那么一個跑“Run”就可以對應4個實現手段。這是重載,特別注意的是重載只針對一個對象而言,與繼承沒有任何關系。

現實生活中還有一個很有趣的現象是:父親是兒子的父親,同樣父親也是爺爺的兒子,所以父親這個對象它有時候也是兒子,那么還有可能是丈夫 。。。。。。,這表示一個對象可以有多種形態,這就是“多態”。

關于面向對象的基本概念再次總結如下:
1) 一切皆是對象
2) 類表示一類事物
3) 實例表示一類事物中明確指定的那個
4) 對象有方法和屬性
5) 對象可以被繼承
6) 一個對象可以有多種形態

下次課程將通過一些簡單的基于Java實現的一些實例來具體實現上述理論)。

 


蝸牛學院,只為成就更好的你!

你!敢不敢!用你三個月的時間,換你不一樣的未來!

趕快關注蝸牛學院官方微信,了解更多信息吧!

20181009_153045_341.jpg

版權所有,轉載本站文章請注明出處:蝸牛學院在線課堂, http://www.2453566.live/note/12
上一篇: 漫談:設計模式五大原則(2):里氏替換原則
下一篇: 資訊:蝸牛學院企業商業項目——成都樂圈科技有限公司Android端app的軟件研發
提示:登錄后添加有效評論可享受積分哦!
黑马股票推荐4月19日黑马股票推荐一览