首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

61 條物件導向設計經驗法則:從封裝、繼承到架構治理

     編輯:Java 相關知識

核心設計原則分類

封裝與介面設計(1-6)

  1. 所有資料隱藏於類別內部。
  2. 使用者依賴公開介面,類別不依賴使用者。
  3. 最小化類別協定訊息數。
  4. 實作基本公開介面(複製、相等、輸出、解析)。
  5. 實作細節(私有共用函式)勿放入公開介面。
  6. 公開介面勿包含使用者無法使用或不關心的項目。

耦合與內聚(7-10)

  1. 類別間零耦合或唯有導出耦合(僅用公開介面)。
  2. 類別僅表達單一關鍵抽象。
  3. 相關資料與行為集中放置(警惕大量 get 取資料再自行處理)。
  4. 不相關資訊分離至其他類別。

依賴與穩定性(11-17)

  1. 確保建模對象為類別而非角色。
  2. 系統功能水平均勻分佈於頂層類別。
  3. 避免全能類別(Driver、Manager、System、Subsystem 命名需謹慎)。
  4. 設計介面而非實作介面。
  5. 警惕大量存取方法(暗示資料行為未集中)。
  6. 警惕大量互不溝通行為(大量 get/set)。
  7. 模型不依賴 UI,UI 依賴模型。
  8. 盡可能依現實世界建模(必要時為架構原則妥協)。

類別精簡與關係(18-28)

  1. 移除不必要類別(降級為屬性)。
  2. 移除系統外類別(僅發送訊息不接收)。
  3. 勿將操作變為類別(動詞命名、單一行為類別須懷疑)。
  4. 分析模型代理類設計階段應移除。
  5. 最小化合作者數量。
  6. 最小化合作者間訊息傳遞數量。
  7. 最小化合作類型(不同訊息數)。
  8. 最小化扇出(定義訊息數 × 發送訊息數)。
  9. 包含關係意味著使用關係(容器應向被容納物件發送訊息)。
  10. 方法應使用大多數資料成員(否則考慮拆分)。
  11. 類別包含物件數勿超過短期記憶容量(建議 ≤6)。

繼承體系設計(29-57)

  1. 功能在窄深繼承樹垂直分佈。
  2. 語義約束優先在類別定義實作,必要時在建構子或集中第三方物件實作。
  3. 約束測試置於最深包含層次。
  4. 常變語義資訊集中第三方物件;少變則分散各類別。
  5. 類別知所含,不知誰含它。
  6. 同層級物件勿互相使用。
  7. 繼承僅用於特化層次(is-a)。
  8. 子類知父類,父類不知子類。
  9. 父類資料全私有,勿用 protected。
  10. 理論上繼承越深越好;實務上深度 ≤6(短期記憶限制)。
  11. 所有抽象類應為基類;所有基類應為抽象類。
  12. 共性(資料、行為、介面)上移至繼承樹高處。
  13. 共享資料無共享行為 → 組合共享資料類。
  14. 共享資料與行為 → 繼承共同基類。
  15. 共享介面需多態使用時才繼承共同基類。
  16. 避免顯式型別判斷(用多態)。
  17. 避免屬性值判斷(拆解為繼承層次)。
  18. 勿用繼承建模動態語義(導致執行期切換型別)。
  19. 勿將物件變為子類別(單實例子類別須懷疑)。
  20. 需執行期建立新類別時,退回建立物件並概括為類別。
  21. 子類以空方法覆寫父類方法應視為非法。
  22. 勿混淆可選包含與繼承(導致類別爆炸)。
  23. 建立可重用框架而非可重用元件。
  24. 使用多重繼承先假設犯錯,需證明合理性。
  25. 兩問驗證繼承:(1) 子類是父類特殊型別?(2) 父類是子類一部分?
  26. 多重繼承基類間不應有繼承關係。

其他關鍵原則(58-61)

  1. 包含關係優於關聯關係。
  2. 類別薄記工作用類別變數/方法,勿用全域資料/函式。
  3. 邏輯設計優先,物理設計輔助決策但不破壞邏輯。
  4. 嚴禁繞過公開介面修改物件狀態。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved