由於課程需要,學習Java和面向對象也已經好幾個月了,今天來淺淺的談論一下我對面向對象的理解。
什么是面向對象?
如果你百科或者wiki一下,倒是能翻出一大堆來。如果你嫌這些答案不夠深沉,不夠裝逼,甚至還可以知乎一下雲雲。
但是,你有沒有想過,學習程序設計是為了什么?
從正式開始接觸計算機到現在也已經兩年了,我再也翻不下去一堆堆厚重的書籍和資料,原因在於它們只是為了寫更多的文字,卻很少能夠把一個簡單的概念解釋清楚。
我很欣賞一個程序員的本質就是單純,老老實實寫寫代碼本身就是一件很開心的事了(對此,我深信Java讓簡單主義者開心不起來),而不是像個學術研究者一樣,捧着一堆文獻來研究,甚至還要把自己的思維裝訂成冊才好。
簡單說,我能夠最快掌握一門技術,然后寫出自己想要實現的東西,這便是目的(當然,也有以錢途為目的的人)。
扯遠了,回歸主題……
很多人會說面向對象是:
封裝
繼承
多態
或是balabala……
但是,你真的了解面向對象的本質了嗎?請確定你真的了解了,而不是為了學習一門語言而不得不硬着頭皮接觸面向對象。
為了不讓冰冷的技術詞匯產生距離感,我用女媧造人這個例子來說明面向對象是個什么東東。
首先,盤古開天辟地……(此處省略2000字)
女媧一個人實在悶得慌(這也難怪,是個人都會寂寞,除了默默忍受寂寞的程序員們 = =#),尼瑪就突發奇想,搞出了個造人大計!
ps:如果她知道現在的人是這副德行,尼瑪肯定后悔得像買了切糕一般(局外話)。
但是,人是如何造成的呢?再牛逼的女媧也像從前小時候玩橡皮泥的我們一樣,搓來搓去沒個名堂,最終還是需要個模板,是個人都知道,這個模板就是她自己。
關鍵點1:面向對象的基本設計原則就是需要一個模板(或稱為藍圖),在程序設計語言里,我們把這個模板稱為類。
好了,有了一個模板,女媧就可以對着模板來造人了,造出的人也就是一個模板(類)的對象。
我們知道,人有一些基本特征:一個頭,兩只眼睛,雙手雙腳。
此外,人還有一些基本行為:吃喝嫖賭抽。
關鍵點2:此處的基本特征就是一個類的屬性,基本行為就是類的方法。
有人問了,為什么不需要皮膚,指甲等屬性,或奔跑、磕頭等行為?道理很簡單,我只需要知道有用信息,如同有主機、顯示器,鼠標鍵盤,可玩游戲我便能明白這是一台電腦。
模板有了,一些基本的構造條件有了,剩下考慮的就是量產了,所謂的量產也就是生產類的對象,造出千千萬萬個人(真偉大~!)。
其實,人還有個不願意公開承認的特性,就是愛“犯賤”。甚至以挖苦別人,或者對他人身體造成傷害為樂趣。為了避免一些嚴重傷害,我們只能把危機生命的心臟等器官放到身體內部了。
關鍵點3:把基本特征(屬性)保護好,防止他人隨意踐踏,這叫做封裝。
當然,隨着當事者所處的環境不同,保護措施也不一樣,正如同小孩想滑旱冰就需要護膝是一樣的道理。在類中,我們要依照自己的經驗完善好封裝這一概念。
人活在這世上,是不公平的,有些人天生就是高富帥,富二代,官二代,why?因為他們有個牛逼的爹。而還有些人,卻生的一副挫樣,還要替父還債。
關鍵點4:類似與這種行為,我們叫做繼承。一個子對象,是具有父類特征和行為的,當然你可以通過各種方式轉變。(好好寫代碼,終成高富帥)
人有了,人造人這種令人難堪的事也發生了。但是卻還出現了男人和女人的區別,這叫人如何是好。因為有了男女,不僅讓世界變得和諧了,卻也……哎,凡事都有兩面性嘛。
我們可以說,一個男人是一個人,也可以說一個女人是一個人。但男女不論從某某結構還是××來說都是有所差別的,但基本特征不變。
關鍵點5:都有了上層的基礎概念,而存在具體的細節實現不同,這種行為我們管它叫做多態。
我不得不說,我要寫完了,一行代碼都沒有。對於新手而言,希望看到更多的並不是代碼,而是一種思想上的東西,甚至是,不願意別人全部都給你想透徹,而是能夠有所啟發。因此,請老鳥越過,新人要噴就噴,要拍就拍,經過那么多厚部頭的折磨,我已經蛋定了……
