《大話設計模式》——學習筆記之面向對象原則&UML類圖

《大話設計模式》——學習筆記之面向對象原則

單一職責原則

定義: 就一個類而言,應該僅有一個引起它變化的原因

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

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

開放-封閉原則

定義: 軟件實體(類、模塊、函數等等)應該可以擴展,但是不可修改(對擴展開放,對更改封閉)

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

等到變化發生時立即採取行動,創建抽象來隔離以後發生的同類變化

面對需求,對程序的改動是通過增加新代碼進行的,而不是更改現有的代碼

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

依賴倒轉原則

定義:

  • 1.高層模塊不應該依賴低層模塊。兩個都應該依賴抽象
  • 2.抽象不應該依賴細節。細節應該依賴抽象

要針對接口編程,不要對實現編程

里氏代換原則

定義: 子類型必須能夠替換掉它們的父類型

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

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

由於子類型的可替換性才使得父類類型的模塊在無需修改的情況下就可以擴展

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

<img da_006>

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

迪米特法則(最少知識原則)

定義: 如果兩個類不必彼此直接通信,那麼這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用

在類的結構設計上,每一個類都應當儘量降低成員的訪問權限

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

聚合表示一種弱的“擁有”關係,體現的是A對象可以包含B對象,但B對象不是A對象的一部分

合成(組合)是一種強的“擁有”關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣

面向對象的編程,並不是類越多越好,類的劃分是爲了封裝,但分類的基礎是抽象,具有相同屬性和功能的對象的抽象集合纔是類

合成/聚合複用原則

定義:儘量使用合成/聚合,儘量不要使用類繼承

聚合表示一種弱的”擁有”關係,體現的是A對象可以包含B對象,但B對象不是A對象的一部分;合成則是一種強的”擁有”關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣

UML類圖

<img da_001>

發佈了84 篇原創文章 · 獲贊 135 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章