CHECKLIST:Class Quality(核對表:類的質(zhì)量)
抽象數(shù)據(jù)類型
- 你是否把程序中的類都看做是抽象數(shù)據(jù)類型了遥诉?是否從從這個角度評估它們的接口了攒巍?
抽象
- 類是否有一個中心目的掏湾?
- 類的命名是否恰當(dāng)蛤育?其名字是否表達(dá)了其中心目的?
- 類的接口是否展現(xiàn)了一致的抽象帚豪?
- 類的接口是否能讓大家清楚明白地知道該如何使用它诚欠?
- 類的接口是否足夠抽象顽染,使你能不必顧慮它是如何實(shí)現(xiàn)其服務(wù)的?你能把類看做黑盒子么轰绵?
- 類提供的服務(wù)是否足夠完整粉寞,能讓其他類無須動用其內(nèi)部數(shù)據(jù)?
- 是否已從類中去除無關(guān)信息左腔?
- 是否考慮過把類進(jìn)一步分解為組件類唧垦?是否以盡可能將其分解?
- 在修改類時液样,是否維持了其接口的完整性振亮?
封裝
- 是否把類的成員的可訪問性降到最小鞭莽?
- 是否避免暴露類中的數(shù)據(jù)成員坊秸?
- 在編程語言所許可的范圍內(nèi),類是否已盡可能地對其他的類隱藏了自己的實(shí)現(xiàn)細(xì)節(jié)澎怒?
- 類是否避免對其他使用者妇斤,包括其派生類會如何使用它做了假設(shè)?
- 類是否不依賴于其他類丹拯?它是松散耦合的嗎?
繼承
- 繼承是否只用來建立”是一個/is a"的關(guān)系荸恕?也就是說乖酬,派生類是否遵循了LSP(Liskov替換原則?)
- 類的文檔中是否記述了其繼承策略融求?
- 派生類是否避免了“覆蓋”不可覆蓋的方法咬像?
- 是否把公用的接口,數(shù)據(jù)和行為都放到盡可能搞的繼承層次中了?繼承層次是否很淺县昂?
- 基類中所有的數(shù)據(jù)成員是否都被定義為private而非protected的了肮柜?
跟實(shí)現(xiàn)相關(guān)的其他問題
- 類中是否只有大約7個或更少的數(shù)據(jù)成員?
- 是否把類直接或間接調(diào)用其他類的子程序的數(shù)量減到最少了倒彰?
- 類是否只在絕對必要時才與其他的類相互協(xié)作审洞?
- 是否在構(gòu)造函數(shù)中初始化了所有的數(shù)據(jù)成員?
- 除非擁有經(jīng)過測量的待讳、創(chuàng)建淺層復(fù)本的理由芒澜,類是否都被設(shè)計為當(dāng)做深層復(fù)本使用?
語言相關(guān)的問題
- 你是否研究過所用變成語言里和類相關(guān)的各種特有問題创淡?
--- 《代碼大全》