NS笔记1:分裂对象模型

分裂对象模型
1.       每实例化一个构件时,都会同时创建一个Otcl中的对象和一个对应的C++对象,两个对象可以互操作。
2.       分裂对象模型中的Otcl类:解释类, 对应的C++类: 编译类。互为影像类。
3.        TclObject::所有编译类的基类
SplitObject:所有解释类的基类
4.        创建和销毁TclObject:
set tcp1 [new Agent/TCP]
delet $tcp1
new{} 创建解释对象和对应的影像对象。
首先创建出解释对象,然后执行该对象的初始化实例过程,init{},并把用户提供的参数传给它。在基类SplitObject的初始化实例过程中,通过create-shadow方法创建该对象在C++中的影像对象。然后执行影像对象的构造函数。
5.        TclClass类:(纯虚类)
每个从TclClass继承出来的类都和编译结构中的一个TclObject的子类相关联:
6.       变量绑定
bind(“Otcl变量名”, &C++变量名);
7.        Command()方法
Otcl中的解释对象的实例过程cmd{}调用影像对象的方法command(),讲cmd{}的参数座位一个参数数组传给command()方法。
1.       将欲进行的操作指定为第一个参数:
2.       隐式调用:
8.       例子
tcp.h中的TcpAgent类声明:
class TcpAgent: public Agent{     //Agent是TclObject的后代
public:
         TcpAgent();
         virtual void recv(Packet*, Handler*);
         virtual void timeout(int tno);
         virtual void timeout_nontx(int tno);
         int command(int argc, const char*const* argv);
         virtual void sendmsg(int nbytes, const char * flags = 0);
         …
};
tcp.cc中定义的TclClass子类:
static class TcpClass :pbulic TclClass {
public:
         TcpClass() : TclClass(“Agent/TCP”) { }
         TclObject* create(int, const char*const*) {
         return (new TcpAgent());
}
} class_tcp ;    //创建了TcpClass的实例 class_tcp;
结果:
1.       两个Otcl类: Agent和Agent/TCP被声明
2.       class_tcp和Agent/TCP的关系被登记
在NS开始时,命令行new Agent/TCP运行,在new{}的过程中,一个Agent/TCP的解释对象被创建了,并且调用了它的实例过程init{}。
因为Agent/TCP的父类先于其init{}调用,则基类init{}最先被调用。
基类SplitObject的create-shadow方法负责创建影像对象。
根据TcpClass登记的关联关系,class_tcp的create函数被调用,创建TcpAgent对象,并返回其指针。
TcpAgent的构造函数绑定变量。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值