网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VC编程 >> 文章正文
  汇编来实现OOP思想            【字体:
汇编来实现OOP思想
作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-12    
    OOP 和面向过程都是编程中的思想,用学术一些的话是paradigm
正在装载数据……
曾经有人说过,既然
cfront生成的是C代码,那么用C本身乃至汇编都可以实现 OOP,只是太多东西需要自己手工来完成。确实是这样的,面向过程早就用在汇编设计中了,OOP也早就和汇编有了交汇点(95年之前,TASM就引入了 OOP的概念)。只是汇编实现OOP是没有形式上的,无法提供C++这样的Strong-typed和其他安全保证(比如存取权限)。封装只是一种概念上 的,自觉遵守的。

    OOP
有几个关键,据我的粗浅理解即为:封装性,继承与多态。具体表现就是把数据和操作数据的函数放在一起,数据放在对象中,提供接口实现存取。继承性实 现了语义或者实现的继承,同时体现在概念层次与代码重用两个方面。多态则是利用指针实现使用pointerreference来实现同一函数在不同继承 类中的多态表现。 

    OOP
的对象模型有好几种实现方式,在《inside C++ object model》中有极其详尽的叙述: 

1.
只把数据放在对象中,而通过name mangling技术把member-functionclass关联起来。 
2.
单表模型,把member functionpointer放入到单独的一个表格,把表格的入口地址放入对象中(一个类对应一个表格)。这在C++中表现为VtblVptr,这种模型实现了运行时的动态灵活性,虽然多了两次dereference 
3.
双表模型,把数据与函数分列在两个表格中,然后把两个表格的入口地址存放在对象中,使得单个对象有了固定的大小。 
4.
简单模型,这个是汇编实做的时候用的模型。就是对象中即保存了数据也保存了函数地址。无论是TASM还是MASM,都是这么做的。 
从效能上来说,C++的做法是最优的。汇编使用第四种是迫不得已,是为了实现的简单性。一定程度上与汇编的高效的精神违背。 

TASM
已经不常用了,其OOP的做法和MASM的做法也是类似的。这里主要讨论MASMOOP做法。作者是NaN Thomas Bleeker。其实现的 办法是用宏定义来达到本来应该是编译器做的幕后工作。其中的宏的技巧很多。但是最终的使用是挺简单的。宏的定义放在一个OBJECTS.INC的文件中, asm文件包含这个inc就能使用这个object model 

虽然宏做得很精巧,但是毕竟MASM缺少支持OOP的语法特性, 在使用的很多方面都有麻烦或者在空间时间上有代价。比如覆盖基类的虚函数必须每次手工的完成。也就是继承的层次中所有父类以上的被覆盖的虚函数都需要在子 类中手工完成。虽然是有这样那样的缺点,但是OOP还是给汇编带来了不少好处。比如:

1.
汇编更好的和COMC++这样的面向对象领域的东西互动。已经有用汇编+OOP调用com的例子。如果用汇编+OOP来写com将可以产生适合高速度和小尺寸的组件。 
2.
扩大了汇编能够解决的问题范围,使得汇编程序更加容易管理和合作编写。这个object model的作者就用汇编+OOP写了一个基于神经网络的手写字母识别的程序,不到200k(其中大部分是图象文件占用的空间)。  

其余代码部分参见http://www.zxbc.cn/html/hbyyy/1020491379291.html



本文来源:http://blog.csdn.net/serg_/archive/2007/08/27/1761344.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     directx 图形接口指南(…
     win2k下的api函数的拦截
     用crypto  api  实现公钥…
     根据别人的md5源码封装的…
     vc中使用gdi+合并jpg图片
     document/view的交互 --…
     windows下的函数hook技术
     windows api函数大全一
     用vc 6.0实现串行通信的…
     vc++技术内幕(第四版)…
  • Java Swing实现俄罗斯方块

  • Cookie又见Cookie-使用Html…

  • jsf自定义toolbar组件

  • boost.any源码重列

  • boost.array源码重列

  • boost.shared_ptr源码重列

  • boost.lexical_cast源码重列

  • 引领boost(开篇)

  • 引领Boost(二)(Boost::An…

  • CTrueColorToolBar的使用

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David