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

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

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

    飛翔的起點(diǎn)

    從這里出發(fā)

    導(dǎo)航

    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統(tǒng)計(jì)

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    面向?qū)ο笾饕奈宸N編程原則

       單一職責(zé)原則SRP:Single Responsibility Principle
        開放封閉原則OCP:Open-Close Principle
        Liskov替換原則LSP:Liskov Substitution Principle
        依賴倒置原則DIP:Dependency Invertion Principle
        接口隔離原則ISP:Interface Separate Principle

        在面向?qū)ο笤O(shè)計(jì)中,如何通過(guò)很小的設(shè)計(jì)改變就可以應(yīng)對(duì)設(shè)計(jì)需求的變化,這是令設(shè)計(jì)者極為關(guān)注的問(wèn)題。為此不少OO先驅(qū)提出了很多有關(guān)面向?qū)ο蟮脑O(shè)計(jì)原則用于指導(dǎo)OO的設(shè)計(jì)和開發(fā)。下面是幾條與類設(shè)計(jì)相關(guān)的設(shè)計(jì)原則。

        1.開閉原則(the Open Closed Principle OCP)
           一個(gè)模塊在擴(kuò)展性方面應(yīng)該是開放的而在更改性方面應(yīng)該是封閉的。因此在進(jìn)行面向?qū)ο笤O(shè)計(jì)時(shí)要盡量考慮接口封裝機(jī)制、抽象機(jī)制和多態(tài)技術(shù)。該原則同樣適合 于非面向?qū)ο笤O(shè)計(jì)的方法,是軟件工程設(shè)計(jì)方法的重要原則之一。我們以收音機(jī)的例子為例,講述面向?qū)ο蟮拈_閉原則。我們收聽節(jié)目時(shí)需要打開收音機(jī)電源,對(duì)準(zhǔn) 電臺(tái)頻率和進(jìn)行音量調(diào)節(jié)。但是對(duì)于不同的收音機(jī),實(shí)現(xiàn)這三個(gè)步驟的細(xì)節(jié)往往有所不同。比如自動(dòng)收縮電臺(tái)的收音機(jī)和按鈕式收縮在操作細(xì)節(jié)上并不相同。因此, 我們不太可能針對(duì)每種不同類型的收音機(jī)通過(guò)一個(gè)收音機(jī)類來(lái)實(shí)現(xiàn)(通過(guò)重載)這些不同的操作方式。但是我們可以定義一個(gè)收音機(jī)接口,提供開機(jī)、關(guān)機(jī)、增加頻 率、降低頻率、增加音量、降低音量六個(gè)抽象方法。不同的收音機(jī)繼承并實(shí)現(xiàn)這六個(gè)抽象方法。這樣新增收音機(jī)類型不會(huì)影響其它原有的收音機(jī)類型,收音機(jī)類型擴(kuò) 展極為方便。此外,已存在的收音機(jī)類型在修改其操作方法時(shí)也不會(huì)影響到其它類型的收音機(jī)。

        2.替換原則 (the Liskov Substitution Principle LSP)
          子類應(yīng)當(dāng)可以替換父類并出現(xiàn)在父類能夠出現(xiàn)的任何地方。這個(gè)原則是Liskov于1987年提出的設(shè)計(jì)原則。它同樣可以從Bertrand Meyer 的DBC (Design by Contract) 的概念推出。
          我們以學(xué)生為例,夜校生為學(xué)生的子類,因此在任何學(xué)生可以出現(xiàn)的地方,夜校生均可出現(xiàn)。這個(gè)例子有些牽強(qiáng),一個(gè)能夠反映這個(gè)原則的例子時(shí)圓和橢圓,圓是橢圓的一個(gè)特殊子類。因此任何出現(xiàn)橢圓的地方,圓均可以出現(xiàn)。但反過(guò)來(lái)就可能行不通。
          運(yùn)用替換原則時(shí),我們盡量把類B設(shè)計(jì)為抽象類或者接口,讓C類繼承類B(接口B)并實(shí)現(xiàn)操作A和操作B,運(yùn)行時(shí),類C實(shí)例替換B,這樣我們即可進(jìn)行新類的擴(kuò)展(繼承類B或接口B),同時(shí)無(wú)須對(duì)類A進(jìn)行修改。

        3.依賴原則 (the Dependency Inversion Principle DIP)
          在進(jìn)行業(yè)務(wù)設(shè)計(jì)時(shí),與特定業(yè)務(wù)有關(guān)的依賴關(guān)系應(yīng)該盡量依賴接口和抽象類,而不是依賴于具體類。具體類只負(fù)責(zé)相關(guān)業(yè)務(wù)的實(shí)現(xiàn),修改具體類不影響與特定業(yè)務(wù)有關(guān)的依賴關(guān)系。
          在結(jié)構(gòu)化設(shè)計(jì)中,我們可以看到底層的模塊是對(duì)高層抽象模塊的實(shí)現(xiàn)(高層抽象模塊通過(guò)調(diào)用底層模塊),這說(shuō)明,抽象的模塊要依賴具體實(shí)現(xiàn)相關(guān)的模塊,底層模塊的具體實(shí)現(xiàn)發(fā)生變動(dòng)時(shí)將會(huì)嚴(yán)重影響高層抽象的模塊,顯然這是結(jié)構(gòu)化方法的一個(gè)"硬傷"。
          面向?qū)ο蠓椒ǖ囊蕾囮P(guān)系剛好相反,具體實(shí)現(xiàn)類依賴于抽象類和接口。
          為此,我們?cè)谶M(jìn)行業(yè)務(wù)設(shè)計(jì)時(shí),應(yīng)盡量在接口或抽象類中定義業(yè)務(wù)方法的原型,并通過(guò)具體的實(shí)現(xiàn)類(子類)來(lái)實(shí)現(xiàn)該業(yè)務(wù)方法,業(yè)務(wù)方法內(nèi)容的修改將不會(huì)影響到運(yùn)行時(shí)業(yè)務(wù)方法的調(diào)用。

        4.接口分離原則(the Interface Segregation Principle ISP)
            采用多個(gè)與特定客戶類有關(guān)的接口比采用一個(gè)通用的涵蓋多個(gè)業(yè)務(wù)方法的接口要好。
          ISP原則是另外一個(gè)支持諸如COM等組件化的使能技術(shù)。缺少ISP,組件、類的可用性和移植性將大打折扣。
          這個(gè)原則的本質(zhì)相當(dāng)簡(jiǎn)單。如果你擁有一個(gè)針對(duì)多個(gè)客戶的類,為每一個(gè)客戶創(chuàng)建特定業(yè)務(wù)接口,然后使該客戶類繼承多個(gè)特定業(yè)務(wù)接口將比直接加載客戶所需所有方法有效。

        以上四個(gè)原則是面向?qū)ο笾谐3S玫降脑瓌t。此外,除上述四原則外,還有一些常用的經(jīng)驗(yàn)諸如類結(jié)構(gòu)層次以三到四層為宜、類的職責(zé)明確化(一個(gè)類對(duì)應(yīng)一個(gè)具體職 責(zé))等可供我們?cè)谶M(jìn)行面向?qū)ο笤O(shè)計(jì)參考。但就上面的幾個(gè)原則看來(lái),我們看到這些類在幾何分布上呈現(xiàn)樹型拓?fù)涞年P(guān)系,這是一種良好、開放式的線性關(guān)系、具有 較低的設(shè)計(jì)復(fù)雜度。一般說(shuō)來(lái),在軟件設(shè)計(jì)中我們應(yīng)當(dāng)盡量避免出現(xiàn)帶有閉包、循環(huán)的設(shè)計(jì)關(guān)系,它們反映的是較大的耦合度和設(shè)計(jì)復(fù)雜化。

    posted on 2008-04-16 14:39 forgood 閱讀(247) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中文字幕视频免费| 亚洲国产精品无码久久久蜜芽| 亚洲伊人久久精品| 亚洲欧洲精品成人久久曰| 一二三四在线观看免费中文在线观看 | 黄网站色视频免费在线观看的a站最新| 亚洲欧美成aⅴ人在线观看| 99久久久国产精品免费牛牛| 亚洲精品高清久久| 1000部拍拍拍18免费网站| 亚洲欧洲日本在线| 一区二区三区免费视频网站 | 国产亚洲玖玖玖在线观看| 青草草色A免费观看在线| 亚洲精品无码久久一线| 国产精品亚洲天堂| 久久不见久久见中文字幕免费 | 免费无码成人AV在线播放不卡| 欧洲乱码伦视频免费| 亚洲狠狠成人综合网| 大学生a级毛片免费观看| 最新亚洲人成网站在线观看| 91香蕉成人免费网站| 亚洲日本国产综合高清| 国产又粗又长又硬免费视频| 国产精品亚洲专区在线观看| 女人18毛片特级一级免费视频| 亚洲精品线在线观看| 可以免费看黄的网站| 婷婷亚洲综合一区二区| 亚洲精品无码久久久久去q| 久久精品免费一区二区| 国产亚洲欧美日韩亚洲中文色| 日本免费一区二区在线观看| 亚洲成av人片在线天堂无| 亚洲男人天堂2020| 久久精品免费一区二区| 久香草视频在线观看免费| 亚洲女人初试黑人巨高清| 4444www免费看| 羞羞视频免费网站入口|