OTCL,面向对象的脚本一

Otcl

简介

面向对象的脚本语言

类变量和类方法

Otcl的基类称为Object(类的名字,不是面向对象中的“对象”),所以的Otcl类都是从Object派送来的。
直接贴代码,命名为BOX.tcl

#定义“BOX”类
Class BOX 
#类的构造函数用init表示;instproc表示这是一个类的方法
#“eval $self next”是显式地调用父类同名(init)方法,这是与C++的一点不同
#同时定义了一个类成员“lenght”,默认为5
BOX instproc init {} {
eval $self next
$self set lenght 5
}

#与C++的第二点不同,每个方法都需要重新声明类成员
#“$self instvar lenght ”既用来重新声明lenght变量
BOX instproc incr_lenght {} {
$self instvar lenght 
incr lenght
puts "$lenght"
}

#类的析构函数用destroy表示,也需要显式地调用父类destroy方法
BOX instproc destroy {} {
puts "GoodBye!"
$self next
}

otclsh简单脚本测试

启动Otclsh:

root@: otclsh         
%
#加载上面写的源代码
%source BOX.tcl

#创建一个实例
%BOX box1
box

#查看BOX类的实例,放回上一步创建的box1
%BOX info instances
box1

#查看box1的变量
%box1 info vars
lenght

#查看数值
%box1 set lenght
5

#调用自定义的incr_lenght函数
%box1 incr_lenght
6

#销毁box1对象
% box1 destroy
GoodBye!

#再调用函数就显示失败
% box1 incr_lenght
invalid command name "box1"

1250291-20180614202041932-83902046.png

继承

修改BOX.tcl,增加一个BigBOX类

#定义BigBOX继承BOX
Class BigBOX -superclass BOX

#在基类BOX 类的init方法里增加一条输出"This is a BOX"
BigBOX instproc init {} {
eval $self next
puts "this is a BigBOX"
$self set lenght 5
}

BigBOX instproc destroy {} {
puts "GoodBye! BigBOX"
$self next
}

#重载incr_lenght方法,使其变为乘2,而不是加1
BigBOX instproc incr_lenght {} {
$self instvar lenght 
set lenght [expr $lenght*2]
puts "$lenght"
}

1250291-20180616224947248-1245426792.png

转载于:https://www.cnblogs.com/sunminming/p/9184819.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是TPSN算法和ITPSN算法在NS2下的仿真流程: 1. 下载安装NS2,并安装好TCL库和OTcl库。 2. 在NS2中创建一个新的仿真场景,包括节点和链路。 3. 在节点中加入TPSN或者ITPSN协议。 4. 配置协议参数,包括节点的时钟同步周期、网络拓扑结构等。 5. 运行仿真程序,观察节点时钟同步的效果。 下面是具体的操作步骤: 1. 下载NS2安装包,解压缩并安装。 2. 打开终端,进入NS2安装目录下的ns-2.35目录,输入以下命令: ``` $ cd ns-2.35 $ ./configure $ make $ make install ``` 安装完后,输入以下命令查看NS2版本号: ``` $ ns % version ``` 3. 创建一个新的仿真场景,包括节点和链路。在终端中输入以下命令: ``` $ ns % set ns [new Simulator] % set f [open out.nam w] % $ns namtrace-all $f % set nf [open out.tr w] % $ns trace-all $nf % set n0 [$ns node] % set n1 [$ns node] % $ns duplex-link $n0 $n1 1Mb 10ms DropTail % $ns run ``` 运行完后,会生成out.nam和out.tr两个文件,其中out.nam是仿真场景的可视化界面,out.tr是仿真结果的记录文件。 4. 在节点中加入TPSN或者ITPSN协议。在终端中输入以下命令: ``` $ ns % set ns [new Simulator] % set f [open out.nam w] % $ns namtrace-all $f % set nf [open out.tr w] % $ns trace-all $nf % set n0 [$ns node] % set n1 [$ns node] % $ns duplex-link $n0 $n1 1Mb 10ms DropTail % $ns rtproto TPSN ;# 或者 $ns rtproto ITPSN % $ns run ``` 注意,这里的rtproto参数用来指定节点使用的时钟同步协议,可以选择TPSN或者ITPSN。 5. 配置协议参数。在终端中输入以下命令: ``` $ ns % set ns [new Simulator] % set f [open out.nam w] % $ns namtrace-all $f % set nf [open out.tr w] % $ns trace-all $nf % set n0 [$ns node] % set n1 [$ns node] % $ns duplex-link $n0 $n1 1Mb 10ms DropTail % $ns rtproto TPSN ;# 或者 $ns rtproto ITPSN % $ns at $n0 "rtt_set 0.001" % $ns at $n0 "rtt_set 0.001" % $ns run ``` 这里的rtt_set参数用来设置节点的时钟同步周期,可以根据需要进行调整。 6. 运行仿真程序,观察节点时钟同步的效果。在终端中输入以下命令: ``` $ ns % set ns [new Simulator] % set f [open out.nam w] % $ns namtrace-all $f % set nf [open out.tr w] % $ns trace-all $nf % set n0 [$ns node] % set n1 [$ns node] % $ns duplex-link $n0 $n1 1Mb 10ms DropTail % $ns rtproto TPSN ;# 或者 $ns rtproto ITPSN % $ns at $n0 "rtt_set 0.001" % $ns at $n0 "rtt_set 0.001" % $ns run ``` 运行完后,可以打开out.nam文件查看仿真场景的可视化界面,也可以打开out.tr文件分析仿真结果。 希望以上步骤对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值