多态性,多态,态多,态多,多态

唉..多态,OO,抽象..这些词永远能带来波澜
近日winter-cn朋友发表了一篇反驳'多态是OO的基本特性'的文章,引发很多讨论: http://www.cnblogs.com/winter-cn/archive/2011/05/03/2035914.html
我说说我对多态的定义(每当我说'多态',我正在表达什么),闲话无多,来了
如果要说一个最简单的多态现象,我一定会拿这个来说: 把一个36装进一个int,然后它在以后的运算中表现出作为一个36它该表现出的行为
这已经构成了多态,有人认同么?
a=5;b=10;a+b得15 a=3;b=4;a+b得7
只是把两个int相加,它们就因其值的不同加出了不同的正确结果,如果这都不算多态,我有什么好悲哀?
再看看所谓'参数多态'(这被叫做多态是所谓'公认'的): f(x){return x;} f(0)得0,f(36)得36,名副其实的多态
最后,虚函数调用(也有叫所谓'包含多态',inclusion poly)也引发多态现象,这个不举例了,很无聊 这个自然是'公认'的,甚至,它一度还成了多态的代名词(笑死人了)
截止发稿时,我对多态的定义是这样的: 某些事物能关联一个间接(indirection),此间接参与在环境中,呈现出其所关联的那些事物的各异的表现,这样的现象称多态,其中,事物称'禀',该间接称'称',表现称'格',暂称其为多态的3属性 随意地看一些例子: 值多态中(即以上第0个例子): 禀:值(value),称:变量(variable),格:运算 引用多态中(语言允许对象的identity作为first class value时,我们可以把'是哪个'装进变量..还有,这个'引用'并没有意图与上面的'值'对立,instead,可把它看作是值多态的语义特例(也即,我们可以用值表示identity)): 禀:identity 称:引用变量(reference variable),语言中提供的 指针变量 或 引用等取引用语义的变量 格:引用(请把它当动名词来读) 类型多态中(为什么会叫inclusion poly?费解,反正我叫它type poly): 禀:实际类型(actual type),称:视在类型(apparent type),格:方法调用
多态就是这样
附: 关于所谓'多态和OO的关系',不想多说,因为强调"多态和OO没有一毛钱关系"本身就很可笑——你会强调一个CD机不可食用吗? 对'OO'没有一个绝对统一的定义,这一点很容易理解,但如果有一个版本把多态列入其必要特征,那我个人认为这个版本是畸形的不可取的,而如果你认为多态确是你心中的那个'OO'的必要特征,那么我信任你,但是我将提醒你:你是不是污染了我们的术语空间?如果你苦于暂时无法找到合适的名字,那给你一个权宜之计:请像你给变量起名一样,不妨先加上修饰(即使它会长一些),并继续工作,也许将来你会找到它本该得到的名字.这里赠送一个:OO with poly
Tags:  什么是多态 基因多态性 单核苷酸多态性 java多态 多态性

延伸阅读

最新评论

发表评论