基本介紹
- 中文名:抽象泄漏
- 領域:軟體開發
歷史,抽象泄漏法則,對軟體開發的影響,例子,參見,
歷史
艾林·約耳·斯波爾斯基於2002年提出了抽象泄露。更早於1992年,Gregor Kiczales描述了不完善的抽象化的一些問題並提出一些解決辦法。
抽象泄漏法則
斯波爾斯基給出的抽象泄漏法則:
“ | All non-trivial abstractions, to some degree, are leaky.所有重大的抽象機制在某種程度上都是有漏洞的. | ” |
對軟體開發的影響
由於軟體開發與運行環境越來越複雜,開發者必須依賴於各種抽象。使得開發者專注於高層次的領域相關的知識與技能,以提高工作效率。但是,抽象泄漏法則指出“可靠”軟體的開發者必須了解抽象之下的底層細節。否則一旦出了任何問題,根本不會知道是怎么回事,也不知道如何除錯或回復。程式設計工具抽象掉某些東西,但和其他所有抽象機制一樣都有漏洞,而唯一能適當處理漏洞的方法,就是弄懂該抽象原理以及所隱藏的東西。所以抽象機制雖然節省了工作的時間,不過學習的時間是省不掉的。
例子
- 遍歷一個大型二維矩陣數據結構,按照行序或者列序會有巨大的性能差異,這是由於矩陣數據在記憶體中的存儲順序與CPU cache不命中。即使對於一個彙編程式設計師知道這些底層細節,並且按照記憶體中連續存儲來遍歷這個矩陣數據,仍然會面臨著頁缺失這樣更底層的抽象泄漏。
- SQL語言抽象了對資料庫的操縱細節。允許資料庫程式設計師只是描述想要做的目標。但是特定的SQL查詢可能與其他等價的SQL查詢有數千倍的性能差別。有個很有名的例子,在某個SQL伺服器用"where a=b and b=c and a=c"來查詢,會比用"where a=b and b=c"快上許多,雖然查詢的結果是一樣的。於是就得跳入更底層用查詢規劃分析器找出問題,然後想辦法加快查詢。