跳至內容

抽象漏洞定律

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 18:09 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

抽象漏洞定律(_ The Law of Leaky Abstractions _)是一个有關係程式的定律。上早是由 Joel Spolsky 佇其部落格內底提出,其定義來做「所有非常無證自明的抽象概念,攏有某一種程度的落勾」(原文:_ All non-trivial abstractions , to some degree , are leaky _)。

抽象漏洞定律說明是按怎所有的程式攏有 Bug,同時嘛說明矣,電腦語言的進步,雖然會當減少程式製作的時間,但是相對來講,程式設計師煞愛付出閣較濟學習的時間。

抽象漏洞定律說明了軟體本質上的缺陷,毋過嘛提供一个思考欲按怎避免問題發生的方向。

舉例

佇咧 Joel Spolsky 的部落格內底,舉幾个趣味的例,解說講按怎抽象會漏洞定律。

ASP . NET

ASP . NET 宣稱其建立一个抽象介面,透過這種抽象介面,程式設計師會當干焦點選幾个選單,抑是點擊幾个使用者介面上的揤鈕,就「假做」寫規个網站所需要的程式矣。佇這个抽象介面的背後,ASP . NET 扞程式實體化的工課。

比一个例,程式設計師會當做一个利用連結來上傳表格的網頁 ( 對 HTML 來看嘛就是利用 < A > 來上傳 < FORM >,一般標準的 HTML,干焦會當用啦「提交」這个開關來上傳表格,袂當用 < A > 來上傳 < FORM > 的 ),ASP . NET 內部為著欲完成這个功能,著愛藉助 JavaScript 來完成,毋過這點是袂予程式設計師知影的。雖然的確大的降低程式製作的時間,但是萬一網頁使用者關起來矣 JavaScript 的功能,網頁就會出問題。

若程式設計師無受過有夠額的訓練,無了解 ASP . NET 內部運作的原理,抑是無了解 HTML,無了解 JavaScript,就無可能揣著這个問題的原因。所以講,這乎 ASP . NET 宣稱完美的抽象介面,是有足大的空隙的。

物件導向語言

另外嘛會使對物件導向語言來看 ( C + + 抑是講 JAVA ),何為著抽象漏洞定律就是抽象介面佮實體化執行的分離。

一个物件使用另外一个物件的服務,只需要知影伊所提供的抽象介面是按怎,無需要了解內部的執行方法。佇這个內部的執行,可能閣透過另外一个物件的抽象介面,使用另外一个物件所提供的服務。佇這條供應鏈頂懸,只要任何一个執行出問題,就會當予伊下游所有的抽象介面產生漏洞。

反過來講,若是規條供應鏈的執行攏無問題,理論上,就無落勾的問題矣。毋過,電腦佇硬體上的物理限制,比如講:記持體用盡量,電力喪失,網路斷線等等,欲保持百分之一百的零缺失,是完全無可能的代誌。


參考文獻

  • Joel Spolsky 的文章