物件導向程式設計原則總結

2021-08-27 11:34:22 字數 1562 閱讀 8173

單一職責原則

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

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

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

開放-封閉原則

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

對於擴充套件是開放的 對於更改是封閉的

怎樣的設計才能面對需求的改變卻可以保持相對穩定 從而使得系統可以在第乙個版本以後不斷推出新的版本呢 開放-封閉給我們答案

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

等到變化發生時立即採取行動

在我們最初編寫**時 假設變化不會發生 當變化發生時 我們就建立抽象來隔離以後發生的同類變化

面對需求 對程式的改動是通過增加新**進行的 而不是更改現有的**

我們希望的是在開發工作展開不久就知道可能發生的變化 查明可能發生的變化所等待的時間越長 要建立正確的抽象就越困難

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

依賴倒轉原則

抽象不應該依賴細節 細節應該依賴於抽象

針對介面程式設計 不要對實現程式設計

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

黎克特制代換原則

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

乙個軟體實體如果使用的是乙個父類的話 那麼一定適用於其子類 而且它察覺不出父類物件和子類物件的區別 也就是說 在軟體裡面 把父類都替換成它的子類 程式的行為沒有變化

只有當子類可以替換掉父類 軟體單位的功能不受到影響時 父類才能真正被復用 而子類也能夠在父類的基礎上增加新的行為

由於子型別的可替換性才使得使用父類型別的模組在無需修改的情況下就可以擴充套件

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

迪公尺特法則

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

在類的結構設計上 每乙個類都應當盡量降低成員的訪問許可權

迪公尺特法則其根本思想 是強調了類之間的松耦合

類之間的耦合越弱 越有利於復用 乙個處在弱耦合的類被修改 不會對有關係的類造成波及

物件導向程式設計原則

很久以前就知道物件導向設計有一些公認的基本原則,可都是零零碎碎的了解一部分,雖然在實踐的過程中也有意識的用到了一些,可是從來沒有系統的總結過,這是我從網上找到的比較詳細的介紹,就當是讀書筆記吧 所有的設計模式都是對不同的可變性的封裝,從而使系統在不同角度達到 開閉原則 的要求。在軟體軟體系統中,乙個...

物件導向程式設計原則

宣告 下面列出的物件導向程式設計原則並非我個人總結,而是最近學習設計模式的筆記。目前只是列出剛看過的幾條,以後學到再繼續新增。1.單一職責原則 srp 單一職責原則,就是,就乙個類而言,應該僅有乙個引起它變化的原因。也就是說,乙個類應該只實現乙個單一的功能。為什麼呢?因為,如果乙個類承擔的職責過多,...

物件導向程式設計的原則

1.開閉原則 the open closed principle ocp 乙個模組在擴充套件性方面應該是開放的而在更改性方面應該是封閉的。因此在進行物件導向設計時要盡量考慮介面封裝機制 抽象機制和多型技術。該原則同樣適合於非物件導向設計的方法,是軟體工程設計方法的重要原則之一。我們以收音機的例子為例...