跳转到内容

Indirection

维基百科,自由的百科全书

程序设计中的indirection也稱為參考(reference),是一種受名稱、參考或是容器指涉事物的方式。最常見的indirection是用記憶體位址處理某變數。像是用指標存取變量就是這樣的例子。一個已儲存的,可以透過double indirection存取其他物標的指標,稱為間址模式(indirection node)在較早期的電腦結構中,間址模式可以提供許多複雜的寻址模式

indirection的另外一個例子是域名系统,可以用像是en.wikipedia.org的網址代替像208.80.154.224的IP網址。透過人類可讀的名稱可以解讀到網址,代表可以網頁的參考更容易記憶,而且當網站移到其他的伺服器時,網址不需變動。

簡介

[编辑]

巴特勒·蘭普森有一句著名的格言,被David Wheeler英语David Wheeler (computer scientist)所引用:「我們可以透過引入另外一個間接層來解決所有問題。」(軟體工程基本定理)。[1] 這句話中的間接層常會被抽象層取代。源自這句格言的推论,Wheeler一開始也加了一個結論:「……那些需要太多間接層的問題例外」

有一個惡搞RFCRFC 1925,提到:

(6)迴避問題(例如將問題移到整個網路架構英语network architecture的其他部份)比解決問題要簡單。

(6a)(推論)永遠可以加上另一層間接層。

面向对象程序设计頻繁地使用indirection,最簡單的例子是动态分派。高階indirection的例子包括代理模式設計模式,以及代理服务器委托(Delegation)是另一個indirection模式的精典例子。在支援動態資料類型型別安全直譯器中,大部份變數都有一層的indirection:首先先確認變數的型態安全,再解參考指標指向的實際值。

递归数据类型常會用indirection來實現,不然一個資料型態的值裡面可會包括另一個完整的相同型態。

在用符號程式來建立數學規格時,indirection也很有用。從最簡單的例子開始,像是公式裡的變數xyz可以指任意數字。xyz也可以在其他公式中表示任意數字。這個簡單範例有其限制,因為實數有無窮多個,而在符號程式中,符號的數量是有限的。移到另一個更重要的例子,在邏輯中公式α可以指任意公式,因此也可以是β, γ, δ, ... or ηπ, ςσ。若集合建構式符號寫成此式Δ={α} ,表示所有公式的集合,雖然所參考的是α,但此處有兩層的indirection,第一層是所有α的集合,第二層是集合 Δ中出現α所代表的所有公式。

相關條目

[编辑]

參考資料

[编辑]
  1. ^ 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.