多态(Polymorphism) -- 再思考

多态是一种程序语言的特性,他符合人类的思考方式,再加上对象的概念,显得更加自然。但是再仔细去琢磨一下多态,特别是OOP中的多态,这种多态到底为程序员掩盖了什么呢?当定义 ClassA a = new ClassB() 的时候,我们很清楚的知道调用a的某个方法其实是在调用ClassB的方法(当然这个方法要被重载,在C++中还必须是virtual)。这是我们人类的思考方式,计算机也这样思考的吗?显然答案是:NO

计算机的大脑(Central Process Unit,CPU)远没有人类大脑那么复杂,它没有思考能力,没有抽象能力,没有推理能力,它所具有的能力就是认识几百条指令[1],并且能处理这些指令,而且是以非常非常快的速度处理这些指令,但是这些指令对人类来说又显得那么繁琐。例如1+2=3,多么简单,但对CPU来说,却没那么简单,它要通过以下步骤来完成:

   1: LOAD 指令到寄存器(由操作符(+)和两个操作数(1,2)的地址组成)
   2: LOAD 操作数1到寄存器(根据地址)  
   3: LOAD 操作数2到寄存器(根据地址)  
   4: ADD  执行加法,并且把结果写到一个寄存器中  
   5: MOV  把寄存器中的结果写回内存

这还只是CPU执行的过程,在此之前还有很多工作要做,例如把1+2=3编译成CPU认识的指令,把指令加载到内存 等等。这么简单的大脑怎么去思考多态呢?

CPU的可贵之处就在于它的简单(简简单单才是福),它为人类丰富的想象空间提供了基石。CPU最主要的两个寄存器:IR(Instructor Register)和PC(Program Counter)。CPU在运行的时候一直在做这样一个重复的动作:

   1: 加载PC指向的指令到IR  
   2: PC指向下一条指令  
   3: 执行IR中的指令

在第三步中执行的指令有可能修改PC中指向的地址,这样就实现程序的跳转。这时再和上面的多态结合在一起,多态就是在运行(不是编译时决定的)的时候去决定下一个要调用的方法,那就可以通过修改PC指向的指令来完成(我的猜测),这中间当然还需要很多很多繁琐的过程和很多很多实现细节,C++[2]中的vtable[3]也许能告诉我们这些细节。

[1]  http://developer.intel.com/design/pentium/manuals/243191.htm
[2]  http://www.research.att.com/~bs/C++.html
[3]  http://www.informit.com/articles/article.aspx?p=26063
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值