1. 程式人生 > >程式碼整潔之道讀書筆記--類

程式碼整潔之道讀書筆記--類

類

1.類的組織

遵循標準的Java約定,類應該從一組變數列表開始。如果有公共靜態常量,應該先出現。然後是私有靜態變數,以及私有實體變數。很少會有公共變數。
公共函式應跟在變數列表之後。把由某個公共函式呼叫的私有工具函式緊隨在該公共函式後面,這符合了自頂向下原則。
所以滿足這些約定的一個類大概長成下面這樣:

public class SomeClass
{
    public 公共靜態常量;  
    private 私有靜態變數; 
    private 私有實體變數;

    public 公共函式1()
    {
        呼叫私有工具函式1();
    }

    private
私有工具函式1() { } public 公共函式2() { 呼叫私有工具函式2(); } private 私有工具函式2() { } ...... }

2.類應該短小

對於函式,我們通過計算程式碼行衡量大小;對於類,我們則是通過計算權責來衡量類的大小。
類的名稱應該描述其權責,類名正是判斷類的長度的第一個手段。如果無法為某個類命以精確的名稱,這個類大概就太長了。類名越含混,該類越有可能擁有過多的權責。例如,如果類名中包含含義模糊的詞,如Processor、Manager、Super,這種現象往往說明有不恰當的權責聚集情況存在。在類名描述中不能出現”若(if)”、”與(and)”、”或(or)”或者”但(but)”等詞彙。例如:類SuperDashboard的宣告如下:

public class SuperDashboard extends JFrame implements MetaDataUser
{
    public Component getLastFocusedComponent()
    public void setLastFocused(Component lashFocused)
    public int getMajorVersionNumber()
    public int getMinorVersionNumber()
    public int getBuildNumber()
}

SuperDashboard的描述如下:SuperDashboard提供了對最後擁有焦點的元件的訪問能力,我們還能通過它跟蹤版本號和構建序列號。”還能”二字正好提示了SuperDashboard類有太多權責。

3.單一權責原則(SRP)

單一權責原則(SRP)認為,類或模組應該有且只有一條加以修改的理由。例如上面所述的貌似很小的SuperDashboard類有兩條加以修改的理由。首先,它跟蹤大概會隨軟體每次釋出而更新的版本資訊;第二,它管理Java Swing元件。每次修改Swing程式碼時,都要更新版本號。這時可以將全部三個處理版本資訊的SuperDashboard方法拆解到名為Version的類中。如下所示:

public class Version
{
    public int getMajorVersionNumber()
    public int getMinorVersionNumber()
    public int getBuildNumber()
}

系統應該由許多短小的類而不是少量巨大的類組成。每個小類封裝一個權責,只有一個修改的原因,並與少數其他類一起協同達成期望的系統行為。

4.內聚

類應該只有少量實體變數。類中的每個方法都應該操作一個或多個這種變數。通常而言,方法操作的變數越多,就越黏聚到類上。我們希望內聚性保持在較高位置。內聚性高,意味著類中的方法和變數互相依賴,互相結合成一個邏輯整體。
當類喪失了內聚性,就拆分它!所以,將大函式拆分為許多小函式,往往也是將類拆分為許多個小類的時機。程式會更有組織,也會擁有更為透明的結構。