• 子類型

    編輯
    本詞條由“匿名用戶” 建檔。

    什么是子類型

    編輯

    編程語言理論中,子類型(也稱子類型多態性或包容多態性)是類型多態性的一種形式,其中子類型是一種數據類型,它與另一種數據類型(超類型)通過某種可替代性的概念聯系在一起,這意味著程序元素,通常是子程序或函數,寫成對超類型元素的操作也可以對子類型的元素操作。如果S是T的一個子類型,子類型關系(寫成S<:T,S?T,或S≤:T)意味著任何類型的術語S可以安全地用于任何預期有T類型的術語的上下文。這里的子類型的精確語義主要取決于如何安全地使用和任何上下文的細節,這些細節由一個給定的類型形式主義或編程語言來定義。一個編程語言的類型系統基本上定義了它自己的子類型關系,如果該語言不支持(或很少支持)轉換機制,這很可能是微不足道的。由于子類型關系,一個術語可能屬于一個以上的類型。因此,子類型化是類型多態性的一種形式。在面向對象編程中,術語"多態性"通常只指這種子類型多態性,而參數化多態性的技術將被視為通用編程。函數式編程語言通常允許記錄的子類型化。因此,用記錄類型擴展的簡單類型化lambda微積分也許是最簡單的理論環境,在這種環境中可以定義和研究有用的子類型化概念。因為所產生的微積分允許術語有一個以上的類型,它不再是一個簡單的類型理論

    子類型

    由于函數式編程語言,根據定義,支持函數字詞,這些字詞也可以存儲在記錄中,帶有子類型的記錄類型提供了一些面向對象編程的特征。通常,函數式編程語言也提供一些,通常是有限的,參數化多態性的形式。在理論環境中,研究這兩個特征的相互作用是可取的;一個常見的理論環境是系統F<:。試圖捕捉面向對象編程的理論特性的各種計算方法可以從系統F<:中導出。子類型的概念與語言學上的hyonymy和holonymy的概念有關。它還與數理邏輯中的有界量化概念有關(見順序排序邏輯)。子類型不應該與面向對象語言中的(類或對象)繼承概念相混淆;子類型是類型之間的關系(面向對象語言中的接口),而繼承是實現之間的關系,源于允許從現有對象創建新對象的語言特性。在一些面向對象的語言中,子類型化被稱為接口繼承,而繼承則被稱為實現繼承。

    子類型的起源

    編輯

    編程語言中的子類型概念可以追溯到20世紀60年代;它被引入到Simula衍生工具中。1980年,JohnC.Reynolds和LucaCardelli(1985年)對子類型進行了xxx次正式處理,他使用類別理論對隱式轉換進行了正式處理。隨著面向對象編程的主流采用,子類型的概念已經獲得了知名度(在一些圈子里與多態性同義)。在這種情況下,安全替換原則通常被稱為Liskov替換原則,這是以BarbaraLiskov的名字命名的,她在1987年的面向對象編程會議上發表的主題演講中普及了該原則。因為它必須考慮到可變的對象,所以由Liskov和JeannetteWing定義的理想的子類型概念,稱為行為子類型,比類型檢查器中可以實現的要強得多。(詳見下面的§函數類型)。

    子類型的例子

    編輯

    一個簡單的子類型的實際例子在圖中顯示。鳥的類型有三個子類型:鴨子、布谷鳥和鴕鳥。從概念上講,每一個都是基本類型鳥的一個品種,它繼承了許多鳥的特性,但有一些特殊的區別。在這個圖中使用了UML符號,開放的箭頭顯示了超類型和其子類型之間關系的方向和類型。作為一個更實際的例子,一種語言可能允許整數值被用于期望有浮點值的地方(Integer<:Float),或者它可能定義一個通用類型Number作為整數和實數的一個共同超類型。在這第二種情況下,我們只有Integer<:Number和Float<:Number,但是Integer和Float不是彼此的子類型。程序員可以利用子類型的優勢,以更抽象的方式編寫代碼,而不是沒有它。請看下面的例子。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/170828/

    (1)
    詞條目錄
    1. 什么是子類型
    2. 子類型的起源
    3. 子類型的例子

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久