美文网首页NS2入门教程
NS2入门教程——TclObject

NS2入门教程——TclObject

作者: Vophan | 来源:发表于2019-02-14 14:56 被阅读0次

    首先我们来回顾一下,TclObject是干嘛的呢?我们又得从NS2的体系结构说起,NS2主要有两个层次:解释层次和编译层次,我们在平时使用NS2的时候,主要是Tcl的脚本编程,对应的也就是通过解释器生成Otcl的对象SplitObject,那么,我们如何与C++内核联系起来?也就是说,怎么进行mirror,生成shadow object,这里就用到了TclObject和TclClass,TclObject是所有模拟器对象的基类,也就说是所有模拟构件的基类,对应着解释层次的分裂对象,但是具体怎么将他们连起来就用到了TclClass。Tclobject和TclClass的关系就像被操纵者与操纵者。

    如果还没有搞懂的话,请阅读我的另一篇文章《NS2入门教程——分裂对象模型》

    示例:如何实例化一个TclObject

    set srm [new Agent/SRM/Adaptive]
    \$srm set packetSize_ 1024
    \$srm traffic-source \$s0
    

    其中,值得注意的是:

    (解释层次)

    Agent/SRM/Adaptive是Agent/SRM的子类,Agent/SRM是Agent的子类,Agent则是SpiltObject的子类。

    (编译层次)

    与Agent/SRM/Adaptive对应的shadow object是ASRMAgent,ASRMAgent是SRMAgent的子类,SRMAgent又是Agent的子类,而Agent则是TclObject的子类。

    代码解释

    第一行:实例化一个TclObject的对象。

    第二行:配置一个绑定的变量。

    第三行:说明了调用C++方法的Otcl对象

    创建一个TclObject

    具体创建过程,请参见我的另一篇文章《NS2入门教程——分裂对象模型》,这里只为大家缕清思路。

    创建过程:(包括初始化)

    1. 启动NS2,这时候会创建一个Tcl的对象。
    2. 然后,进入静态类的初始化,比如说:SRMAgent;调用静态类的构造函数。
    3. 静态类继承自TclObject类,所以调用TclObject类的构造方法,TclObject的构造方法中调用了类方法bind,来为新生成的类绑定方法。
    4. bind方法用过Tcl调用SplitObject的register方法,生成了一个类(解释),并且绑定了两个方法create-shadow和delete-shadow
    5. 以上为初始化过程,现在我们使用new来实例化一个构件,这时候,他会调用create(解释层次),分配空间,并且返回句柄给用户,以便进一步操作。
    6. 然后调用新对象的构造函数,调用create-shadow方法。
    7. create-shadow实际上是调用了继承了TclClass的子类的create函数,也就是生成了对于的TclObject.

    下面是Agent/SRM/Adaptive的构造函数:

    Agent/SRM/Adaptive instproc init args {
        eval \$self next \$args
        \$self array set closest_ "requestor 0 repairor 0"
        \$self set eps_    [\$class set eps_]
    }
    

    这里补充一下:

    OTcl是不会自动调用父类构造函数的,必须手动调用,所以就像上面1代码的第一行一样。

    相关文章

      网友评论

        本文标题:NS2入门教程——TclObject

        本文链接:https://www.haomeiwen.com/subject/bdyeeqtx.html