1、NS为什么要用使用分裂对象模型
在模拟的过程中,模拟器要完成两种不同的事情:一、要完成对具体协议的模拟,需要的是一种高效的系统编程语言,实现的算法要能够多次重复的执行,因此运行的效率很重要;二、需要经常设置或者修改模拟场景,需要在较短的时间内开发出大量的场景,从修改模型到重新运行的这段周转时间就很重要。因此选择了C++和OTCL,C++的运行效率比较高,但是修改后需要重新编译等,需要花费较大的时间,因此C++适合具体的协议的实现。OTCL是解释性的语言,运行速度比较慢,但是可以很方便的进行修改,不需要编译,也不是强制类型的,不容易出错。适合做模拟的配置!
2、OTCL和C++的对应关系
NS通过TCLCL把两种语言联系起来,OTCL类称为解释类,相应的C++类称为影像类或者编译类,相应的称OTCL对象为解释对象,C++对象为影像对象或者编译对象。
TCLCL是通过TclObject类和TclClass类来实现的。首先,用户通过解释器来创建解释对象,同时通过C++类产生相对应的影像对象。TclClass类中就包含这样的映象机制。TclClass是一个纯虚类,从这个类继承出来的类提供2个功能,1是构造和编译类互为镜像的解释类,2提供初始化新的TclObjec的方法。每个从TclClass中继承出来的类都和编译类结构中的一个TclObject子类想关联,并能初始化所关联类的新的对象。
如:
static class renotcpclass:public tclclass
{
public:
renotcpclass():tclclass("agent/tcp/reno"){}//将 renotcpclass和 renotcpagent想关联,注意命名规则
tclobject* creat(int argc, const char* const* argv[])
{
return(new renotcpagent());//经过上面的关联,每次创建agent/tcp/reno对象时,将都调用这个类的creat函数
}
}
在模拟的过程中,模拟器要完成两种不同的事情:一、要完成对具体协议的模拟,需要的是一种高效的系统编程语言,实现的算法要能够多次重复的执行,因此运行的效率很重要;二、需要经常设置或者修改模拟场景,需要在较短的时间内开发出大量的场景,从修改模型到重新运行的这段周转时间就很重要。因此选择了C++和OTCL,C++的运行效率比较高,但是修改后需要重新编译等,需要花费较大的时间,因此C++适合具体的协议的实现。OTCL是解释性的语言,运行速度比较慢,但是可以很方便的进行修改,不需要编译,也不是强制类型的,不容易出错。适合做模拟的配置!
2、OTCL和C++的对应关系
NS通过TCLCL把两种语言联系起来,OTCL类称为解释类,相应的C++类称为影像类或者编译类,相应的称OTCL对象为解释对象,C++对象为影像对象或者编译对象。
TCLCL是通过TclObject类和TclClass类来实现的。首先,用户通过解释器来创建解释对象,同时通过C++类产生相对应的影像对象。TclClass类中就包含这样的映象机制。TclClass是一个纯虚类,从这个类继承出来的类提供2个功能,1是构造和编译类互为镜像的解释类,2提供初始化新的TclObjec的方法。每个从TclClass中继承出来的类都和编译类结构中的一个TclObject子类想关联,并能初始化所关联类的新的对象。
如:
static class renotcpclass:public tclclass
{
public:
renotcpclass():tclclass("agent/tcp/reno"){}//将 renotcpclass和 renotcpagent想关联,注意命名规则
tclobject* creat(int argc, const char* const* argv[])
{
return(new renotcpagent());//经过上面的关联,每次创建agent/tcp/reno对象时,将都调用这个类的creat函数
}
}