複製鏈接
請複製以下鏈接發送給好友

多態

鎖定
編程語言類型論中,多態(英語:polymorphism)指為不同數據類型的實體提供統一的接口多態類型(英語:polymorphic type)可以將自身所支持的操作套用到其它類型的值上。
中文名
多態
外文名
Polymorphism
類    型
概念
解    釋
多種狀態

目錄

多態簡介

編程語言類型論中,多態(英語:polymorphism)指為不同數據類型的實體提供統一的接口多態類型(英語:polymorphic type)可以將自身所支持的操作套用到其它類型的值上。
計算機程序運行時,相同的消息可能會送給多個不同的類別之對象,而系統可依據對象所屬類別,引發對應類別的方法,而有不同的行為。簡單來説,所謂多態意指相同的消息給予不同的對象會引發不同的動作。
多態也可定義為“一種將不同的特殊行為和單個泛化記號相關聯的能力”。
多態可分為變量多態與函數多態。變量多態是指:基類型的變量(對於C++是引用或指針)可以被賦值基類型對象,也可以被賦值派生類型的對象。函數多態是指,相同的函數調用界面(函數名與實參表),傳送給一個對象變量,可以有不同的行為,這視該對象變量所指向的對象類型而定。因此,變量多態是函數多態的基礎。
多態還可分為:
  • 動態多態(dynamic polymorphism):通過類繼承機制和虛函數機制生效於運行期。可以優雅地處理異質對象集合,只要其共同的基類定義了虛函數的接口。也被稱為子類型多態(Subtype polymorphism)或包含多態(inclusion polymorphism)。在面向對象程序設計中,這被直接稱為多態
  • 靜態多態(static polymorphism):模板也允許將不同的特殊行為和單個泛化記號相關聯,由於這種關聯處理於編譯期而非運行期,因此被稱為“靜態”。可以用來實現類型安全、運行高效的同質對象集合操作。C++STL不採用動態多態來實現就是個例子。
    • 函數重載(Function Overloading)
    • 運算符重載(Operator Overloading)
    • 帶變量的宏多態(macro polymorphism)
    • 非參數化多態或譯作特設多態(Ad-hoc polymorphism):
    • 參數化多態(Parametric polymorphism):把類型作為參數的多態。在面向對象程序設計中,這被稱作泛型編程
對於C++語言,帶變量的宏和函數重載(function overload)機制也允許將不同的特殊行為和單個泛化記號相關聯。然而,習慣上並不將這種函數多態(function polymorphism)、宏多態(macro polymorphism)展現出來的行為稱為多態(或靜態多態),否則就連C語言也具有宏多態了。談及多態時,默認就是指動態多態,而靜態多態則是指基於模板的多態。 [1] 

多態發展歷史

1967 年,英國計算機科學家克里斯托弗·斯特雷奇在他的講義合集《編程語言中的基礎概念》中,首次提出了特設多態和參數多態的概念。
1985 年,彼得·瓦格納和盧卡·卡代利在論文中引入了術語“藴含多態”(英語:inclusion polymorphism)來為子類型和繼承 (計算機科學)建模。。不過子類型和繼承本身在 1967 年就已經在Simula有對應的實現。 [1] 

多態例子

比如有動物(Animal)之類別(Class),而且由動物繼承出類別雞(Chicken)和類別狗(Dog),並對同一源自類別動物(父類)之一消息有不同的響應,如類別動物有“叫()”之動作,而類別雞會“啼叫()”,類別狗則會“吠叫()”,則稱之為多態。 [1] 

多態參見

參考資料
  • 1.    Christopher Strachey. Fundamental Concepts in Programming Languages (PDF). www.itu.dk (Kluwer Academic Publishers).