词条 | 泛型技术 |
释义 | 泛型概念Doug McIlroy于1968年发表的一篇著名论文"Mass Producedoftware Components",那篇论文提出了"reusable components"(可复用软件组件,又称为软件积木或软件IC)的远景。过去数十年来,泛型技术比较属于研究单位中的骄客,实现出来且被广泛运用的产品极少。虽然Ada, ALGOL68, Eiffel, C++等语言都支援泛型相关语法,但是直到C++ STL的出现,泛型技术在软体发展圈内才开始有了大量反响。 泛型(generics, genericity)又称为「参数化类型(parameterized types)」或模板(templates),或所谓「参数式的多型(parametric polymorphism)」。主要是一种类型代换(type substitution)概念,是和继承(inheritance)不同而互补的一种组件复用机制。泛型技术最直接被联想到的用途之一就是建立资料群集(collections),允许使用者将某些特定类型的资料(物件)置入其中,并于取出时明确知道元素的类型,无需做(向下)转型动作。假设某个泛型程序库提供list,你便可以明确宣告一个内含int或double或Shape(使用者自定类型)元素的list(这是C++应用型式),或明确宣告一个内含Integer 元素的list(这是Java应用型式),如下: list<int> iList; // in C++ LinkedList<Integer> iList = new LinkedList<Integer>(); // in Java 组件(此处狭义地指classes)复用技术中,继承和泛型的区别在哪里? 可以这么说,当你运用继承,面对不同的类型(types)你将拥有相同的接口,而那些类型获得了多型性(多态性,Polymorphics)。当你运用泛型,你将拥有许多不同的类型,并得以相同的演算法(如排序、搜寻)作用在它们身上。举个例子,发展绘图系统时我们往往会设计一个CShape,并令所有(几何乃至非几何)形状皆衍生自它。为了让所有衍生自CShape 的形状都有自绘能力,并有相同接口draw(),你必须使用继承技术并令draw()为一个拟函数。此处所以采用继承和拟机制,是因为draw()接口相同但演算法不同(不同的形状当然有不同的绘图法) |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。