一. 開閉原則
1. 定義
對擴充套件開放,對修改關閉。(當應用的需求改變時,在不修改軟體實體的源**前提下,可以擴充套件模組的功能,使其滿足新的需求。)
2. 作用
(1). 對軟體測試的影響
軟體遵守開閉原則的話,軟體測試時只需要對擴充套件的**進行測試就可以了,因為原有的測試**仍然能夠正常執行。
(2). 可以提高**的可復用性
粒度越小,被復用的可能性就越大;在物件導向的程式設計中,根據原子和抽象程式設計可以提高**的可復用性。
(3). 可以提高軟體的可維護性
遵守開閉原則的軟體,其穩定性高和延續性強,從而易於擴充套件和維護
3. 實現方法和案例
可以通過「抽象約束、封裝變化」來實現開閉原則,即通過介面或者抽象類為軟體實體定義乙個相對穩定的抽象層,而將相同的可變因素封裝在相同的具體實現類中。
因為抽象靈活性好,適應性廣,只要抽象的合理,可以基本保持軟體架構的穩定。而軟體中易變的細節可以從抽象派生來的實現類來進行擴充套件,當軟體需要發生變化時,只需要根據需求重新派生乙個實現類來擴充套件就可以了。
ps: 依賴倒置原則就是對開閉原則很好的實現。
類似的案例太多了,此處不單獨提供了。
二. 黎克特制替換原則
1. 定義
子類可以擴充套件父類的功能,但不要改變父類原有的功能。也就是說:子類繼承父類時,除新增新的方法完成新增功能外,不要重寫父類已經實現了的方法(抽象方法除外)。
2. 作用
(1). 黎克特制替換原則是實現開閉原則的重要方式之一。
(2). 它避免了繼承中重寫父類造成的可復用性變差的缺點。
(3). 它是動作正確性的保證。即類的擴充套件不會給已有的系統引入新的錯誤,降低了**出錯的可能性。
3. 實現方法和案例
父類和子類
///view code///計算父類
/// public
class
fathercalculate
//////
計算兩個數相加
/// ///
//////
public
double cal2(double a, double
b)
//////
計算兩個數相加
/// ///
//////
public
virtual
int cal3(int a, int
b)
//////
計算兩個數相乘
/// ///
//////
public
int cal4(int a, int
b)
}public
class
childcalculate2 : fathercalculate
}
測試
"); //執行結果4
//2.執行加法運算
fathercalculate f1 = new
childcalculate1();
//走的是父類的方法
console.writeline($"
10+6=
"); //
16
//3. 執行加法運算
fathercalculate f2 = new
childcalculate2();
//走的是父類的方法 (滿足 黎克特制替換原則)
console.writeline($"
10+6=
"); //
16
//4. 執行加法運算
childcalculate2 c2 = new
childcalculate2();
//走的是父類的方法,子類繼承父類的
console.writeline($"
10+6=
"); //
16
//5. 執行減法運算
//走的是子類的方法
console.writeline($"
10-6=
"); //
4 }
補充說明:如果通過重寫父類的方法來完成新的功能,這樣寫起來雖然簡單,但是整個繼承體系的可復用性會比較差,特別是運用多型比較頻繁時,程式執行出錯的概率會非常大。
如果程式違背了黎克特制替換原則,則繼承類的物件在基類出現的地方會出現執行錯誤。這時其修正方法是:取消原來的繼承關係,重新設計它們之間的關係。
!
開閉原則與黎克特制替換原則
1.開閉原則 是物件導向設計的基本原則之一,是 可復用設計 的基礎,它的主要原則是 對擴充套件開放,對修改關閉 意思就是我們改變乙個軟體時。應該通過擴充套件方式來改變軟體,而不是修改原有的 2.黎克特制替換原則 黎克特制替換原則是說,任何基類可以出現的地方,子類一定可以出現 只有當衍生類可以替換基類...
第一節綜述
shader是什麼?shader是著色器。渲染流水線的概念?渲染流水線的工作任務在於由乙個三維場景出發,生成一張二維影象。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。1 應用階段 由cpu負責實現,由開發者主導。最重要的輸出是渲染所需的幾何資訊,即渲染圖元。這些渲染圖元傳遞給幾何階段。2 ...
第一節 熱機
一.熱機 內燃機是熱機的一種,以汽油或柴油為燃料 二.汽油機 練1.三.柴油機 練2.從能量轉化的角度看,一台四衝程內燃機在乙個迴圈中 1 哪個衝程存在著化學能轉化為內能的過程?2 哪個衝程存在著內能轉化為機械能的過程?3 哪個衝程具有很明顯的機械能轉化為內能的過程?練3.關於單缸四衝程內燃機,下列...