[1]動機丑孩、原則與模式——OO設(shè)計之我見

2014年8月,我應(yīng)內(nèi)訓(xùn)經(jīng)理的要求灭贷,做一次技術(shù)分享温学。我認為在公司的IT開發(fā)中,對面向?qū)ο蟮脑O(shè)計和實現(xiàn)沒有得到足夠的重視甚疟,宣貫做的不夠仗岖,大部分軟件工程師在這方面的素養(yǎng)也有待提高。另外由于我的專業(yè)和長時間的實踐览妖,始終想對面向?qū)ο笤O(shè)計做一個自己的闡述轧拄。我覺得這是特別好的一次機會,所以就這個問題做了題為《動機讽膏、原則與模式——OO設(shè)計之我見》的講座紧帕,反響較好。這篇文章就是脫胎于這次分享,并在文字上更規(guī)范了一些是嗜。

編程是什么愈案?
說到面向?qū)ο蟮脑O(shè)計和開發(fā),我就想到上學(xué)的時候Pascal老師問過的問題:編程是什么鹅搪?經(jīng)過這么多年的實踐站绪,我覺得當時老師給出的答案是本質(zhì)上的。編程就是數(shù)據(jù)結(jié)構(gòu)加算法丽柿。這里先談?wù)勎覍λ惴ǖ睦斫狻?/p>

算法就是解決問題的步驟恢准,我認為是一種對軟件工程的動態(tài)表述。關(guān)于算法甫题,我有一個好消息和一個壞消息馁筐。好消息是,作為社會科學(xué)的范疇坠非,大到國家強盛敏沉,民族復(fù)興,小到家庭和諧炎码,自我實現(xiàn)盟迟。往往都很難用1234的步驟來描述;而作為自然科學(xué)的計算機技術(shù)潦闲,大多數(shù)的問題都可以用某種算法的表述十分精確的定義攒菠。這就是為什么讓我們覺得科學(xué)家比社會學(xué)家更靠譜;壞消息是即使有明確的步驟歉闰,很多算法還是很難辖众。探其緣由,算法的難度來源于與數(shù)學(xué)的不解之緣和敬。因為很多算法問題都是可以通過數(shù)學(xué)來進行建模凹炸,進而變成一個數(shù)學(xué)問題來求解。

討論完算法概龄,再說數(shù)據(jù)結(jié)構(gòu)还惠,數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)的組織方式饲握,是軟件工程的靜態(tài)表述私杜,數(shù)據(jù)結(jié)構(gòu)是一種靜態(tài)的美。作為一個普通的程序員救欧,你可能不會設(shè)計很高深的算法衰粹,但你會經(jīng)常遇到設(shè)計數(shù)據(jù)結(jié)構(gòu)的問題,OO設(shè)計笆怠,本質(zhì)上就是設(shè)計數(shù)據(jù)結(jié)構(gòu)铝耻。從現(xiàn)在業(yè)界的技術(shù)人員構(gòu)成,你會發(fā)現(xiàn),真正研究狹義的算法的程序員是金字塔的塔尖瓢捉,他們在大型科研單位和BAT這種巨型互聯(lián)網(wǎng)企業(yè)中频丘。而大量的軟件工程師和高級軟件工程師其實都在做數(shù)據(jù)結(jié)構(gòu),只是在解決數(shù)據(jù)結(jié)構(gòu)問題的過程中泡态,涉及解決問題的步驟搂漠,即廣義的算法。而且好的數(shù)據(jù)結(jié)構(gòu)設(shè)計某弦,會從根本上簡化解決問題的步驟桐汤。

程序員的境界
我在這里提到了兩個典型的員工,他們可能不是具體的兩個人靶壮,但絕對代表了兩類人怔毛。老李,10年以上工齡的老程序員腾降,習(xí)慣了開發(fā)過程中不費腦子的Ctrl+c,v大法拣度,鮮有拿得出手的OO設(shè)計方案;小王蜂莉,科班出身但經(jīng)驗缺乏蜡娶,遇到問題善于思考和總結(jié),即使很小的設(shè)計映穗,也能看出OO設(shè)計的影子窖张。我對他們的看法是,老李是典型的“一年進步蚁滋,N年循環(huán)”的程序員宿接,而小王終將“從優(yōu)秀到卓越”。為什么造成了這種不同辕录?境界的不同睦霎!

這時我又想起了《大腕》這部電影,其中一個橋段就是葛優(yōu)給Lucy講解境界的含義走诞。它是一種眼光副女,境界越高的人,看的就越遠蚣旱。我給出了這樣一張slide和一個結(jié)論碑幅。就OO設(shè)計而言,普通的程序員塞绿,優(yōu)秀的程序員沟涨,偉大的程序員和佛,境界就是這么大的區(qū)別异吻,而在我們修煉內(nèi)功的道路上裹赴,提升OO設(shè)計能力,就是提升境界。

ood.jpg

動機棋返、原則與模式
我認為延都,軟件設(shè)計可以分為三個重要的層次,面向?qū)ο蟮乃枷牒蛙浖?gòu)件)復(fù)用的動機是最高層次的睛竣,面向?qū)ο蟮脑O(shè)計原則是對以上內(nèi)容的具體化和銜接窄潭,而設(shè)計模式才是更具體到實際問題的解決方案,即接”地氣“的部分酵颁。所以一個好的軟件系統(tǒng)設(shè)計師嫉你,首先應(yīng)該有面向?qū)ο蟮乃枷耄缓笳莆彰嫦驅(qū)ο蟮脑O(shè)計原則躏惋,最后才是具體問題具體分析幽污,應(yīng)用模式來解決實際問題。這樣才會設(shè)計出比較合理的系統(tǒng)簿姨,以及降低濫用和錯用設(shè)計模式的幾率距误。

動機是指一個人想要干某件事情而在心里上形成的思維途徑。同時也是一個人在做某種決定所產(chǎn)生的念頭扁位。說到動機准潭,可以比較兩種程序員,分別是懶程序員和“懶”程序員域仇。前者刑然,不深入思考系統(tǒng)的結(jié)構(gòu),不會用面向?qū)ο蟮姆椒ㄔO(shè)計整個系統(tǒng)暇务,停留在面向過程的思維模式泼掠,簡單的復(fù)制粘貼;后者垦细,不是真的懶择镇,而是不愿意在后期維護更多的代碼,愿意在設(shè)計階段投入更多的精力括改,專注于解耦和封裝腻豌,磨刀不誤砍柴工。

我把真正的OO設(shè)計的動機總結(jié)為三點嘱能,首先是真實的反應(yīng)客觀世界吝梅,也就是建立模型;其次是把正確的算法焰檩,即解決問題的步驟放到正確的結(jié)構(gòu)中憔涉;最后是擁抱變化订框,為產(chǎn)品析苫,也為自己的未來考慮。

有些人認為,學(xué)習(xí)OO設(shè)計就是學(xué)習(xí)設(shè)計模式衩侥。但我更認為国旷,OO設(shè)計的原則重于設(shè)計模式∶K溃《Java與模式》是一部描述設(shè)計模式的出了名的大部頭跪但,一共1024頁(好有計算機科學(xué)的感覺)。盡管你可以想象他用超過90%的篇幅描述各種設(shè)計模式峦萎,但是你可能不會想到屡久,他在第二部分就寫了這么一段話:

在目前的軟件界,學(xué)習(xí)和應(yīng)用設(shè)計模式正在形成風(fēng)氣爱榔。的確被环,通過學(xué)習(xí)和應(yīng)用設(shè)計模式,可以更加深入地理解面向?qū)ο蟮脑O(shè)計理念详幽,從而幫助設(shè)計師改善自己的系統(tǒng)設(shè)計筛欢。但是,設(shè)計模式并不能提供具有普遍性的設(shè)計指導(dǎo)原則唇聘。在讀者經(jīng)過一段時間的對設(shè)計模式的學(xué)習(xí)和使用之后版姑,就會覺得這些孤立的設(shè)計模式的背后應(yīng)當還有一些更為深層的、更具有普遍性的迟郎、共同的思想原則剥险。

可見本書的作者,希望讀者在進入設(shè)計模式這個絢麗世界前宪肖,先要掌握OO設(shè)計原則這個指南針炒嘲,才不會在隨后的學(xué)習(xí)中迷失方向,才能掌握“大巧若拙匈庭,大辯若訥”的OO設(shè)計精髓夫凸。那么OO設(shè)計原則都有哪些呢?我又怎樣對它們進行解讀呢阱持?請看本文章的第二部分夭拌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衷咽,隨后出現(xiàn)的幾起案子鸽扁,更是在濱河造成了極大的恐慌,老刑警劉巖镶骗,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桶现,死亡現(xiàn)場離奇詭異,居然都是意外死亡鼎姊,警方通過查閱死者的電腦和手機骡和,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門相赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慰于,你說我怎么就攤上這事钮科。” “怎么了婆赠?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵绵脯,是天一觀的道長。 經(jīng)常有香客問我休里,道長蛆挫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任妙黍,我火速辦了婚禮璃吧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘废境。我一直安慰自己畜挨,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布噩凹。 她就那樣靜靜地躺著巴元,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驮宴。 梳的紋絲不亂的頭發(fā)上逮刨,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音堵泽,去河邊找鬼修己。 笑死,一個胖子當著我的面吹牛迎罗,可吹牛的內(nèi)容都是我干的睬愤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼纹安,長吁一口氣:“原來是場噩夢啊……” “哼尤辱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厢岂,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤光督,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后塔粒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體结借,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年卒茬,在試婚紗的時候發(fā)現(xiàn)自己被綠了船老。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咖熟。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖努隙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辜昵,我是刑警寧澤荸镊,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站堪置,受9級特大地震影響躬存,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舀锨,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一岭洲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坎匿,春花似錦盾剩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至承桥,卻和暖如春驻粟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凶异。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工蜀撑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剩彬。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓酷麦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喉恋。 傳聞我的和親對象是個殘疾皇子贴铜,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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

  • OO設(shè)計的三寶在講具體的原則之前绍坝,我想先明確一下面向?qū)ο笳Z言的三個特性。所有的面向?qū)ο笳Z言都首先必須支持這三個特性...
    扁圓柱體閱讀 512評論 0 1
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,171評論 25 707
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念苔悦,然后給出了掌握每個關(guān)鍵概念所需的入門書籍轩褐,必讀書籍,以及...
    dle_oxio閱讀 11,123評論 6 244
  • 人生不過四季:春拗踢、夏脚牍、秋、冬 四季隨能輪回 但生命不會重來 只有春種一粒粟 才能秋收萬顆子 其實巢墅,生命不過三天 昨...
    TWE閱讀 1,584評論 0 0
  • 情商的表現(xiàn)之一就是自己能控制自己的情緒诸狭,那么在日常生活中,作為我們避免不了喜怒哀樂君纫。這幾種情緒當中驯遇,我們最難控制的...
    酥小栗閱讀 329評論 0 0