核對清單: 設計類別
本核對清單協助確定「設計類別」模型建立正確。
關係
主要說明


檢查項目
一般
  • 類別的名稱清楚反映所扮演的角色。
  • 類別的說明清楚表達類別的用途。
  • 類別代表一組明確的抽象。
  • 類別的屬性和操作全部為履行類別責任所必備的要素。
  • 每一個類別代表一組小型、一致及獨特的責任。
  • 類別的責任定義嚴謹、陳述明確且清楚表達類別的用途。
  • 每一個類別相當獨立,與其他類別的關係鬆散。
  • 類別的責任維持一致的抽象層次(亦即,高階(應用程式層次)和低階(實作層次)責任不相混)。
  • 位於同一繼承階層的類別具有獨特的類別屬性、操作及關係(亦即,繼承所有共同的屬性、操作及關係)。
  • 考量類別實例的完整生命週期。每一個物件皆透過一或多個使用案例實現化來建立、使用及移除。
  • 類別滿足使用案例實現化所設定的行為需求。
  • 已滿足需求規格中類別的所有需求。
  • 類別的需求(由類別說明和序列圖的物件所表示)與類別的狀態機一致。
  • 類別的所有責任彼此相關,於是,系統中不可能存在只用到一部分責任的這種類別。
  • 任意兩個類別在本質上用途不重複。
一般化/特殊化
  • 保持一般化階層的平衡,如此,不會有階層太過扁平或縱深的類別。
  • 繼承階層中已反映明確的共通性。
  • 不存在合併子類別屬性的超類別。
  • 繼承階層中沒有內容不相關的中間抽象類別,例如,重複的子類別或繼承樹的兩側。
  • 繼承關係用來擷取共同的設計抽象,並非以實作為主要考量,亦即,重複使用程式碼片段或類別結構。
命名慣例
  • 類別名稱指出用途。
  • 類別名稱遵循專案設計準則中規定的命名慣例。
操作
  • 每一項操作的名稱敘述明確,一目瞭然。
  • 狀態機和操作一致。
  • 狀態機和操作完整地描述類別的行為。
  • 每一項操作的參數有正確的數目、名稱及類型。
  • 每一項操作已定義的實作規格正確。
  • 操作簽章符合指定程式語言的標準。
  • 每一項操作至少供一個使用案例實現化來使用。
屬性
  • 類別的所有關係是支援類別的某些操作所不可或缺的。
  • 每一個屬性代表單一概念性事物。
  • 每一個屬性的名稱敘述明確,且正確表達其中儲存的資訊。
關係
  • 聚集和關聯的角色名稱描述主關聯類別和被關聯類別之間的關係。
  • 關係的多重性正確。
狀態機
  • 狀態機力求簡單,但仍足以表達必要的行為。
  • 狀態機不含任何多餘的狀態或轉換。
  • 狀態機有明確的環境定義。
  • 外包物件可以看見所有參考物件。
  • 狀態機很有效率,並根據分派的動作所定義的時間和資源,以最理想的組合來實現行為。
  • 狀態機淺顯易懂。
    • 以系統領域而言,可以理解狀態和轉換的名稱。
    • 狀態名稱指出正在等待或正在發生什麼,而非已發生什麼。
    • 狀態和轉換名稱在狀態機之內是唯一的(雖然不是嚴格的要求,但有助於除錯時強制規定唯一名稱)。
    • 組合狀態包含狀態的邏輯分組。
    • 已有效降低組合狀態的複雜性嗎?
    • 轉換標籤指出轉換的背後原因。
    • 狀態轉移上沒有超過 25 行的局部程式碼片段;相反地,函數已有效降低轉換程式碼的複雜性。
    • 已檢查狀態機的巢狀結構,確定巢狀不會太深以至於難以理解;一或兩層的子狀態通常就足夠應付大多數的複雜行為。
  • 已使用主動類別來代替並行子狀態;主動類別一直以來都是較好的替代作法,且比並行子狀態更容易瞭解。
  • 在即時系統中,已使用封裝體來代表控制的邏輯執行緒。
  • 已考量錯誤或維護狀態。
  • 已使用子狀態來代替延伸的狀態變數;測試多個變數的轉換警戒條件沒有證據可決定說明應該發生轉換的變數。
  • 狀態機不同於流程圖。
  • 狀態機未呈現過度分解,由具有單一子狀態的巢狀狀態機組成。在顧及未來的設計工作或再分類的情況下,將巢狀子狀態視為保留位置,如果是刻意保留,則可當做暫時性的作法。