Indirection
程序设计中的indirection也稱為參考(reference),是一種受名稱、參考或是容器指涉事物的方式。最常見的indirection是用記憶體位址處理某變數。像是用指標存取變量就是這樣的例子。一個已儲存的,可以透過double indirection存取其他物標的指標,稱為間址模式(indirection node)在較早期的電腦結構中,間址模式可以提供許多複雜的寻址模式。
indirection的另外一個例子是域名系统,可以用像是en.wikipedia.org的網址代替像208.80.154.224的IP網址。透過人類可讀的名稱可以解讀到網址,代表可以網頁的參考更容易記憶,而且當網站移到其他的伺服器時,網址不需變動。
簡介
[编辑]巴特勒·蘭普森有一句著名的格言,被David Wheeler所引用:「我們可以透過引入另外一個間接層來解決所有問題。」(軟體工程基本定理)。[1] 這句話中的間接層常會被抽象層取代。源自這句格言的推论,Wheeler一開始也加了一個結論:「……那些需要太多間接層的問題例外」
(6)迴避問題(例如將問題移到整個網路架構的其他部份)比解決問題要簡單。
- (6a)(推論)永遠可以加上另一層間接層。
面向对象程序设计頻繁地使用indirection,最簡單的例子是动态分派。高階indirection的例子包括代理模式的設計模式,以及代理服务器。委托(Delegation)是另一個indirection模式的精典例子。在支援動態資料類型的型別安全直譯器中,大部份變數都有一層的indirection:首先先確認變數的型態安全,再解參考指標指向的實際值。
递归数据类型常會用indirection來實現,不然一個資料型態的值裡面可會包括另一個完整的相同型態。
在用符號程式來建立數學規格時,indirection也很有用。從最簡單的例子開始,像是公式裡的變數x、y、z可以指任意數字。x、y、z也可以在其他公式中表示任意數字。這個簡單範例有其限制,因為實數有無窮多個,而在符號程式中,符號的數量是有限的。移到另一個更重要的例子,在邏輯中公式α可以指任意公式,因此也可以是β, γ, δ, ... or η→π, ς ∨ σ。若集合建構式符號寫成此式Δ={α} ,表示所有公式的集合,雖然所參考的是α,但此處有兩層的indirection,第一層是所有α的集合,第二層是集合 Δ中出現α所代表的所有公式。
相關條目
[编辑]參考資料
[编辑]- ^ Spinellis, Diomidis. Another level of indirection. Oram, Andy; Wilson, Greg (编). Beautiful Code: Leading Programmers Explain How They Think. Sebastopol, California: O'Reilly and Associates. 2007: 279–291.