4.1 什么是開閉原則
☆ 開閉原則指的是一個軟件實體應對對擴展開發,對修改關閉(Software entities
should be open for extension, but closed for
modification)。這個原則是說在設計一個模塊的時候,應對使這個模塊可以在不被修改的前提下被擴展,換言之,應對可以不必修改源代碼的情況下
改變這個模塊的行為。
☆ 滿足開閉原則的軟件系統的優越性:
① 通過擴展已有的軟件系統,可以提供新的行為,以滿足對軟件的新需求,使變化中的軟件系統有一定的適應性和靈活性。
② 已有的軟件模塊,特別是最重要的抽象層模塊不能再修改,這就使變化中的軟件系統有一定的穩定性和延續性。
ξ4.2 實現開閉原則的關鍵
抽
象化是解決問題的關鍵,在面向對象的編程語言里,可以給系統定義出一套相對較為固定的抽象設計,此設計允許無窮無盡的行為在實現層被實現。在語言里,可以
給出一個或多個抽象類或者接口,規定出所有的具體類必須提供的方法的特征作為系統設計的抽象層。這個抽象層預見了所有的可擴展性,因此,在任何擴展情況下
都不會改變。這就使得系統的抽象不需要修改,從而滿足了開閉原則的第二條,對修改關閉。
同時,由于從抽象層導出一個或多個新的具體類可以改變系統的行為,因此系統的設計對擴展是開放的,這就滿足了開閉原則的第一條。
☆ 對可變性的封裝原則
這是對開閉原則的另外一種描述,它講的是找到一個系統的可變因素,將之封裝起來。該原則意味著兩點:
① 一種可變性不應當散落在代碼的很多角落,而應當封裝到一個對象里面。繼承應當被看做是封裝變化的方法,而不應該被認為是一種從一般對象生成特殊對象的方法。
② 一種可變性不應當與另外一種可變性混合在一起。這意味著一般的繼承層次不會超過兩層。
關鍵知識點:
☆ 開閉原則的概念,軟件實體對擴展開發,對修改關閉;
☆ 實現開閉原則的關鍵,利用接口或抽象類抽象出系統的抽象層,抽象層不變,利用實現層進行擴展;
☆ 對可變性的封裝,將可變的元素封裝起來,防止改變擴散到整個應用;
☆ 注意控制封裝的粒度,不要將兩種可變性封裝到一起;
☆ 繼承是用來封裝可變性的,一般的繼承層次不要超過兩層;
☆ 策略模式是對開閉原則的很好詮釋,其他還有工廠模式、建造模式、橋接模式、門面模式、調停者模式、訪問者模式和迭代子模式等;
☆ 對“將條件轉移語句改寫成多態性”的重構行為應當遵循開閉原則,防止多態性污染;
☆ java下的單方法接口通常用來實現函數指針或者委托的功能;
☆ 任何一棵繼承樹都要以抽象類為根,具體類不是用來繼承的,更不要從工具類繼承;
☆ 抽象類要擁有盡可能多的共同代碼,同時擁有盡可能少的數據。
☆
當Coad條件全部滿足時,才應當考慮使用繼承:派生類是基類的一個特殊種類,而不是其的一個角色,也就是說要區分“Has-a”和“Is-a”;永遠不
會出現需要將派生類換成另外一個類的派生類的情況;派生類具有擴展基類的責任而不是具有置換或注銷基類的責任;只有在分類學角度上有意義時,才可以使用繼
承。?
?
posted on 2008-02-01 09:21
無聲 閱讀(4898)
評論(1) 編輯 收藏 所屬分類:
職場生活