開放與封閉原則

2021-08-22 05:54:12 字數 959 閱讀 3269

開放與封閉原則(open/closed principle,ocp):

軟體實體應用允許擴充套件,但禁止修改。當應用需求改變時,可以對其模組進行擴充套件,使其滿足需求變更的新行為。但對模組進行擴充套件時,不必改動該模組的源**後二進位制**。

擴充套件點:

1、沒有擴充套件點的**:如果乙個類沒有擴充套件點,那麼當這個類需要新增新需求時,需要修改這個類中的方法,這樣違背了封閉原則。為了滿足新需求,需要建立乙個新類來實現新需求的功能。

2、虛方法:類中建立虛方法成員,這個虛方法就是乙個擴充套件點。使用繼承技術使子類可以修改虛方法。使用多型可以不需要修改客戶端實現功能擴充套件。缺點:子類要麼在基類方法上新增新功能,要麼從新編寫新功能,不存在中間狀態(獲取基類**,在基類**上進行修改)。與繼承相同,子類對基類的私有成員不可見。

3、抽象方法:建立抽象基類,基類中建立幾個抽象方法。子類繼承基類後實現抽象方法。各建立出的子類相互不影響,可以實現各自的功能。並且客戶端只需要依賴抽象基類,任何實現的子類都滿足要求。

4、介面繼承:

基於實現繼承,所有子類(現有的和將來的)都是基類的客戶端,子類都是依賴基類實現的。因此所有對實現的改動都會是客戶端可能察覺到的改動。因此相對於繼承,通常會建議優先選擇組合,如果必須要使用繼承,也要盡量使用只有少量分層的淺繼承層次結構。(給繼承圖頂部節點新增新成員的改動會影響到該層次結構下的所有成員)

介面繼承可以根據不同的上下文給介面修飾豐富的功能(為介面新增修飾器)。介面比類靈活,具有強大的自適應性能力。

防止變異(protected variation):識別可預見的變化點並圍繞他們建立乙個穩定的介面。

2、乙個穩定的介面:客戶端依賴介面,如果介面發生變化,客戶端也需要做響應的改變。用於表達擴充套件點的所有介面應該是穩定的,介面改變的可能性和頻率應該很低,否則所有依賴的客戶端都需要進行修改。

3、足夠的自適應能力:只在合適的位置上包含恰當數目的擴充套件點的**被稱為**的「宜居帶」。他能適應**的變更需求,同時也不會增加複雜度和過度設計方案。

開放 封閉原則

開放 封閉原則 the open closed principle,簡稱ocp 或者叫開 閉原則,意思是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。即對於擴充套件時開放的 open for extension 對於更改是關閉的 closed for modification 這樣...

開放封閉原則

開放封閉原則 開放封閉原則 就是軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。這個原則有兩個特徵,乙個是說對於擴充套件是開放的,另乙個是說對於更改時封閉的。軟實體包括 1 專案或軟體產品中按照一定的邏輯規則劃分的模組。2 抽象和類。3 方法。無論模組是多麼的封閉,都會存在一些無法對之...

開放封閉原則

開放封閉原則對於擴充套件是開放的,對於修改是封閉的。所謂開放封閉原則就是軟體實體應該對外擴充套件開發,而對修改封閉。開放封閉原則是所有物件導向原則的核心,軟體設計本身所追求的目標就是封裝變化,降低耦合,而開放封閉原則正是對這一目標最直接的體現。例如之前部落格的計算程式中,起初如果我們想要乙個加法的程...