高質量子程序設計

一、創建子程序的正當理由

  • 降低複雜度
    通過子程序來隱藏程序的實現細節,只需對外提供調用接口
    (頻繁重複的小段代碼,抽象成函數)
  • 引入中間、易懂的抽象
    通過給一段程序取一個足夠說明語義的名字,該名字能夠提供更高層次的抽象,使代碼更具有可讀性。
  • 避免代碼重複

    如果2個子程序都擁有相同的代碼段,有兩種方法去重。
    1)把重複部分提取出來,放入基類中,把不同部分放入派生類中
    2)把重複部分放入新的子程序中,讓其餘的都調用公共代碼

  • 隱藏操作,提高可移植性
    用子程序接口隔離程序中依賴底層細節的不可移植部分,隱藏一些設計非標準的操作等。
  • 隱藏全局數據
    在程序中定義的全局變量可以通過提供程序接口來操作,避免直接對全局變量操作。(共享數據加解鎖、全局計數器。。。)

二、子程序的內聚性

1、功能內聚性:是最強也是最好的一種內聚性,也就是說讓一個子程序僅執行一項操作。(評估功能內聚的前提是子程序執行的操作與其名字相符)
2、順序內聚性 子程序內包含有特定順序的操作,這些步驟需要共享數據。(通過將步驟劃分成單獨的子程序,互相調用,轉化爲功能內聚)
3、臨時內聚性 指含有一些因爲需要同時執行才放到一起的操作的子程序。(一般是一些功能初始化 init 、讀取配置的readconfig接口)

以下是一些不可取的內聚

4、過程上的內聚性 指子程序中的操作按特定順序執行

5、邏輯上的內聚性 指若干操作都被放入同一子程序中,通過傳入的控制標誌選擇執行其中的一項操作。

6、巧合的內聚性 指子程序中的各個操作之間沒有任何可以看到的關聯。

三、子程序的設計

1、子程序的命名。
要對返回值有所描述,子程序的最佳長度在9到15個字符
2、子程序長度。
理想長度在50 ~150 ,不能超過200
3、子程序參數

  1. 按照 輸入 -修改- 輸出 順序排列參數

  2. 考慮自定義 in mod out 空關鍵字來標記參數屬性,或者 在參數前面加上 i_ 、m_、o_的前綴。

  3. 參數必須都要使用,不能傳遞無用參數

  4. 把狀態變量或者出錯變量放在最後,再或者作爲返回值

  5. 子程序的參數個數限制在7個以內 (如果發現需要傳遞很多參數,說明子程序之間耦合度太緊密,一個重新分解子程序,降低耦合度;如果許多不同的子程序傳遞相同的參數,則可以把這些子程序組成一個類,經常傳遞的數據作爲類的內部數據)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章