模組的介面包含兩種資訊:正式的(formal)與非正式的(informal)。
正式部分#
正式部分以程式碼明確表達,部分項目可由語言檢查正確性:
- 方法的正式介面 = 方法簽章(signature)
- 參數的名稱與型別
- 回傳值型別
- 拋出例外的資訊
- 類別的正式介面
- 所有 public 方法的簽章
- 所有 public 變數的名稱與型別
多數程式語言會確保每次呼叫提供正確數量與型別的參數,以匹配方法簽章。
非正式部分#
非正式部分無法被語言理解或強制檢查,必須靠註解描述:
- 方法的高階行為(例如:「這個函式會刪除某個參數所指定的檔案」)
- 類別的使用約束(例如:「方法 A 必須先於方法 B 被呼叫」)
一般原則:只要開發者需要知道某項資訊才能正確使用模組,那項資訊就屬於介面的一部分。
對多數介面而言,非正式部分比正式部分更龐大、更複雜。
介面清晰的好處#
- 明確指出開發者需要知道哪些東西才能使用模組
- 直接對應到第 2.2 節提到的「未知的未知(unknown unknowns)」問題——介面就是要消除這種不確定性
補充:形式化規格的可能性#
學術界有些語言可以用形式化規格描述方法整體行為,並自動驗證實作是否符合規格。
作者目前認為,用英文(自然語言)寫的介面通常比形式化規格語言更直覺、更容易被開發者理解。