<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • OO設(shè)計原則「」

    時間:2024-08-01 05:39:33 SUN認(rèn)證 我要投稿
    • 相關(guān)推薦

    OO設(shè)計原則匯總「精選」

      OO(Object Oriented,面向?qū)ο?是當(dāng)前計算機界關(guān)心的重點,它是90年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。

      設(shè)計原則是基本的工具,應(yīng)用這些規(guī)則可使代碼更加靈活、更容易維護,更容易擴展。基本原則:封裝變化 Encapsulate what varies. 面向接口變成而不是實現(xiàn) Code to an interface rather than to an implementation. 優(yōu)先使用組合而非繼承 Favor Composition Over Inheritan

      什么是設(shè)計原則?

      設(shè)計原則是基本的工具,應(yīng)用這些規(guī)則可以使你的代碼更加靈活、更容易維護,更容易擴展。

      基本原則

      封裝變化Encapsulate what varies.

      面向接口變成而不是實現(xiàn) Code to an interface rather than to an implementation.

      優(yōu)先使用組合而非繼承 Favor Composition Over Inheritance

      SRP: The single responsibility principle 單一職責(zé)

      系統(tǒng)中的每一個對象都應(yīng)該只有一個單獨的職責(zé),而所有對象所關(guān)注的就是自身職責(zé)的完成。

      Every object in your system should have a single responsibility ,and all the object s services should be focused on carrying out that single responsibility .

      每一個職責(zé)都是一個設(shè)計的變因,需求變化的時候,需求變化反映為類職責(zé)的變化。當(dāng)你系統(tǒng)里面的對象都只有一個變化的原因的時候,你就已經(jīng)很好的遵循了SRP原則。

      如果一個類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在了一起。一個職責(zé)的變化就可能削弱或者抑制這個類其它職責(zé)的能力。這種設(shè)計會導(dǎo)致脆弱的設(shè)計。當(dāng)變化發(fā)生的時候,設(shè)計會遭到意想不到的破壞。

      SRP 讓這個系統(tǒng)更容易管理維護,因為不是所有的問題都攪在一起。

      內(nèi)聚Cohesion 其實是SRP原則的另外一個名字.你寫了高內(nèi)聚的軟件其實就是說你很好的應(yīng)用了SRP原則。

      怎么判斷一個職責(zé)是不是一個對象的呢?你試著讓這個對象自己來完成這個職責(zé),比如:“書自己閱讀內(nèi)容”,閱讀的職責(zé)顯然不是書自己的。

      僅當(dāng)變化發(fā)生時,變化的軸線才具有實際的意義,如果沒有征兆,那么應(yīng)用SRP或者任何其它的原則都是不明智的。

      DRY : Don't repeat yourself Principle

      通過抽取公共部分放置在一個地方避免代碼重復(fù).

      Avoid duplicate code by abstracting out things that are common and placing those thing in a single location .

      DRY 很簡單,但卻是確保我們代碼容易維護和復(fù)用的關(guān)鍵。

      你盡力避免重復(fù)代碼候?qū)嶋H上在做一件什么事情呢?是在確保每一個需求和功能在你的系統(tǒng)中只實現(xiàn)一次,否則就存在浪費!系統(tǒng)用例不存在交集,所以我們的代碼更不應(yīng)該重復(fù),從這個角度看DRY可就不只是在說代碼了。

      DRY 關(guān)注的是系統(tǒng)內(nèi)的信息和行為都放在一個單一的,明顯的位置。就像你可以猜到正則表達式在.net中的位置一樣,因為合理所以可以猜到。

      DRY 原則:如何對系統(tǒng)職能進行良好的分割!職責(zé)清晰的界限一定程度上保證了代碼的單一性。

      OCP : Open-Close Principle開閉原則

      類應(yīng)該對修改關(guān)閉,對擴展打開;

      Classes should be open for extension ,and closed for modification .

      OCP 關(guān)注的是靈活性,改動是通過增加代碼進行的,而不是改動現(xiàn)有的代碼;

      OCP的應(yīng)用限定在可能會發(fā)生的變化上,通過創(chuàng)建抽象來隔離以后發(fā)生的同類變化

      OCP原則傳遞出來這樣一個思想:一旦你寫出來了可以工作的代碼,就要努力保證這段代碼一直可以工作。這可以說是一個底線。稍微提高一點要求, 一旦我們的代碼質(zhì)量到了一個水平,我們要盡最大努力保證代碼質(zhì)量不回退。這樣的要求使我們面對一個問題的時候不會使用湊活的方法來解決,或者說是放任自流的方式來解決一個問題;比如代碼添加了無數(shù)對特定數(shù)據(jù)的處理,特化的代碼越來越多,代碼意圖開始含混不清,開始退化。

      OCP 背后的機制:封裝和抽象;封閉是建立在抽象基礎(chǔ)上的,使用抽象獲得顯示的封閉;繼承是OCP最簡單的例子。除了子類化和方法重載我們還有一些更優(yōu)雅的方法來實現(xiàn)比如組合;

      怎樣在不改變源代碼(關(guān)閉修改)的情況下更改它的行為呢?答案就是抽象,OCP背后的機制就是抽象和多態(tài)

      沒有一個可以適應(yīng)所有情況的貼切的模型!一定會有變化,不可能完全封閉.對程序中的每一個部分都肆意的抽象不是一個好主意,正確的做法是開發(fā)人員僅僅對頻繁變化的部分做出抽象。拒絕不成熟的抽象和抽象本身一樣重要。

      OCP是OOD很多說法的核心,如果這個原則有效應(yīng)用,我們就可以獲更強的可維護性 可重用 靈活性 健壯性 LSP是OCP成為可能的主要原則之一

      LSP: The Liskov substitution principle

      子類必須能夠替換基類。

      Subtypes must be substitutable for their base types.

      LSP關(guān)注的是怎樣良好的使用繼承.

      必須要清楚是使用一個Method還是要擴展它,但是絕對不是改變它。

      LSP清晰的指出,OOD的IS-A關(guān)系是就行為方式而言,行為方式是可以進行合理假設(shè)的,是客戶程序所依賴的。

      LSP讓我們得出一個重要的結(jié)論:一個模型如果孤立的看,并不具有真正意義的有效性。模型的有效性只能通過它的客戶程序來表現(xiàn)。必須根據(jù)設(shè)計的使用者做出的合理假設(shè)來審視它。而假設(shè)是難以預(yù)測的,直到設(shè)計臭味出現(xiàn)的時候才處理它們。

      對于LSP的違反也潛在的違反了OCP

      DIP:依賴倒置原則

      高層模塊不應(yīng)該依賴于底層模塊 二者都應(yīng)該依賴于抽象

      抽象不應(yīng)該依賴于細(xì)節(jié) 細(xì)節(jié)應(yīng)該依賴于抽象

      什么是高層模塊?高層模塊包含了應(yīng)用程序中重要的策略選擇和業(yè)務(wù)模型。這些高層模塊使其所在的應(yīng)用程序區(qū)別于其它。

      如果高層模塊依賴于底層模塊,那么在不同的上下文中重用高層模塊就會變得十分困難。然而,如果高層模塊獨立于底層模塊,那么高層模塊就可以非常容易的被重用。該原則就是框架設(shè)計的核心原則。

      這里的倒置不僅僅是依賴關(guān)系的倒置也是接口所有權(quán)的倒置。應(yīng)用了DIP我們會發(fā)現(xiàn)往往是客戶擁有抽象的接口,而服務(wù)者從這些抽象接口派生。

      這就是著名的Hollywood原則:"Don't call us we'll call you."底層模塊實現(xiàn)了在高層模塊聲明并被高層模塊調(diào)用的接口。

      通過倒置我們創(chuàng)建了更靈活 更持久更容易改變的結(jié)構(gòu)

      DIP的簡單的啟發(fā)規(guī)則:依賴于抽象;這是一個簡單的陳述,該規(guī)則建議不應(yīng)該依賴于具體的類,也就是說程序匯總所有的依賴都應(yīng)該種植于抽象類或者接口。

      如果一個類很穩(wěn)定,那么依賴于它不會造成傷害。然而我們自己的具體類大多是不穩(wěn)定的,通過把他們隱藏在抽象接口后面可以隔離不穩(wěn)定性。

      依賴倒置可以應(yīng)用于任何存在一個類向另一個類發(fā)送消息的地方

      依賴倒置原則是實現(xiàn)許多面向?qū)ο蠹夹g(shù)多宣稱的好處的基本底層機制,是面向?qū)ο蟮臉?biāo)志所在。

      ISP:接口隔離原則

      不應(yīng)該強迫客戶程序依賴它們不需要的使用的方法。

      接口不是高內(nèi)聚的,一個接口可以分成N組方法,那么這個接口就需要使用ISP處理一下。

      接口的劃分是由使用它的客戶程序決定的,客戶程序是分離的接口也應(yīng)該是分離的。

      一個接口中包含太多行為時候,導(dǎo)致它們的客戶程序之間產(chǎn)生不正常的依賴關(guān)系,我們要做的就是分離接口,實現(xiàn)解耦。

      應(yīng)用了ISP之后,客戶程序看到的是多個內(nèi)聚的接口。

    【OO設(shè)計原則「」】相關(guān)文章:

    吧臺設(shè)計原則09-02

    文字設(shè)計的原則05-29

    商場設(shè)計原則07-31

    環(huán)境設(shè)計的設(shè)計原則07-30

    樂曲設(shè)計的首要原則08-14

    超市裝修設(shè)計原則06-17

    酒店設(shè)計原則09-14

    環(huán)境設(shè)計的原則08-18

    書房設(shè)計的原則與技巧08-04

    平面文字設(shè)計的原則09-22

    主站蜘蛛池模板: 久久99精品国产麻豆| 国产精品久久久天天影视香蕉 | 中文字幕精品无码一区二区| 久久久精品免费国产四虎| 亚洲国产精品VA在线看黑人| 国产美女精品视频| 欧美日激情日韩精品| 99re6这里有精品热视频| 亚洲色精品aⅴ一区区三区| 久久丝袜精品中文字幕| 国产精品九九久久免费视频| 一区二区三区四区精品视频| 国产精品www| 国产成人亚洲精品青草天美| 久久免费的精品国产V∧| 中文字幕在线亚洲精品| 无码国内精品久久人妻麻豆按摩| 国产精品99精品视频网站| 欧美久久精品一级c片片| 99久久久精品免费观看国产| 久久99精品国产自在现线小黄鸭| 欧美亚洲色综久久精品国产| 亚洲综合无码精品一区二区三区| 免费精品视频在线| 久久激情亚洲精品无码?V| 韩国三级中文字幕hd久久精品| 国产高清一级毛片精品| 91亚洲国产成人久久精品网址| 亚洲国产精品一区| 99久久人人爽亚洲精品美女| 国产精品久久久久一区二区三区| 国产综合色产在线精品| 久久精品国产国产精品四凭| 午夜精品一区二区三区在线视| 亚洲国产精品尤物yw在线| 欲帝精品福利视频导航| 特级精品毛片免费观看| 成人区人妻精品一区二区不卡网站 | www亚洲欲色成人久久精品| 99久久精品国产一区二区| 国产精品户外野外|