模組的介面包含兩種資訊:正式的(formal)非正式的(informal)

正式部分#

正式部分以程式碼明確表達,部分項目可由語言檢查正確性:

  • 方法的正式介面 = 方法簽章(signature)
    • 參數的名稱與型別
    • 回傳值型別
    • 拋出例外的資訊
  • 類別的正式介面
    • 所有 public 方法的簽章
    • 所有 public 變數的名稱與型別

多數程式語言會確保每次呼叫提供正確數量與型別的參數,以匹配方法簽章。

非正式部分#

非正式部分無法被語言理解或強制檢查,必須靠註解描述:

  • 方法的高階行為(例如:「這個函式會刪除某個參數所指定的檔案」)
  • 類別的使用約束(例如:「方法 A 必須先於方法 B 被呼叫」)

一般原則:只要開發者需要知道某項資訊才能正確使用模組,那項資訊就屬於介面的一部分。

對多數介面而言,非正式部分比正式部分更龐大、更複雜

介面清晰的好處#

  • 明確指出開發者需要知道哪些東西才能使用模組
  • 直接對應到第 2.2 節提到的「未知的未知(unknown unknowns)」問題——介面就是要消除這種不確定性

補充:形式化規格的可能性#

學術界有些語言可以用形式化規格描述方法整體行為,並自動驗證實作是否符合規格。

作者目前認為,用英文(自然語言)寫的介面通常比形式化規格語言更直覺、更容易被開發者理解。