在我們開始學習之前 C++ 的新高級特性, 我們需要談談一些原則 良好的班級設計。 為什麼好的班級設計很重要? 那是因為沒有好的類設計, 擴展軟件功能的能力 或向其添加新功能會嚴重減少。 那麼讓我們來談談一些原則 這是最有用的,讓我們開始吧 其原理稱為 DRY。 DRY 是一個首字母縮寫詞,代表不要重複自己, 這意味著您應該編寫代碼來做某事 或一次且僅一次地描述某事。 那麼這到底是什麼意思呢? 讓我們看一個例子。 你有一個叫做 DoNotRepeat 的類, 這是突出顯示的。 那個類有一些變量, 一些名為 integer_var 的成員變量, double_var 和 string_var。 它還具有設置這些變量的功能 並檢索它們的值。 現在讓我們考慮另一個類, 稱此類為重複。 看看它有非常相似的佈局。 它有一個類似的成員變量叫做integer_var, double_var、string_var 和有類似的接口函數 設置這些變量並檢索它們的一些值, 還要計算一些其他值 基於這些值。 所以如果你看看這兩個類 你會明白 如果您需要更改功能, 他們之間是一樣的, 您可能需要進行兩次更改。 您將需要更改 DoNotRepeat 然後你還需要改變重複, 這當然是可行的, 但非常糟糕的主意,因為代碼的更改 必須重複 2、3、4 次 是在程序中引入錯誤的一種很好的方式。 所以C++為你提供了一種機制 這將允許您編寫代碼 這在兩個班級之間很常見,而且只有一次, 這稱為繼承。 我們將談論它 在接下來的一些章節中。 我們需要的另一個原則 要談的是封裝。 這就是原則實際上非常重要。 封裝是一種原則,通過這種原則,對象的屬性 受到保護,不能直接訪問 通過外部函數或類。 這不是封裝需要的唯一事情。 正確封裝的對象具有非常窄的接口, 這意味著外部用戶只能做很少的事情 與對象, 但是組件的數量 和對象內部的內部函數 可以很大,他們可以自己做一些事情, 但你不能執行這些功能 無需訪問封裝對象的接口。 對於這個例子, 讓我們來看看一個叫做 Mixer 的對像類, 它描述了一個立式廚房攪拌機。 在我的例子中, 我正在描述一個廚房輔助攪拌機,正如你所看到的, 它有一個非常簡單的界面。 你可以開始,停止,混合。 可以取下杯子,可以安裝杯子, 你可以解鎖調音台,鎖定調音台, 你也可以提高攪拌機。 這些是您可以執行的唯一功能 在正確封裝的對像上。 你也知道攪拌機裡有齒輪, 電機、控制器和其他一些組件, 但你無權訪問它們 作為對象的普通用戶。 你知道這些是單獨存在的。 他們對你沒什麼興趣 你不需要控制它們 或具有控制它們的功能 除了通過對象。 我們將研究的下一個原則 稱為單一責任原則。 這是一種奇特的說法 那個班級應該負責一件事 並且只有一件事。 例如,如果一個類, 負責描述銷售訂單, 它不應該負責保存信息 該銷售訂單到數據庫 它也不應該負責轉換自己 到另一種格式,如 XML。 為什麼這不是一個好主意? 嗯,其實很簡單。 以數據庫本身為例, 對象需要有數據庫信息。 所以如果你有很多銷售訂單, 每個人都需要有一份數據庫信息的副本, 容易出錯 並使代碼閱讀起來真的很混亂 並且很難維護。 所以除非絕對必要, 應該避免這樣的依賴關係。 我們將在本節中討論的最後一個原則 稱為開閉原理。 原則規定班級應該是開放的 擴展,但接近修改。 那麼這到底是什麼意思呢? 讓我們來看看規則驗證的一些東西。 你有一個叫做 RuleValidation 的類, 它有一個稱為驗證規則的接口方法 您將規則對象放入其中, 你可以自己描述。 然後你在方法中有驗證邏輯 這意味著每次添加新規則時 或一種新型的驗證, 您將不得不更改 RuleValidation 類 以適應新功能。 一個更好的方法是有 一個名為 ValidateRule 的類, 它將有一個稱為驗證的公共函數。 因此,對於您想要的每種類型的驗證, 您將創建此類的一個對象。 您可以通過使用繼承再次擴展它。 你可以擴展它, 提供特定類型的驗證。 然後你實際上可以進行規則驗證, 有一組驗證規則對象, 這驗證了我們實際上會連續調用 直到規則有效, 否則所有這些都會失敗。 這樣,規則驗證對象 不必改變太多 以適應新的驗證規則。 你唯一需要的東西 要添加的是一個名為 addRuleValidator 的函數, 這將採用驗證規則對象, 並將添加它們 到驗證集。 添加驗證規則。 然後你可以非常簡單地添加許多驗證 盡可能多的驗證, 這正是它的描述方式 按照開閉原則。