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

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

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

    GHawk

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

          一點說明:OO的五大原則是指SRP、OCP、LSP、DIP、ISP。這五個原則是書中所提到的。除此之外,書中還提到一些高層次的原則用于組織高層的設計元素,這些放到下次再寫。當然,OO設計的原則可能不止這五個,希望大家多提寶貴意見,多多交流。

          在學習和使用OO設計的時候,我們應該明白:OO的出現使得軟件工程師們能夠用更接近真實世界的方法描述軟件系統。然而,軟件畢竟是建立在抽象層次上的東西,再怎么接近真實,也不能替代真實或被真實替代。

          OO設計的五大原則之間并不是相互孤立的。彼此間存在著一定關聯,一個可以是另一個原則的加強或是基礎。違反其中的某一個,可能同時違反了其余的原則。因此應該把這些原則融會貫通,牢記在心!

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

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

          從這個例子中,我們不難發現,違反SRP通常是由于過于“真實”地設計了一個類所造成的。因此,解決辦法是往更高一層進行抽象化提取,將對某個具體類的依賴改變為對一組接口或抽象類的依賴。當然,這個抽象化的提取應該根據需要設計,而不是盲目提取。比如剛才這個Modem的例子中,如果有必要,還可以把DataChannel抽象為DataSender和DataReceiver兩個接口。
     

    posted on 2006-01-09 21:17 GHawk 閱讀(5557) 評論(5)  編輯  收藏 所屬分類: 軟件過程 、學習筆記

    評論

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

    好文章!  回復  更多評論   

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

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

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

    竟然有人稱之為好文章!
    讀書筆記的作者明顯歪曲原書作者的意思。正如樓上 charon@xxx 所說!真不清楚現在為什么老有人喜歡散發這樣不負責任的東西。這樣的讀書筆記,別拿出來誤人子弟!  回復  更多評論   

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

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

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

    @Hick
    思維肯定是一個發展的過程!最討厭那種叫囂的人,自己沒什么東西,還裝!  回復  更多評論   

    主站蜘蛛池模板: 国产精品亚洲mnbav网站| 在线播放免费人成视频在线观看| 全部免费a级毛片| 欧美色欧美亚洲另类二区| 免费精品一区二区三区在线观看| 亚洲五月综合缴情婷婷| 在线精品免费视频无码的| 亚洲自偷自偷在线成人网站传媒| 岛国av无码免费无禁网站| 亚洲色大成网站www永久男同| 国内自产拍自a免费毛片| 色婷婷六月亚洲综合香蕉| 国产一级一片免费播放i| 免费一区二区三区在线视频| 亚洲av日韩片在线观看| 国产午夜无码片免费| 97亚洲熟妇自偷自拍另类图片| 一级毛片免费毛片一级毛片免费| 亚洲国产精品白丝在线观看| 女人张开腿给人桶免费视频| 国产偷国产偷亚洲高清在线| 亚洲热妇无码AV在线播放| 久久久久久久久久国产精品免费| 亚洲国产综合第一精品小说| 永久免费av无码网站大全| 久香草视频在线观看免费| 亚洲人成电影福利在线播放| 又粗又大又黑又长的免费视频| 久久精品国产亚洲AV天海翼| 亚洲精品无码不卡在线播放HE| 精品无码无人网站免费视频| AV激情亚洲男人的天堂国语| 亚洲精品无码MV在线观看| 成人免费视频网站www| 国产午夜亚洲精品不卡电影| 日韩亚洲Av人人夜夜澡人人爽| 毛片免费vip会员在线看| 国产福利电影一区二区三区,免费久久久久久久精 | 99re免费在线视频| 亚洲精品国产suv一区88| 亚洲乳大丰满中文字幕|