1、什么是面向對象語言
面向對象語言(Object-Oriented Language)是一類以對象作為基本程序結構單位的程序設計語言,指用於描述的設計是以對象為核心,而對象是程序運行時刻的基本成分。
面向對象語言很多,如一直高居世界編程語言排行榜的Java、C#、C++、Object-C、PHP等等。
2、面向對象的理解
相信很多程序猿,特別是新手,都對面向對象都沒有去理解過,但都用過而且可能用的還很熟。
最近面試一位剛入行不久的新手,也有半年多的工作經驗了,也做過項目,其實也算不上新手,問其面向對象語言的三個基本特征之一,其回答竟然是“開源”,真是讓我大吃一驚。
或許懶、或許感覺這些抽象的文字難以學習理解、或許認為工作中用不到,但我想這些最基本知識的還是要知道的,不要工作3年,積累下的經驗可能3天都不到。
以下是個人對面向對象的理解:
什么是對象? 引用我的一位大學老師的說:一切都是類、一切都是對象。
現在大部分的面向對象語言是基於類的。
他的算是啟蒙老師吧,很風趣的一位老師,在學校代課教我們時,最經常掛在嘴邊的就是這句話(只要他的課這句話最少要聽到10次以上)。以至於現在想到他,腦海里第一反應就是這句話。
除了紅字以上是我的廢話,可以忽略。
2.1、對象
一切都是對象
舉例:
將一棟房子 比作一個對象 【房子:對象】。 從圖上也可以看到這是一種新類別的房子【房子:類-Class】 如圖
這尼瑪就是對象,那對象應該包含什么呢,相信只要學過,面向對象的肯定都知道面向對象的三項基本特征:封裝、繼承、多態。
2.2、對象的基本特征一:封裝
封裝 將各個獨立功能設計成一個個獨立的單元,形成一個有規划設計的整體,減小耦合,提高內聚,避免牽一發而動全身,方便對程序的修改。
還是用房子來解釋,上面已經有房子的基本類型了,大概樣子就是那個熊樣。
舉例:
房子空間很大,但是如果男男女女有十幾人住,而且就一間屋子的話,很不方便,如果吃喝拉撒一個屋,那就成難民營,更何況晚上燈一黑,立刻就亂套了,你懂得。
這樣,就要想法解決:
工人們出動了,把房子折騰折騰給分成樓上樓下兩層,並說明了,一樓吃喝玩樂、二樓休息; 樓上樓下工人們又分別給隔離出幾個房間,就把房子這樣改造好了,然后男男女女們過來了,大家就可以各自的房間,做愛做的事,而且不會影響到其他了。
這樣一個簡單的封裝就完成 【房子:類-class】是對 【房子兩層:部分類-partialclass】的封裝 ;【房子兩層:部分類-partialclass】是對【房間:函數/方法-function】的封裝。
2.3、對象的基本特征二:繼承
繼承 發生在兩個對象之間,繼承對象可以肆意的使用被繼承對象的一些屬性、方法&函數等;使代碼重用,減少編碼量,間接減少維護成本。
仍然是房子。
工人們已經給分好樓、做好房間了。這時有個人覺得房子應該有個緊急避難所。好嗎,尼瑪房子都折騰的差不多了,尼瑪告訴工人要緊急避難所,工人說這不好搞哇。可以這人有錢,任性,
發話了,要搞必須搞,不好搞也要搞,而且狠狠的搞。工人們就為難了,難道再去給蓋一棟有避難所的房子?大家集思廣益最終,房子其他都還用着,再給挖個地下室。於是新房子誕生了。
一個簡單的繼承就出現了 【房子:基類-baseclass】被【新房子:擴展類-ExtensionClass】繼承。
2.4、對象的基本特征三:多態
多態 不同的場合做出不同相應,有着不同的特點,可以說是封裝的一個實現。
房子已經成型,要對房間進行裝修了,工人想法很簡單都按照一種樣式來,簡單方便快捷。但是住房的男男女女們有意見,這就是尼瑪客戶,各種千奇百怪的想法,有要在承重牆
上開扇窗戶的,有要在衛生間裝攝像頭的、要在廚房里裝空調。工人們對能實現就開始開工了,對房子的窗戶、地板、牆、樓梯等進行裝修。這樣裝修完房子內部就豐富起來了。如圖
“一種多態的展現”就出來了:【房子:類-class】 通過 【窗戶、地板、牆、樓梯等:屬性-Property】體現多態
2.5、面向對象
最后的總結,前面其實是對象的說明。現在來說一下面向對象,像開篇提到的一切都是對象。那面向對象有是怎么回事呢難道說是面向一切,真這么理解也不為過。
面向對象是一種對現實世界理解和抽象的方法,對做程序來說,就是讓程序人員,用一種思維更好的看待萬物,在編程中的本質。 OO