面向?qū)ο髢r值觀

前言

接上節(jié)面向?qū)ο笤O(shè)計(jì)隨想.
凡入派者, 必遵其規(guī).
既然我們加入"面向?qū)ο?一黨, 必然要信奉其中的一些價值觀(心法):

  • 萬物皆對象, 對象皆有類
  • 關(guān)系驅(qū)動世界發(fā)展
  • 萬物唯變不變

萬物皆對象, 對象皆有類

在面向?qū)ο蟮氖澜缋? 所有的一切都是可以抽象成一個對象, 例如玫瑰花, 銀杏樹, 啄木鳥, 東北虎, 所有東西我們都可以抽象成: 是什么, 有什么, 能做什么; 然后進(jìn)一步, 我們可以再抽象, 再封裝, 進(jìn)而歸結(jié)為 -- 花木鳥獸.

image

抽象是從我們看事物的視角, 幫助我們將自己從繁雜的細(xì)節(jié)中解脫岀來, 在更高的層次去理解一個東西的一種思維方式.

封裝是從事務(wù)本身的視角, 盡量對外隱藏細(xì)節(jié), 只暴露自己需要暴露的能力. 例如手機(jī), 只要對外暴露打電話的能力, 而無需讓外界知道具體打電話這個動作的細(xì)節(jié)是怎樣完成的.

這兩個面向?qū)ο筇匦允俏覀兝斫饷嫦驅(qū)ο蟮幕A(chǔ), 我們在把萬物映射到我們的代碼世界時, 無處不在使用這兩個特性.

關(guān)系驅(qū)動世界

當(dāng)我們試圖將某個事物單獨(dú)挑出來時, 我們發(fā)現(xiàn)它與宇宙中的其他事物是息息相關(guān)的.
-- 約翰.謬爾(美國作家), 1911, <<山間夏日>>

世間沒有任何一個東西可以是獨(dú)立于其他事物而存在的, 同樣映射到我們的代碼世界, 在將事物抽象成對象/類之后, 我們要做的就是尋找之間的關(guān)系.

image

看上圖, 我們可以找到很多關(guān)系:

  1. 類與子類之間的繼承關(guān)系.
  2. 方法與方法之間的重載/重寫關(guān)系.
  3. 類與對象之間的抽象-具體關(guān)系
  4. 對象/類之間的各種組合依賴關(guān)聯(lián)...關(guān)系

繼承與多態(tài)

其中關(guān)于類, 有一個基本關(guān)系, 那就是繼承 -- 子承父業(yè), 發(fā)揚(yáng)光大.

繼承可以我們從原有同類事物中獲得一些基本能力, 同時可以做擴(kuò)展.

一般來說, 繼承岀來的子類和父類之間的關(guān)系是特殊(特例)和一般(抽象)之間的關(guān)系. 例如鳥是動物的一類, 它具有動物的特征和能力, 也會有自己特有的特征和能力:

image

另外, 如果細(xì)心的話, 大家可以看到我們在鳥這個子類里面還對父類動物的"活動()"方法做了重寫. 這個覆蓋重寫給了我們的繼承關(guān)系一種更高端的能力 --- (運(yùn)行時)多態(tài). 所謂多態(tài), 簡單理解就是動態(tài)決策. 一個事物有多種形態(tài)的存在, 都可以對某一個特定事件產(chǎn)生響應(yīng), 根據(jù)運(yùn)行時的具體情況來隨機(jī)應(yīng)變.

這樣做有什么好處呢? 最大的好處就是分離了"能做什么"和"具體怎么做", 也就是將接口和實(shí)現(xiàn)分離了. 讓我們的程序有了很大的擴(kuò)展性, 實(shí)際上很多設(shè)計(jì)模式也都是基于多態(tài)這個面向?qū)ο筇匦猿恋淼?

另外還有一種編譯時多態(tài), 就是同一個類中方法的重載 --- 方法名相同, 傳入?yún)?shù)不一樣, 做的事情不一樣. (見人說人話, 見鬼說鬼話).

六大類關(guān)系

當(dāng)然我們的類關(guān)系, 除了繼承, 還有很多其他的關(guān)系形式, 多姿多彩的關(guān)系才能構(gòu)建我們五彩斑斕的世界嘛.

當(dāng)我們在討論類關(guān)系的時候, 常常會用UML類關(guān)系圖來示意. UML是一種通用建模語言, 全稱Unified Modeling Language, 是一種用來給軟件建模的可視化的規(guī)約語言. 因?yàn)樵跇I(yè)界影響力很大, 逐漸成為一種建模設(shè)計(jì)語言的標(biāo)準(zhǔn). GoF設(shè)計(jì)模式的關(guān)系圖也都是基于UML的, 所以我們有必要了解下UML的類關(guān)系表達(dá)方式.

通常, 類關(guān)系分成六種, 關(guān)系說明和UML表達(dá)方式如下:

image

可能單純這樣看比較抽象, 也難以記憶, 我們可以找個實(shí)際的例子來看看:

image

以上關(guān)系的強(qiáng)弱關(guān)系:
泛化 = 實(shí)現(xiàn) > 組合 > 聚合 > 關(guān)聯(lián) > 依賴
從我們軟件設(shè)計(jì)的角度, 肯定是傾向于越弱的關(guān)系越好的, 弱關(guān)系才可以松耦合. 所以也有我們常聽到的組合優(yōu)于繼承.

萬物唯變不變

唯一不變的是變化本身
斯賓塞.約翰遜 <<誰動了我的奶酪>>

運(yùn)動是絕對的, 靜止是相對的, 生活中的一切人, 事, 物和關(guān)系都在不斷的變化. 同樣, 軟件世界也會一直面臨著各種變化, 我們的程序怎么去以最小的代價去應(yīng)對這些變化 --- 這就是我們面向?qū)ο笤O(shè)計(jì)要解決的問題.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锭环,一起剝皮案震驚了整個濱河市献汗,隨后出現(xiàn)的幾起案子洽蛀,更是在濱河造成了極大的恐慌演顾,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋囊,死亡現(xiàn)場離奇詭異止后,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)溜腐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門译株,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挺益,你說我怎么就攤上這事歉糜。” “怎么了望众?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵匪补,是天一觀的道長。 經(jīng)常有香客問我烂翰,道長夯缺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任甘耿,我火速辦了婚禮踊兜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棵里。我一直安慰自己润文,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布殿怜。 她就那樣靜靜地躺著典蝌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪头谜。 梳的紋絲不亂的頭發(fā)上骏掀,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音柱告,去河邊找鬼截驮。 笑死,一個胖子當(dāng)著我的面吹牛际度,可吹牛的內(nèi)容都是我干的葵袭。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼乖菱,長吁一口氣:“原來是場噩夢啊……” “哼坡锡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窒所,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鹉勒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吵取,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禽额,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年皮官,在試婚紗的時候發(fā)現(xiàn)自己被綠了脯倒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡臣疑,死狀恐怖盔憨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讯沈,我是刑警寧澤郁岩,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站缺狠,受9級特大地震影響问慎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挤茄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一如叼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧穷劈,春花似錦笼恰、人聲如沸踊沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逼龟。三九已至,卻和暖如春追葡,著一層夾襖步出監(jiān)牢的瞬間腺律,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工宜肉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匀钧,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓谬返,卻偏偏與公主長得像之斯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子遣铝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

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