多型的奧秘:如何讓一個符號同時代表多種型別?

在編程語言理論和類型理論中,多型是使用一個符號來表示多種不同類型的技術。在物件導向編程中,多型提供了一個接口來處理不同數據類型的實體。這一概念源自生物學中的原理,某種生物或物種可以呈現出多種不同的形式或階段。最常見的多型形式包括:隨意多型(ad hoc polymorphism)、參數多型(parametric polymorphism)和子類型多型(subtyping),後者又稱為子型多型或包含多型。

多型的歷史

多型類型系統的興趣在1990年代顯著增長,並且在十年的尾聲開始出現實用的實現。Christopher Strachey最早在其著作《編程語言的基本概念》中描述了隨意多型和參數多型,並將其列為“兩個主要類別”的多型概念。隨意多型是ALGOL 68的一項特性,而參數多型則是ML類型系統的核心特徵。彼得·韋格納( Peter Wegner)和盧卡·卡戴利(Luca Cardelli)在1985年的一篇論文中首次引入了包含多型這一術語,以刻畫子類型和繼承,並表示Simula是第一個實現這一特性的編程語言。

多型的形式

隨意多型

Christopher Strachey選擇“隨意多型”這個術語來描述可以應用於不同類型參數的多型函數,但它的行為取決於其應用的具體參數類型。這類多型也被稱為函數重載或操作符重載。這裡的“隨意”並不是貶義,而只是意味著這種多型形式不是類型系統的基本特性。

參數多型

參數多型允許函數或數據類型以通用的方式編寫,以便在不依賴其類型的情況下處理值。這一概念同樣適用於數據類型和函數,能夠針對不同類型的值進行運算的函數被稱為多型函數。

子類型多型

某些編程語言利用子型多型的概念,限制在特定情況下可用的類型範圍。這種語言允許函數接受特定類型T的對象,但如果傳入屬於T的子類型S的對象,函數也能正常工作。它遵循利斯科夫替換原則。

行多型

行多型主要關注結構類型,容許使用所有類型擁有特定屬性值的值,而不損失其他類型的資訊。

多類型特性

多類型特性是一種比多型更一般的概念,通過提供特定數據類型的固定隨意情形,卻無需支持隨意組合子。

等級多型

等級多型是數組編程語言如APL的一個定義特徵。這種編程模型的本質是隱性地將所有操作視為聚合操作,適用於任意維度的數組。

實現方面

靜態與動態多型

多型性可根據實現選擇的時間進行區分,即靜態(編譯時)或動態(運行時)。這分別稱為靜態調度和動態調度,對應的多型形式則稱為靜態多型和動態多型。靜態多型運行更快但要求額外的編譯器支持。

結尾

隨著編程語言的不斷發展,多型的概念也在不斷推陳出新。它不僅影響了編程的方式,也促使了許多其他理論和實踐的進步。當思想的界限被打破,是否意味著未來更為靈活的編程模式也將隨之而來?

Trending Knowledge

你知道嗎?如何透過函數重載實現靈活的多型性?
多型性在程式語言理論和型別理論中是指使用一個符號來表示多種不同的型別。在面向對象的程式設計中,多型性為不同數據型別的實體提供一個相同的介面。這一概念起源於生物學中的原則,指一種生物或物種可以有多種不同的形式或階段。 當今最常見的多型性形式包括: <ul> <li>特定多型性:為一組單獨指定型別定義一個共同介面。</li> <li>參數多型性:不指
從生物學到程式語言:多型的背後有何驚人故事?
在程式語言理論中,多型是一個強大的概念,它使得一個符號可以代表多種不同的類型。這個理念不僅應用於物件導向程式設計,也深植於生物學的原理中,令人驚訝的是,兩者之間竟有如此深刻的聯繫。藉由探索多型的不同形式,以及它在軟體開發中的影響,我們或許可以更清晰地理解這些技術背後的故事。 <blockquote> 在生物學中,有些生物或物種可以呈現出多種不同的形式或階段,這種現象正是多
什麼是參數多型?為何它對編程語言的表現力如此關鍵?
在程序設計語言理論和類型理論中,多型性是利用一個符號來表示多種不同類型的能力。這一概念源於生物學的原則,表示一個有機體或物種可以擁有多種不同的形式或階段。在物件導向編程中,多型性則是提供一個介面來處理不同數據類型的實體。這樣的特性讓編程語言變得更具表現力,也讓開發者能夠編寫更為通用和靈活的代碼。 <blockquote> 多型性有多種形式,其中包括:臨時多型、參數多型和子

Responses