OO的設計原則

2021-06-15 18:34:58 字數 2250 閱讀 9604

從網上找了一些資料覺得這個還可以:)

物件導向設計原則

物件導向設計的基石是「開—閉」原則。

「開一閉」原則講的是:乙個軟體實體應當對擴充套件開放,對修改關閉。

這個規則說的是,在設計乙個模組的時候,應當使這個模組可以在不被修改的前提下被擴充套件。

從另外乙個角度講,就是所謂的「對可變性封裝原則」。「對可變性封裝原則」意味著兩點:

1 .一種可變性不應當散落在**的很多角落裡,而應當被封裝到乙個物件裡面。同一種可變性的不同表象意味著同乙個繼承等級結構中的具體子類。

2.一種可變性不應當與另一種可變性混合在一起。即類圖的繼承結構一般不應超過兩層。

做到「開—閉」原則不是一件容易的事,但是也有很多規律可循,這些規律同樣也是設計原則,它們是實現開—閉原則的工具。

黎克特制代換原則

黎克特制代換原則:如果對每乙個型別為t1的物件o1,都有型別為t2的物件o2,使得以t1定義的所有程式p在所有物件o1都換成o2時,程式p的行為沒有變化,那麼型別t2是t1的子型別。

即如果乙個軟體實體使用的是基類的話那麼也一定適用於子類。但反過來的代換不成立。

如果有兩個具體類a和b之間的關係違反了黎克特制代換原則,可以在以下兩種重構方案中選擇一種:

1 .建立乙個新的抽象類c,作為兩個具體類的超類,將a和b共同的行為移動到c中,從而解決a和b行為不完全一致的問題。

2 .從b到a的繼承關係改寫為委派關係。

依賴倒轉原則

依賴倒轉原則講的是:要依賴於抽象,不要依賴於具體。即針對介面程式設計,不要針對實現程式設計。針對介面程式設計的意思是,應當使用介面和抽象類進行變數的型別宣告、參量的型別宣告,方法的返還型別宣告,以及資料型別的轉換等。不要針對實現程式設計的意思就是說,不應當使用具體類進行變數的型別宣告、參量的型別宣告,方法的返還型別宣告,以及資料型別的轉換等。

依賴倒轉原則雖然強大,但卻不易實現,因為依賴倒轉的緣故,物件的建立很可能要使用物件工廠,以避免對具體類的直接引用,此原則的使用還會導致大量的類。維護這樣的系統需要較好的物件導向的設計知識。

此外,依賴倒轉原則假定所有的具體類都是變化的,這也不總是正確的。有一些具體類可能是相當穩定、不會發生變化的,消費這個具體類例項的客戶端完全可以依賴於這個具體類。

介面隔離原則

介面隔離原則講的是:使用多個專門的介面比使用單一的介面要好。從客戶的角度來說:乙個類對另外乙個類的依賴性應當是建立在最小的介面上的。如果客戶端只需要某一些方法的話,那麼就應當向客戶端提供這些需要的方法,而不要提供不需要的方法。提供介面意味著向客戶端作出承諾,過多的承諾會給系統的維護造成不必要的負擔。

合成、聚合復用原則

合成、聚合復用原則就是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部份,新的物件通過向這些物件的委派達到復用已有功能的目的。這個原則有乙個簡短的描述:要盡量使用合成、聚合,盡量不要使用繼承。

合成、聚合有如下好處:

新物件訪問成分物件的唯一方法是通過成分物件的介面。

這種復用是黑箱復用,因為成分物件的內部細節是新物件所看不到的。

這種復用可以在執行時間內動態進行,新物件可以動態的引用與成分物件型別相同的物件。

合成、聚合可以應用到任何環境中去,而繼承只能應用到一些有限環境中去。

導致錯誤的使用合成、聚合與繼承的乙個常見原因是錯誤的把「has-a」關係當作「is-a」關係。如果兩個類是「has-a」關係那麼應使用合成、聚合,如果是「is-a」關係那麼可使用繼承。

迪公尺特法則

迪公尺特法則說的是乙個物件應該對其它物件有盡可能少的了解。即只與你直接的朋友通訊,不要跟陌生人說話。如果需要和陌生人通話,而你的朋友與陌生人是朋友,那麼可以將你對陌生人的呼叫由你的朋友**,使得某人只知道朋友,不知道陌生人。換言之,某人會認為他所呼叫的是朋友的方法。

以下條件稱為朋友的條件:

當前物件本身。

以參量的形式傳入到當前物件方法中的物件。

當前物件的例項變數直接引用的物件。

當前物件的例項變數如果是乙個聚集,那麼聚集中的元素也都是朋友。

當前物件所建立的物件。

任何乙個物件,如果滿足上面的條件之一,就是當前物件的朋友,否則就是陌生人。

迪公尺特法則的主要用意是控制資訊的過載,在將其運用到系統設計中應注意以下幾點:

在類的劃分上,應當建立有弱耦合的類。類之間的耦合越弱,就越有利於復用。

在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權。乙個類不應當public自己的屬性,而應當提供取值和賦值的方法讓外界間接訪問自己的屬性。

在類的設計上,只要有可能,乙個類應當設計成不變類。

在對其它物件的引用上,乙個類對其它物件的引用應該降到最低。

OO 設計原則

msil msil是.net framework中最重要的概念之一。通過msil可以預知不同.net語言的執行效率應該是接近的。通過msil匯程式設計序 ilasm.exe 和msil反匯程式設計序 dilasm.exe 可以觀察.net應用的內部構造,因此也可以用於.net應用 元件的破解。ild...

OO設計原則

1.srp single responsibility principle 單一職責原則 單一職責原則強調乙個類只有乙個使它改變的原因.如果乙個類擁有n個職能,則它應該劃分為n個類.2.ocp closed for modification open for extension 開閉原則 開閉原則強...

OO設計原則總結

oo設計原則 在程式設計領域,物件導向設計的設計原則有封裝變化,面向介面而不是實現,優先使用組合而非繼承,具體分為五個基本原則 單一功能原則srp,開閉原則ocp,黎克特制替換原則lsp,介面隔離原則isp,依賴反轉原則dip.1 單一功能原則srp 單一功能原則srp規定每個類都應該有乙個單一的功...