物件導向的基本原則

2022-06-18 05:15:08 字數 1731 閱讀 5931

單一職責原則(srp)

就乙個類而言,應該僅有乙個引起它變化的原因。

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

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

開發-封閉原則

是說軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可修改。

這個原則其實有兩個特徵,乙個是說「對於擴充套件是開放的(open for extension)」,另乙個是說「對於更改是封閉的(closed for modification)」

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

在我們最初編寫**時,假設變化不會發生,當發生變化時,我們就建立抽象來隔離以後發生的同類變化。面對需求,對程式的改動是通過新**進行的,而不是更改現有的**。這就是「開放-封閉原則」的精神所在。

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

依賴倒轉原則(依賴倒置原則)

1、高層模組不應該依賴低層模組。兩個都應該依賴抽象。

2、抽象不應該依賴細節。細節應該依賴抽象。

說白了,就是要針對介面程式設計,不要對實現程式設計。

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

黎克特制代換原則

子型別必須能夠替換掉它們的父型別

說白了,就是乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類,而且它察覺不出父類物件和子類物件的區別。

也就是說,在軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。

想一下企鵝是鳥嗎?企鵝可以飛嗎?

正因為有了這個原則,使得繼承復用成為了可能,只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。正是由於子型別的可替換性才使得使用父類型別的模組在無需修改的情況下就可以擴充套件。

迪公尺特法則(最少知識原則)

如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。

迪公尺特法則首先強調的前提是在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權,也就是說乙個類包裝好自己的private狀態,不需要讓別的類知道字段或者行為就不要公開。

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

未完待續!

物件導向設計基本原則

物件導向設計不外乎遵循五大原則 第一 單一職責原則 即 乙個類應該只負責單一的職責,而將其餘的職責讓其他類來承擔,這樣每個類之間相互協調來完成一件任務。第二 開閉原則 即對擴充套件是開放的,對修改是封閉的,因此需要注重抽象的運用 第三 替換原則 子類應該可以替換在父類出現的任何地方 第四 依賴倒置原...

物件導向設計基本原則

物件導向設計不外乎遵循五大原則 第一 單一職責原則 即 乙個類應該只負責單一的職責,而將其餘的職責讓其他類來承擔,這樣每個類之間相互協調來完成一件任務。第二 開閉原則 即對擴充套件是開放的,對修改是封閉的,因此需要注重抽象的運用 第三 替換原則 子類應該可以替換在父類出現的任何地方 第四 依賴倒置原...

物件導向程式設計的基本原則

1 open close principle ocp 開 閉原則。講的是設計要對擴充套件有好的支援,而對修改要嚴格限制。這是最重要也是最為抽象的原則.2 liskov substituition principle lsp 黎克特制代換原則。很嚴格的原則,規則是 子類必須能夠替換基類,否則不應當設計...