3.4 泛型
泛型是我们都在实际使用但却没有意识到自己在使用的一种方法。泛型通过参数化替代不同的行为。从本质上讲,我们所获得的不同结果,取决于单个行为职责的输入参数值——这种想法在“汇编宏”方法使用时就已经存在了,因此我们在此不多做讨论。实际上,它的另外一个名字——参数多态,表明它是多态的一种特例。
任何具有以下特征的方法都可以在技术上视为泛型的实例,在这些方法中,不同的行为依赖于该方法的参数值。因此,任何一个对参数值进行if判断的方法都可以视为泛型的实例。然而,大部分OO人员通常从存在显著行为差异这个方面考虑泛型。在这样的上下文中如何给“显著”一个很好的定义留给读者做练习。
由OO范式带来的一个特有的问题在于,如何扩展参数这一定义。以传统的视角看来,参数是过程的一个输入。在OO的上下文中,参数的定义扩展至包括任何潜在的状态变量,这些状态变量对于某一个行为方法是可访问的。因此在OO的上下文中,任何一个可达对象的任何知识属性都是行为职责中的一个潜在参数。
这引入了一种非常强大的设计模式,我们在一个对象中定义通用的行为职责,然后将该对象与另外一个对象进行关联,另外一个对象是“规格对象”,其属性参数是上述对象的通用行为。这使得我们可以在运行时动态地实例化对象之间的关系,即根据上下文动态确定哪一个“规格对象”是当前运行时“正确”的那一个。这是一种非常强大的技术,但是在当前的OO开发中没有得到充分的利用,我们将用整个第5章来论述这一技术。
时间: 2025-01-25 06:28:00