最早可查证的关于多态的说法是一篇叫做 Fundamental Concepts in Programming Languages的论文,文中对多态的讨论主要是用于实现运算符的重载版本选择,文中把多态分为两种: ad-hoc多态和参数多态,ad-hoc多态即指系统根据上下文自己决定如何选择运算符的行为,比如各种原生的运算符都在此列。参数多态则是根据参数类型选择。文中对参数多态的解释则是用了一个颇为"函数式"的例子,根据传入的函数类型参数的函数签名来决定返回值类型。
1985年左右的一篇论文On Understanding Types, Data Abstraction, and Polymorphis则详细地论述总结了多态性的概念,文中给出了多态的分类:
polymorphism(多态)
|-universal
| |- parametric
| \- inclusion
\-ad-hoc
|- overloading
\- coercio
这篇文章对多态的论述比较系统,网上也有pdf版本,有兴趣的朋友可以详细阅读。(inclusion多态听起来比较陌生,但是其实它的另一个名称是subtype Polymorphism,这也是唯一一种跟面向对象相关的多态)
从上面的发展可以看出,多态是一个差不多跟面向对象同时(60年代)诞生的编程概念,有自己独立的体系结构,并且这个概念非常广泛地用于很多种编程语言的设计当中。
关于面向对象跟多态的关系,下面一段话用来解释非常恰当(来自The C++ programming language),
Since both(wintercn注:根据上下文指template和abstract class) allow an algorithm to be expressed _disibledevent=>
最新评论