開閉原則(open closed principle,ocp)由勃蘭特·梅耶(bertrand meyer)提出,他在 1988 年的著作《物件導向軟體構造》(object oriented software construction)中提出:軟體實體應當對擴充套件開放,對修改關閉(software entities should be open for extension,but closed for modification),這就是開閉原則的經典定義。
當應用的需求改變時,在不修改軟體實體的源**或者二進位制**的前提下,可以擴充套件模組的功能,使其滿足新的需求。
通過介面與抽象類提供較為穩定的中間層,程式設計過程中應該面向介面,而不是面向實現程式設計。
繼承必須確保超類所擁有的性質在子類中仍然成立
子類不應該改變父類的行為。
abstract class bird
class kiwi:bird
}//...
void main()公里,需要小時",30,30/bird.flyspeed());
}
很明顯,這段**將會拋異常,原因在於我們考慮brid
時並沒有考慮到它不會飛的情況。
改進方案:
abstract class animal
abstract class bird : animal
class kiwi : animal
}class swallow : bird
public override int flyspeed()
}//...
void main()公里,需要小時",30,30/kiwi.walkspeed());
console.writeline("燕子行走需要小時",30,30/swallow.walkspeed());
}
新增bird
和kiwi
的共同基類,呼叫walkspeed
方法,此方法是動物所共有的。
高層模組不應該依賴低層模組,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象(high level modules should not depend upon low level modules.both should depend upon abstractions.abstractions should not depend upon details. details should depend upon abstractions)。
其核心思想是:要面向介面程式設計,不要面向實現程式設計。
每個類盡量提供介面或抽象類,或者兩者都具備。
變數的宣告型別盡量是介面或者是抽象類。
任何類都不應該從具體類派生。
使用繼承時盡量遵循黎克特制替換原則。
單一職責原則規定乙個類應該有且僅有乙個引起它變化的原因,否則類應該被拆分
乙個類(方法)不應該承擔過多的功能。
大學學生工作管理程式。
分析:大學學生工作主要包括學生生活輔導和學生學業指導兩個方面的工作,其中生活輔導主要包括班委建設、出勤統計、心理輔導、費用催繳、班級管理等工作,學業指導主要包括專業引導、學習輔導、科研指導、學習總結等工作。如果將這些工作交給一位老師負責顯然不合理,正確的做 法是生活輔導由輔導員負責,學業指導由學業導師負責,其類圖如圖 1 所示。
要求程式設計師盡量將臃腫龐大的介面拆分成更小的和更具體的介面,讓介面中只包含客戶感興趣的方法
要為各個類建立它們需要的專用介面,而不要試圖去建立乙個很龐大的介面供所有依賴它的類去呼叫。
介面隔離原則和單一職責都是為了提高類的內聚性、降低它們之間的耦合性,體現了封裝的思想,但兩者是不同的:
設計學生管理類,需要實現的功能有插入成績、修改成績、計算總分、計算均分、列印成績
如果兩個軟體實體無須直接通訊,那麼就不應當發生直接的相互呼叫,可以通過第三方**該呼叫。其目的是降低類之間的耦合度,提高模組的相對獨立性。
當前物件本身、當前物件的成員物件、當前物件所建立的物件、當前物件的方法引數等,這些物件同當前物件存在關聯、聚合或組合關係,可以直接訪問這些物件的方法。
從迪公尺特法則的定義和特點可知,它強調以下兩點:
從依賴者的角度來說,只依賴應該依賴的物件。
從被依賴者的角度說,只暴露應該暴露的方法。
注意:建立弱耦合類,提高復用
降低訪問許可權
優先考慮不可變類
盡量不要引用其他類的物件
不要暴露字段,而是提供訪問器
謹慎使用序列化
分析:明星由於全身心投入藝術,所以許多日常事務由經紀人負責處理,如與粉絲的見面會,與**公司的業務洽淡等。這裡的經紀人是明星的朋友,而粉絲和**公司是陌生人,所以適合使用迪公尺特法則,其類圖如圖 1 所示。
它要求在軟體復用時,要盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。
優先考慮組合而不是繼承,使用繼承時,嚴格遵循黎克特制轉換原則
軟體設計原則
開閉原則 ocp 軟體設計的最大原則 這個原則說的是 對擴充套件開放,對修改關閉。其實意思是說,給系統新增新的功能,但不修改原有 如果能做到呢,關鍵在於抽象化,也就是封裝變化,抽象層不變,讓具體實現依賴抽象隨需求變化。使得系統具有很強的擴充套件性和可維護性。黎克特制代換原則 任何基類可以出現的地方,...
軟體設計原則
高內聚 低耦合 乙個軟體系統要有乙個穩定的架構,不會隨需求的改變而發生巨大的變動。因此,高內聚 低耦合是乙個軟體系統設計中必須遵循的基本原則 面向抽象程式設計 在面向過程的軟體開發中,上層元件呼叫下層元件,就意味著上層元件依賴於下層元件,當下層元件發生劇烈變化時,上層元件也要跟著一起發生變動,這將導...
軟體設計原則
軟體開發中有以下一些基本原則,深刻掌握這些原則比掌握一門技術要重要。1.開閉原則 open closed principle,ocp 乙個軟體應當對擴充套件開放,對修改關閉。也就是說我們在設計軟體時,應當可以在不必修改源 的情況下改變 擴充套件 其行為。開閉原則是非常重要的設計原則,其它的設計原則實...