[color=olive][size=medium][b]1. 開閉原則(the open closed principle ocp)[/b] 乙個模組在擴充套件性方面應該是開放的而在更改性方面應該是封閉的。
因此在進行物件導向設計時要盡量考慮介面封裝機制、抽象機制和多型技術。(該原則同樣適合於非物件導向設計的方法,是軟體工程設計方法的重要原則之一)
以收音機的例子為例,講述物件導向的開閉原則。我們收聽節目時需要開啟收音機電源,對準電台頻率和進行音量調節。但是對於不同的收音機,實現這三個步驟的細節往往有所不同。比如自動收縮電台的收音機和按鈕式收縮在操作細節上並不相同。因此,我們不太可能針對每種不同型別的收音機通過乙個收音機類來實現(通過過載)這些不同的操作方式。但是我們可以定義乙個收音機介面,提供開機、關機、增加頻率、降低頻率、增加音量、降低音量六個抽象方法。不同的收音機繼承並實現這六個抽象方法。這樣新增收音機型別不會影響其它原有的收音機型別,收音機型別擴充套件極為方便。此外,已存在的收音機型別在修改其操作方法時也不會影響到其它型別的收音機。
[b]2.黎克特制代換原則 lsp [/b]如果對每乙個型別為t1的物件o1,都有型別為t2的物件o2,使得以t1定義的所有程式p在所有物件o1都代換成o2時,程式p的行為沒有變化,那麼型別t2是t1的子型別。
lsp要求凡是基類使用的地方,子型別一定適用。
lsp是一條非常嚴格的原則,要求基類變為子類的時候,其程式行為不發生改變。在oop時並沒有嚴格按照lsp來做。
[b]3.依賴倒轉原則 dip [/b]表述1:抽象不應當依賴於細節,細節應當依賴於抽象。
abstractions should not depend upon details, details should depend upon abstractions.
表述2:要針對介面程式設計,不要針對實現程式設計。
program to an inte***ce, not an implementation.
[b]4.介面隔離原則 isp [/b]使用多個專門的介面比使用單一的總介面要好。
乙個類對另乙個類的依賴性應當是建立在最小介面上的(lod)。
[b]5.合成/聚合復用原則 carp [/b]= 合成復用原則 composite reuse principle crp
要盡量使用合成/聚合,盡量不要使用繼承。
繼承的優點:①新類易實現. ②易修改或擴充套件
缺點:①繼承復用破環包裝,白箱復用.
②超類發生變化,子類不得不改變.
③繼承的實現是靜態的,不能在執行時改變.
優缺點的②是相互對應的。
[b]6.迪公尺特法則 lod [/b]= 最少知識原則 least konwledge principle
乙個物件應當對其他物件有盡可能少的了解。
表述:
①只與你直接的朋友們通訊 only talk to your immediate friends
②不要跟陌生人說話 don's talk to strangers
③每乙個軟體單位對其他的單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟體單位。
lod的實質是控制物件之間的資訊流量,流向及資訊的影響。
①優先考慮將乙個類設定成不變類.
②盡量降低類/成員的訪問許可權.
[b]7.單一職責原則(single responsibility principle)[/b]就是乙個設計或實體應該只做一件事/只描述乙個事物, 而不要弄得很混亂, 如果你專著於一件事, 乙個模組,你會做得很出色。[/size][/color]
OOP七大原則
單一職責原則 控制類的粒度大小,將物件解耦,提高內聚性 乙個物件應該只包含單一的職責,並且該職責被完整地封裝到乙個類裡 開閉原則 對擴充套件開放,對修改關閉 即實現在不修改源 的情況下改變這個模組的行為 核心 對系統進行抽象化,並從抽象化匯出具體化 黎克特制替換原則 繼承必須確保超類所擁有的性質在子...
物件導向7大原則
單一職責 乙個物件應該只包含單一的職責,並且該職責被完整地封裝在乙個類中。開放閉合原則 開閉原則就是指軟體實體應當盡量保證在不修改原有 的情況下,對軟體進行擴充套件。開閉原則是物件導向設計的基石。黎克特制替換原則 根據 執行時子類物件覆蓋父類物件 的特點保證繼承關係的正確性 依賴倒置 1 抽象不依賴...
物件導向7大原則
單一職責原則,就乙個類而言,應該僅有乙個引起它變化的原因。開放 封閉原則,是說軟體實體應該面向擴充套件開發,面向修改關閉。依賴倒轉原則,a 高層模組不應該依賴底層模組。兩個都應該依賴抽象 b 抽象不應該依賴細節。細節應該依賴抽象。黎克特制代換原則,凡是父類能出現的地方,子類都應該能出現。迪公尺特法則...