<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    GHawk

    敏捷軟件開(kāi)發(fā) 讀書筆記 (2)——OO五大原則(1.SRP 單一職責(zé)原則)

          一點(diǎn)說(shuō)明:OO的五大原則是指SRP、OCP、LSP、DIP、ISP。這五個(gè)原則是書中所提到的。除此之外,書中還提到一些高層次的原則用于組織高層的設(shè)計(jì)元素,這些放到下次再寫。當(dāng)然,OO設(shè)計(jì)的原則可能不止這五個(gè),希望大家多提寶貴意見(jiàn),多多交流。

          在學(xué)習(xí)和使用OO設(shè)計(jì)的時(shí)候,我們應(yīng)該明白:OO的出現(xiàn)使得軟件工程師們能夠用更接近真實(shí)世界的方法描述軟件系統(tǒng)。然而,軟件畢竟是建立在抽象層次上的東西,再怎么接近真實(shí),也不能替代真實(shí)或被真實(shí)替代。

          OO設(shè)計(jì)的五大原則之間并不是相互孤立的。彼此間存在著一定關(guān)聯(lián),一個(gè)可以是另一個(gè)原則的加強(qiáng)或是基礎(chǔ)。違反其中的某一個(gè),可能同時(shí)違反了其余的原則。因此應(yīng)該把這些原則融會(huì)貫通,牢記在心!

    1. SRP(Single Responsibility Principle 單一職責(zé)原則)
          單一職責(zé)很容易理解,也很容易實(shí)現(xiàn)。所謂單一職責(zé),就是一個(gè)設(shè)計(jì)元素只做一件事。什么是“只做一件事”?簡(jiǎn)單說(shuō)就是少管閑事。現(xiàn)實(shí)中就是如此,如果要你專心做一件事情,任何人都有信心可以做得很出色。但如果,你整天被亂七八糟的事所累,還有心思和精力把每件事都作好么?
    fig-1.JPG
         “單一職責(zé)”就是要在設(shè)計(jì)中為每種職責(zé)設(shè)計(jì)一個(gè)類,彼此保持正交,互不干涉。這個(gè)雕塑(二重奏)就是正交的一個(gè)例子,鋼琴家和小提琴家各自演奏自己的樂(lè)譜,而結(jié)果就是一個(gè)和諧的交響樂(lè)。當(dāng)然,真實(shí)世界中,演奏小提琴和彈鋼琴的必須是兩個(gè)人,但是在軟件中,我們往往會(huì)把兩者甚至更多攪和到一起,很多時(shí)候只是為了方便或是最初設(shè)計(jì)的時(shí)候沒(méi)有想到。 

          這樣的例子在設(shè)計(jì)中很常見(jiàn),書中就給了一個(gè)很好的例子:調(diào)制解調(diào)器。這是一個(gè)調(diào)制解調(diào)器最基本的功能。但是這個(gè)類事實(shí)上完成了兩個(gè)職責(zé):連接的建立和中斷、數(shù)據(jù)的發(fā)送和接收。顯然,這違反了SRP。這樣做會(huì)有潛在的問(wèn)題:當(dāng)僅需要改變數(shù)據(jù)連接方式時(shí),必須修改Modem類,而修改Modem類的結(jié)果就是使得任何依賴Modem類的元素都需要重新編譯,不管它是不是用到了數(shù)據(jù)連接功能。解決的辦法,書中也已經(jīng)給出:重構(gòu)Modem類,從中抽出兩個(gè)接口,一個(gè)專門負(fù)責(zé)連接、另一個(gè)專門負(fù)責(zé)數(shù)據(jù)發(fā)送。依賴Modem類的元素也要做相應(yīng)的細(xì)化,根據(jù)職責(zé)的不同分別依賴不同的接口。最后由ModemImplementation類實(shí)現(xiàn)這兩個(gè)接口。
    fig-2.JPG

          從這個(gè)例子中,我們不難發(fā)現(xiàn),違反SRP通常是由于過(guò)于“真實(shí)”地設(shè)計(jì)了一個(gè)類所造成的。因此,解決辦法是往更高一層進(jìn)行抽象化提取,將對(duì)某個(gè)具體類的依賴改變?yōu)閷?duì)一組接口或抽象類的依賴。當(dāng)然,這個(gè)抽象化的提取應(yīng)該根據(jù)需要設(shè)計(jì),而不是盲目提取。比如剛才這個(gè)Modem的例子中,如果有必要,還可以把DataChannel抽象為DataSender和DataReceiver兩個(gè)接口。
     

    posted on 2006-01-09 21:17 GHawk 閱讀(5557) 評(píng)論(5)  編輯  收藏 所屬分類: 軟件過(guò)程學(xué)習(xí)筆記

    評(píng)論

    # re: 敏捷軟件開(kāi)發(fā) 讀書筆記 (2)——OO五大原則(1.SRP 單一職責(zé)原則) 2006-01-11 10:49 robert.li

    好文章!  回復(fù)  更多評(píng)論   

    # re: 敏捷軟件開(kāi)發(fā) 讀書筆記 (2)——OO五大原則(1.SRP 單一職責(zé)原則) 2006-04-23 21:08 charon@xxx

    實(shí)際上,Robert C.Martin的意思是,一個(gè)實(shí)在的Modem類和分離職責(zé)的Modem類到底哪個(gè)更好,取決于應(yīng)用的實(shí)際情況.
    只有在碰到那種"連接方式有差異"的情形時(shí),再抽象出這兩個(gè)接口才是正常的.
    .  回復(fù)  更多評(píng)論   

    # re: 敏捷軟件開(kāi)發(fā) 讀書筆記 (2)——OO五大原則(1.SRP 單一職責(zé)原則) 2006-12-10 14:14 Hick

    竟然有人稱之為好文章!
    讀書筆記的作者明顯歪曲原書作者的意思。正如樓上 charon@xxx 所說(shuō)!真不清楚現(xiàn)在為什么老有人喜歡散發(fā)這樣不負(fù)責(zé)任的東西。這樣的讀書筆記,別拿出來(lái)誤人子弟!  回復(fù)  更多評(píng)論   

    # re: 敏捷軟件開(kāi)發(fā) 讀書筆記 (2)——OO五大原則(1.SRP 單一職責(zé)原則) 2006-12-10 23:33 colacu

    樓上何必這么fq呢,每個(gè)人都有自己的理解,誰(shuí)也不能完全保證正確
    這樣的文章拿出來(lái)討論,不是更鍛煉新手的判斷能力么
    盡信書則不如無(wú)書,我們要鍛煉的是自己的獨(dú)立思考能力呀
      回復(fù)  更多評(píng)論   

    # re: 敏捷軟件開(kāi)發(fā) 讀書筆記 (2)——OO五大原則(1.SRP 單一職責(zé)原則) 2010-01-11 14:33 bitspirit

    @Hick
    思維肯定是一個(gè)發(fā)展的過(guò)程!最討厭那種叫囂的人,自己沒(méi)什么東西,還裝!  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 99视频在线免费| 亚洲中文无码a∨在线观看| 日韩一区二区a片免费观看| 精品一区二区三区免费观看| 亚洲情A成黄在线观看动漫软件| 亚洲人成网站在线播放vr| 国产免费观看网站| 69式国产真人免费视频 | 国产亚洲精品高清在线| 午夜两性色视频免费网站| 最近2019免费中文字幕视频三| 久青草视频在线观看免费| 人人狠狠综合久久亚洲| 亚洲综合精品成人| 亚洲国产av一区二区三区丶| 亚洲成年轻人电影网站www| 亚洲精品无码乱码成人| 亚洲欧洲久久av| 亚洲人AV永久一区二区三区久久| 免费毛片在线播放| 免费看美女被靠到爽的视频| 成人免费一区二区无码视频| 91手机看片国产永久免费| 2015日韩永久免费视频播放| 亚洲免费视频网站| 国产精品99精品久久免费| 久久精品国产影库免费看| 最好免费观看高清在线| a级毛片高清免费视频| 光棍天堂免费手机观看在线观看| 人成午夜免费大片在线观看| 一级毛片正片免费视频手机看| 色婷婷精品免费视频| 特级毛片在线大全免费播放| 四虎影视在线看免费观看| 一个人看的hd免费视频| aaa毛片视频免费观看| 美女被cao网站免费看在线看| 国精产品一区一区三区免费视频| 久久免费公开视频| 亚洲精品免费在线视频|