C 例項解釋物件導向程式設計中的開閉原則

2022-09-21 20:42:13 字數 2663 閱讀 5417

在物件導向程式設計中,solid是五個設計原則的首字母縮寫,旨在使軟體設計更易於理解、靈活和可維護。這些原則是由美國軟體工程師和講師羅伯特·c·馬丁(robert cecil martin)提出的許多原則的子集,在他2023年的**《設計原則與設計模式》中首次提出。

solid 原則包含:

本文我們來介紹開閉原則。

在物件導向程式設計領域中,開閉原則(open-closed principle, ocp)規定軟體中的物件(類,模組,函式等等)應該對於擴充套件是開放的,而對於修改是封閉的」,這意味著乙個實體是允許在不改變它的源**的前提下變更它的行為。該特性在產品化的環境中是特別有價值的,在這種環境中,改變源**需要**審查,單元測試以及諸如此類的用以確保產品使用品質的過程。遵循開閉原則的**在擴充套件時並不發生改變,因此無需這些過程。

具體到類,也就是說,在不修改類本身**的情況下,應該是可以擴充套件它的行為的。

中提到的 areacalculator 類,

class areacalculator

/// /// 計算所有形狀的面積總和

///

///

public double sum()

else if (item is circle c)

}return areas.sum();

}}

對於上面的計算方法,考慮這樣一種場景,使用者想要計算一些其它形狀的面積總和,比如三角形、矩形、五邊形等等…… 您將不得不反覆編輯此類以新增更多的if/else塊,這就違反了開閉原則。

乙個更好的做法是,將計算每個形狀的面積的邏輯從 areacalculator 類中移除,並將其新增到對應每個形狀的類中。我們可以定義乙個帶有calcarea方法的介面 ishape,然後讓每個形狀都實現這個介面。

介面 ishape:

inte***ce ishape

修改後的 square 和 circle 類:

/// /// 正方形

///

class square : ishape

public double sidelength

public double calcarea()

}/// /// 圓形

///

class circle : ishape

public double radius

public double calcarea()

}

areacalculator 類也要對應做一些修改:

class areacalculator

/// /// 計算面積總和

///

///

public double sum()

return areas.sum();

}}

此時,如果我們有乙個新的形狀需要進行計算,我們可以直接新增乙個實現了介面 ishape 的新類,而無需修改 areacalculator 類的**,比如新增乙個長方形類:

/// /// 長方形

///

class rectangle : ishape

public double width

public double height

public double calcarea()

}

處理輸出格式的 sumcalculatoroutputter 類同樣無需修改:

class sumcalculatoroutputter

public string string()";}

public string json()

;return system.text.json.jsonserializer.serialize(data);

}}

然後,我們修改main方法中的**來測試一下:

static void main(string args)

; var areacalculator = new areacalculator(shapes);

var outputer = new sumcalculatoroutputter(areacalculator);

console.writeline(outputer.json());

console.writeline(outputer.string());

}

執行一下,輸出結果為:

sum of the areas of provided shapes: 43.56637061435917

現在,這些類的設計,既遵循了單一功能原則,又遵循了開閉原則。

本文我介紹了 solid 原則中的開閉原則(open-closed principle),並通過 c# **示例簡明地詮釋了它的含意和實現,希望對您有所幫助。

作者 : 技術譯民

出品 : 技術譯站

C 例項解釋物件導向程式設計中的黎克特制替換原則

在物件導向程式設計中,solid是五個設計原則的首字母縮寫,旨在使軟體設計更易於理解 靈活和可維護。這些原則是由美國軟體工程師和講師羅伯特 c 馬丁 robert cecil martin 提出的許多原則的子集,在他2000年的 設計原則與設計模式 中首次提出。solid 原則包含 本文我們來介紹黎...

C 中的物件導向程式設計

繼承密封類 子類的初始化順序 多型所有類的父類systemobject c 中的物件導向程式設計是指3個基本特徵 封裝 繼承 多型。當類的內部資料沒有被封裝時,若把字段定義為公共字段,則外部物件可以對內部資料進行任意的操作,很可能導致不當的操作結果。例如 public class person cl...

C 中的物件導向程式設計

所有的物件導向語言都具有3個基本特徵,c 也是不例外的。1 封裝 封裝指的是把類內部的資料隱藏起來,不讓物件例項直接對其操作。在c 中,封裝可以通過public private protected和internal等關鍵字來體現。c 對保護內部資料狀態提供了一種方式,叫做屬性機制。public cl...