為了改變上面軟件設計中的腐化味,敏捷開發采取了以下面向對象的設計原則來加以避免,這些原則如下:
n 單一職責原則(SRP)
就一個類而言,應該僅有一個引起它變化的原因。
n 開放-封閉原則(OCP)
軟件實體應該是可以擴展的,但是不可修改。
n Liskov替換原則(LSP)
子類型必須能夠替換掉它們的基類型。
n 依賴倒置原則(DIP)
抽象不應該依賴于細節。細節應該依賴于抽象。
n 接口隔離原則(ISP)
不應該強迫客戶依賴于它們不用的方法。接口屬于客戶,不屬于它所在的類層次結構。
n 重用發布等價原則(REP)
重用的粒度就是發布的粒度。
n 共同封閉原則(CCP)
包中的所有類對于同一類性質的變化應該是共同封閉的。一個變化若對一個包產生影響,則將對該包中的所有類產生影響,而對于其他的包不造成任何影響。
n 共同重用原則(CRP)
一個包中的所有類應該是共同重用的。如果重用了包中的一個類,那么就要重用包中的所有類。
n 無環依賴原則(ADP)
在包的依賴關系圖中不允許存在環。
n 穩定依賴原則(SDP)
朝著穩定的方向進行依賴。
n 穩定抽象原則(SAP)
包的抽象程度應該和其穩定程度一致。
上述中的包的概念是:包可以用作包容一組類的容器,通過把類組織成包,我們可以在更高層次的抽象上來理解設計,我們也可以通過包來管理軟件的開發和發布。目的就是根據一些原則對應用程序中的類進行劃分,然后把那些劃分后的類分配到包中。
下面舉一個簡單的設計問題方面的模式與原則應用的示例:
問題:
選擇設計運行在簡易臺燈中的軟件,臺燈由一個開關和一盞燈組成。你可以詢問開關開著還是關著,也可以讓燈打開或關閉。
解決方案一:
下面圖1是一種最簡單的解決方案,Switch對象可以輪詢真實開關的狀態,并且可以發送相應的turnOn和turnOff消息給Light。
文章來源于領測軟件測試網 http://www.kjueaiud.com/