深入理解面向?qū)ο?/h1>

前言

一直想寫這么一篇面向?qū)ο蟮奈恼乱固椋瑢嵲谑菦]時間動手,還有就是懶的動手属愤。為什么會懶得動手呢女器?原因有以下幾點:

1.面向?qū)ο蟮馁Y料網(wǎng)上一大推,也用不著花時間寫住诸;

2.自認為對面向?qū)ο蠛芰私狻?/p>

但是驾胆,也遇到一些實際性的問題。感覺很了解面向?qū)ο蠹牛侵v不出來丧诺、或是講不好、或是云里霧里的奄薇,越講越復雜驳阎。難道越是高大上的東西,越講不明白嗎馁蒂?好像不是呵晚!那就接著分析。

面向?qū)ο?/h3>

什么是面向?qū)ο笤短拢繛槭裁匆妹嫦驅(qū)ο罅痈伲棵嫦驅(qū)ο笫窃趺磥淼模棵嫦驅(qū)ο竽芨墒裁此ⅲ扛杏X這幾個問題好牛逼癞季。我會把這幾個問題融入到以下的敘述中劫瞳,慢慢分析。

我現(xiàn)在都還記得绷柒,那時候炫耀自己的項目志于,“純面向?qū)ο箝_發(fā)”……一個“純”字,頓時逼格滿滿》夏溃現(xiàn)在想來伺绽,那時候說話確實不走腦子∈扰龋“純面向?qū)ο蟆蹦斡Γ€有“不純”的么?“不純”的是什么购披?是雜質(zhì)杖挣,是渣滓?是那些if...else...刚陡,是不是應該被剔除惩妇?問題是,你剔除了if...else ...筐乳,你項目里還能剩下些什么歌殃?

不知道大家以前有沒有想過這個問題?

我覺得這是一個好問題蝙云∶ブ澹“純面向?qū)ο蟆边@種說法背后折射出來的,就是把“面向?qū)ο蟆焙汀懊嫦蜻^程”對立化贮懈,從而把“面向?qū)ο蟆比藶榘胃呷藶樯裨挕?/p>

我覺得匀泊,一步一步由淺入深的理解“面向?qū)ο蟆保_的姿勢應該是這樣的:

首先朵你,同學們已經(jīng)理解了方法/函數(shù),明白為了代碼的重用揣非,我們需要一個又一個的函數(shù)抡医。

那么,假設我們有一個項目早敬,十萬行代碼(這其實就是微型項目)忌傻,按一個函數(shù)平均50行計算,就會有2000個函數(shù)搞监!好水孩,問題來了,2000個函數(shù)啊琐驴,別說你記住了俘种,你先想想秤标,你咋命名?呵呵宙刘。

所以苍姜,一定得想辦法,把他們“歸類”(大家注意這個“類”字):這50個函數(shù)悬包,都是干這事兒的衙猪;那50個函數(shù),都是干那事兒的……分門別類之后布近,2000個函數(shù)垫释,50個類,這樣撑瞧,是不是有條理得多饶号,清晰得多了呢?然后季蚂,調(diào)用一個方法的時候茫船,先找到類,再找這個類下面的函數(shù)扭屁,是不是更流暢一些算谈?比如:Blog.Publish(),Comment.Publish()料滥,Blog.Agree()然眼,Comment.Agree()……你看,也不用擔心“重名”了葵腹。

這才是對“類”最基本最入門的理解——然而高每,很多同學,恰恰是缺乏這種最基本的理解践宴,或者理解得不夠深入鲸匿,就直接奔那些“高大上”的概念去了。從而阻肩,在開發(fā)過程中整出很多莫名其妙的“幺蛾子”來带欢。

可能有些同學不服氣,“我怎么就理解得不夠深入啦”烤惊,“這還需要這么深入理解”乔煞?或者,還有一些同學柒室,要教育教育我渡贾,“你這個理解太初淺了”,“引入‘面向?qū)ο蟆塾遥菫榱恕赜谩橄蟆笨丈В皝韥韥矸慕玻医o你講講‘設計模式’,高級貨府怯!”……

這就是問題所在刻诊!有些同學,用了一堆的“高級貨”牺丙,把本來復雜的程序搞得“更復雜”了则涯。于是,有了所謂“濫用”冲簿,“濫用繼承”“濫用設計模式”“濫用……”我想粟判,有過一定開發(fā)經(jīng)驗的同學一定聽說過甚至見識過這種“濫用”的,夠酸爽吧峦剔?哈哈档礁。那么,怎么才算“濫用”吝沫,怎么才能避免“濫用”呻澜?

其核心就在于理解一點:面向?qū)ο螅ㄆ鋵嵃ㄋ嗅槍Α捌髽I(yè)級應用”開發(fā)的思路策略),核心目的都是“降低系統(tǒng)的復雜度”惨险,注意:降低羹幸,降低,降低辫愉,而不是“增加”系統(tǒng)的復雜度栅受。業(yè)務需求本身已經(jīng)夠復雜了,就不要再給代碼里“添亂”了恭朗。

請注意屏镊,這里的“復雜”,通常指的是“繁多”“雜亂”“無序”痰腮,人腦難以應付而芥。怎么解決這個問題呢?無它诽嘉,歸類而已蔚出。

好了,回到“面向?qū)ο蟆背嬉福覀円呀?jīng)把函數(shù)進行了歸類,感覺上舒服多了稀余。然而悦冀,當代碼量進一步膨脹,達到100萬級的時候睛琳,就是類盒蟆,也有500個了踏烙,我們的腦子還是不夠用了。這時候历等,我們就會問:可不可以把這些類再進一步的歸類呢讨惩?

當然可以,于是就有了“繼承”寒屯;在“繼承”的基礎(chǔ)上荐捻,又有了“多態(tài)”;有了“多態(tài)”寡夹,就有了“設計模式”……

這些東西這篇博客我都不想講处面,一篇博客也講不了——太龐大了。

那我想講的是什么菩掏?

是順序魂角,是目的。

是先有方法函數(shù)智绸,然后才有類野揪;是有了類,然后才有了繼承……

或者瞧栗,更準確的說:是先有了一堆一堆多得讓人抓狂的方法函數(shù)斯稳,才有了類;是先有了一堆一堆多得讓人抓狂的類沼溜,才有了繼承……

更本質(zhì)的說法:是先有了問題平挑,然后才有解決方案

而我們使用各種工具方法的目的系草,是為了解決問題通熄。

我想,最大的問題就在于:一開始找都,“面向?qū)ο蟆边@玩意兒就是被“灌”進腦子里的唇辨,而且你還被不停的灌輸它好很好灰常好——但究竟怎么個好法,卻很少有人能說得清楚能耻。所以一直暈乎暈乎的赏枚,不明覺厲。而且你會自然而然的產(chǎn)生一種心理:面向?qū)ο蠛孟停瑳]有面向?qū)ο缶褪遣缓玫摹?/p>

這當然是不對的饿幅。

你可以把“面向?qū)ο蟆碑斪鰴C關(guān)槍,機關(guān)槍火力猛射程遠戒职,但這并不是說機關(guān)槍就是最好的栗恩,手槍步槍狙擊槍都是渣,而是各有各的用途洪燥。

這本來很好理解磕秤,然后乳乌,當你手里有了一把機關(guān)槍,而你又狂熱的喜歡這把機關(guān)槍的時候市咆,事情就變味了汉操。你會說,機關(guān)槍一樣可以干手槍的活蒙兰,

我用機關(guān)槍比你用手槍還好使磷瘤,

你覺得不好用,那是你不會用癞己,

不信你看著……

這就走上邪路了膀斋。

機關(guān)槍這個例子,如果現(xiàn)實生活中真有這樣的人痹雅,你一定覺得他是瘋子仰担。

但在IT圈里,其實到處都是這種瘋子绩社。隔三差五的各種語言撕逼摔蓝、框架撕逼、陣營撕逼愉耙,本質(zhì)上贮尉,不就這么回事么?

矯枉過正的說朴沿,“面向?qū)ο蟆辈卵瑁蛘摺懊嫦驅(qū)ο蠓邸眰儯_實有走上邪路的傾向赌渣。

如果說你確實能把“機關(guān)槍”玩出“狙擊槍”的效果魏铅,那邪也邪得有個性,溜得飛起坚芜!問題是絕大多數(shù)人览芳,沒有這種本事,邯鄲學步鸿竖,就有些尷尬了沧竟。

我舉一個例子:

現(xiàn)在有兩個類,一個用戶類(User)缚忧,一個博客類(Blog)悟泵,現(xiàn)在有一個發(fā)布博客的方法(Publish)。

那么闪水,“發(fā)布博客”這個方法魁袜,究竟是應該放在用戶的類里面,還是博客的類里面敦第?即:究竟是User.Publish(Blog)呢峰弹,還是Blog.Publish()?

以下為思考時間:

滴答……

滴答芜果,滴答……

滴答鞠呈,滴答,滴答……

如果按照“萬物皆對象”右钾,“對象映射實體”蚁吝,“方法就是對象的行為”……之類的格言來套的話,當然應該是User.Publish(Blog)舀射,你看窘茁,用戶 發(fā)布 博客,一一對應按嘌獭山林!美滴很~~就像我們老師教的那樣,名詞做對象邢羔,動詞做方法……

但有過一定開發(fā)經(jīng)驗的同學驼抹,就知道應該是Blog.Publish(),但為什么呢拜鹤?這看起來好像不對翱蚣健?博客怎么會發(fā)布呢敏簿?博客自己發(fā)布自己明也?什么鬼?不通肮咴!温数!

確實不通,不過是你自己沒“通”轻猖;或者帆吻,一開始就錯了。

要理解這個問題咙边,就得回到面向?qū)ο蟮摹捌瘘c”猜煮,明白“面向?qū)ο蟆币鉀Q的問題,不是什么“映射客觀世界”败许,就這個問題王带,也還談不上什么“繼承多態(tài)”(“封裝”勉勉強強,但根還不在這里)市殷。

讓我們再回頭復習遍:已經(jīng)有了一堆一堆的方法愕撰,再引入一個又一個的“類”,目的是什么?把方法裝進一個又一個的類里面搞挣,分門別類带迟,是不是為了照顧我們的“大腦”——這可憐的資源有限的人腦?電腦就沒這些麻煩囱桨,方法都不用仓犬,01010010000101001001……就OK了。所以舍肠,假設有50個類搀继,是不是每個類里的方法數(shù)目都差不多,勻稱一些翠语,我們的分類就更有意義一些叽躯?

假設User.Publish(Blog)的邏輯成立的話,是不是還會有User.Publish(Comment)肌括,User.Agree(Blog)点骑,User.Logon(),……们童,User.FlyToSky()……一個系統(tǒng)畔况,是不是幾乎所有的操作,都是User干的慧库?這User不是要上天磅喂颉!我們“分門別類”的工作齐板,是不是就沒有意義了吵瞻?以前是記一堆函數(shù),現(xiàn)在是記User下面的一堆函數(shù)甘磨,有個毛用跋鹦摺!

但我經(jīng)臣糜撸看到類似User這樣的萬能類卿泽,有輕重程度的差別,但本質(zhì)上滋觉,這種代碼签夭,就是“披著‘面向?qū)ο蟆钠ぁ保芍芍裁词履刈迪溃扛芍鴣y七八糟的事第租。

當然,還有濫用繼承我纪,層層疊疊的像個十八層寶塔一樣慎宾,又百轉(zhuǎn)千回的像個死亡迷宮一樣丐吓,你咕噥一句“整復雜了”,架構(gòu)師一臉傲嬌鼻孔朝天趟据,“面向?qū)ο笕纾呒壺洠∧哪敲慈菀椎摹?/p>

總結(jié)

1. 面向?qū)ο笾蓿约八械能浖こ趟枷敕椒ㄗ宀伲淠康亩际前褟碗s的問題簡單化,而不是相反比被。

2. 所謂“簡單化”,指的是讓我們?nèi)祟惖拇竽X覺得“簡單”泼舱,而不是電腦等缀。電腦?0101010010000010101010……才最簡單娇昙。

3. 記住上面兩個原則尺迂,明白:軟件開發(fā)的目的是為了解決問題,而不是“炫技”冒掌。尤其是不要為了“炫技”而把本來就復雜的問題搞得更復雜……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末噪裕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子股毫,更是在濱河造成了極大的恐慌膳音,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铃诬,死亡現(xiàn)場離奇詭異祭陷,居然都是意外死亡,警方通過查閱死者的電腦和手機趣席,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門兵志,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宣肚,你說我怎么就攤上這事想罕。” “怎么了霉涨?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵按价,是天一觀的道長。 經(jīng)常有香客問我嵌纲,道長俘枫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任逮走,我火速辦了婚禮鸠蚪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己茅信,他們只是感情好盾舌,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蘸鲸,像睡著了一般妖谴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酌摇,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天膝舅,我揣著相機與錄音,去河邊找鬼窑多。 笑死仍稀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的埂息。 我是一名探鬼主播技潘,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼千康!你這毒婦竟也來了享幽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拾弃,失蹤者是張志新(化名)和其女友劉穎值桩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砸彬,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡颠毙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砂碉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛀蜜。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖增蹭,靈堂內(nèi)的尸體忽然破棺而出滴某,到底是詐尸還是另有隱情,我是刑警寧澤滋迈,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布霎奢,位于F島的核電站,受9級特大地震影響饼灿,放射性物質(zhì)發(fā)生泄漏幕侠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一碍彭、第九天 我趴在偏房一處隱蔽的房頂上張望晤硕。 院中可真熱鬧悼潭,春花似錦、人聲如沸舞箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疏橄。三九已至占拍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捎迫,已是汗流浹背晃酒。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留立砸,地道東北人掖疮。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像颗祝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恼布,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容