物件導向原則

2021-05-13 00:54:43 字數 2395 閱讀 4009

1.       單一職責原則(srp)

單一職責原則(srp),就乙個類而言,應該僅有乙個引起它變化的原因。也就是說,不要把變化原因各不相同的職責放在一起,因為不同的變化會影響到不相干的職責。再通俗一點地說就是,不該你管的事情你不要管,管好自己的事情就可以了,多管閒事害了自己也害了別人。

在軟體設計中,如果乙個類承擔的職責過多,就等於吧這些職責耦合在一起,而乙個職責的變化可能會削弱和抑制這個類完成其他職責的能力。這耦合會導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞。

軟體設計真正要做的許多內容,就是發現職責並把那些職責相互分離。如果多於乙個的動機去改變乙個類,那麼這個類就具有多餘乙個的職責,就應該要考慮類的職責分離。

2.       單一職責原則(srp)

開放-封閉原則,或叫開-閉原則,是說軟體實體(類、模組、函式等)應該是可以擴充套件的,但是不可修改。不修改的意思就是是「你可以隨便增加新的類,但是不要修改原來的類」。從這個角度去理解就好多了,其實這裡還是乙個隔離變化的問題。

這個原則的兩個特徵:乙個是對於擴充套件是開放的;另乙個是對於更改是封閉的。

我們在設計開發任何系統時,都不可能指望系統一開始就需求確定,就不再變化(要這樣就太幸福了,哈哈),這是不現實的也是不科學的想法。既然需求是有一定變化的,那麼如何在面對需求變化時,設計的程式可以相對容易的修改,不至於說,新需求一來,就要把整個程式推倒重來(這樣會讓程式設計師瘋了不可,哈哈,你不想瘋吧)。怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第乙個版本以後不斷推出的新版本呢?開放-封閉原則就是我們的答案。

在程式設計時,我們要時刻考慮盡量把類設計的足夠好,寫好了就不要去修改,如果有新的需求來了,我們增加一些類來完成新的需求,原來的**能不動就不動。

絕對的對修改關閉是不可能的,無論模組是多麼的封閉,都會存在一些無法對之封閉的變化,既然不能完全封閉,設計人員必須對他設計的模組應該對那種變化封閉做出抉擇、他必須事先猜測出最有可能發生變化的變化種類,然後構建抽象來隔離那些變化。

開放-封閉原則是物件導向設計的核心所在。遵循這個原則可以帶來物件導向技術所生成的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開發人員應該僅對程式中呈現出頻繁變化的部分都做出抽象,然後,對於應用程式中的每部分都刻意定進行抽象同樣不是乙個好主意,拒絕不成熟的抽象和抽象本身一樣重要。

3.       依賴倒轉原則(dip dependency inversion principle)

依賴倒轉原則:抽象不應該依賴於細節。細節應該依賴於抽象;高層不應該依賴於底層,兩者都應該依賴於抽象。說白了就是要針對介面程式設計,不要針對實現程式設計。抽象的東西才是最穩定的,也就是說,我們依賴的是它的穩定。

依賴倒轉其實可以說是物件導向設計的標誌,用哪種語言來編寫程式不重要,如果編寫是考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中的所有的依賴關係都是終止與抽象類或者介面,那就是物件導向的設計,反之就是過程化設計了。

4.       黎克特制代換原則

黎克特制代換原則(lsp):子型別必須能夠替換掉他的父型別。說白了就是乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,而他察覺不出父類物件和子類物件的區別,也就是說,在軟體裡面,把父類都替換成他的子類,程式行為沒有變化。

有了黎克特制替換原則,才是繼承服用成為可能,只有當子類可以替換掉父類時,軟體的功能不受到影響,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。

有了黎克特制代換原則,才能使開放-封閉原則成為可能,正是由於子型別的可替換性才使得父型別的模組在無需修改的情況下擴充套件。

5.       介面隔離原則(isp)

介面隔離原則(isp):不應該強迫客戶依賴於它們不用的方法。介面屬於客戶,不屬於它所在的類層次結構。這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫使用者使用它們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。

6.    迪公尺特法則(lod)

迪公尺特法則(law of demeter或簡寫lod)又叫最少知識原則(least knowledge principle或簡寫為lkp):如果兩個類不彼此之間直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某個方法的話,可以通過第三者**這個呼叫。

迪公尺特法則首先強調的前提是在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權。

迪公尺特法則其根本思想強調的是類之間的松耦合。類之間的耦合越弱,越利於復用,乙個處於弱耦合的類被修改,不會對有關係的類造成波及。

7.    合成/聚合復用原則(composite/aggregate reuse principle或carp)

合成/聚合復用原則(composite/aggregate reuse principle或carp):經常又叫做合成復用原則(composite reuse principle或crp),就是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分;新物件通過向這些物件的委派達到復用已有功能的目的。我白了就是要盡量使用合成/聚合,盡量不要使用繼承。

物件導向原則

一.單一職責原則 srp 就乙個類而言,只有乙個引起它變化的原因。如果乙個類承載的職責過多,就等於把這些職責耦合在一起。乙個職責的變化可能削弱或抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當發生變化時,設計會遭受意想不到的破壞。軟體設計真正要做的就是,發現職責並把職責相互分離。如果你能想...

物件導向原則

單一職責原則 概念 乙個類引起他變化的原因就乙個 優點 易維護 易擴充套件 易復用 靈活多樣 缺點 如果乙個類承擔的職責過多,就相當於把這些功能耦合在一起,乙個功能的變化可能會削弱或抑制這個類完成其他職責的能力。開放 封閉原則 概念 對於開放是擴充套件的,對於更改是封閉的 面對需求時,對程式的改動是...

物件導向原則

單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因 如果乙個類承擔了過多的職責,就等於把這些職責耦合在一起,這種耦合會導致脆弱的設計 開放 封閉原則 對於擴充套件時開放的,對於修改的封閉的 依賴倒轉原則 抽象不應該依賴細節,細節應該依賴於抽象,說白了,就是要針對介面程式設計,不要對實現程式設計...