NS学习语法知识点;
1,变量代替 set a 100;在使用变量之前,不需要事先声明,因为解释器会在首次使用变量的时候创建它,使用变量时要在变量前加$符号。
2,命令替代 set len [expr $s *2] //替换时先执行方括号中的命令,然后使用命令的执行结果作为替换,实际上也就是命令嵌套.
3,反斜杠替代
在一些特殊的字符前加”\”来表示这个字符本身.比如说”\$”,”\[”,”\]”就是用来表示这些符号本身.
4,组合,TCL通过空白字符来分段表示不同的字符串,而使用花括号或双引号来表示把多个字符串组合在一起来形成一个字符串.区别是双引号内可以允许进行替代,而花括号内不会进行替代.
5,替代与组合的顺序,TCL在解释命令参数之前,会从左到右遍历参数,确定是否要进行组合或者替代.而组合的决定是在替代之前做出的,一个组合中嵌套多个命令,这些命令的执行顺序也是从左到右依次进行的.
三,四章与一般的面向对象语言的内容相似.
1 Otcl是TCL语言的面向对象(Object Oriented)的扩展,虽然Otcl和C++等面向对象语言的概念相同,但是具体实现和语法却存在很大的差别。
2为了进一步增强编程的灵活性,提高程序的效率,我们需要把Otcl和C++结合起来。为了能充分发挥Otcl和C++这两种面向对象语言的强大能力,我们需要一种机制,使得在C++中能直接调用Otcl解释器的功能,Otcl和C++能够互相直接操作对方定义的数据,并且C++中的类可以和Otcl中的类对应起来。这种机制就是TclCl.
3 TclCL主要是通过TclObject和TclClass两个C++类来实现的。
类TclObject是所有编译类的基类,对应的SplitObject是所有解释类的基类。每个编译对象都是当用户从解释器中创建解释对象的同时在C++类结构中产生出的影像对象。而类TclClass则包含了执行这种映象的机制。
4,变量的绑定,变量的绑定通常是当该对象初始化时在编译对象的构造函数中建立的,在对应的解释对象中可以作为一个实例变量来访问的。
然后就是第五章的NS基础需要好好学习一下.
NS中的构件库一般都是由相互关联的两个类来实现的,一个在C++中,一个在Otcl中。这种方式称为分裂对象模型。构件的主要功能通常在C++中实现,Otcl中的类则主要提供C++对象面向用户的接口。
TclClass是个纯虚类。从这个基类继承出来的类提供两个功能:构造和编译类结构互为镜像的解释类结构以及提供初始化新的TclObject的方法。每个从TclClass继承出来的类都和编译类结构中的一个TclObject的子类相关联,并能初始化所关联的新的对象。每当解释器创建一个新的解释类的时候,都会在TclClass的子类中寻找对应的关联关系,然后调用该子类中对应的编译类中的构造函数。(P47)
TclClass的构造函数除了完成这种登记工作之外,也起到了声明Otcl类的作用。
Otcl也是一种面向对象的编程语言,其编译器是由C++编写的,它也具有自己独有的一些语法命令。有它自己与C++完全不同的类定义方式,它也可以按照自己特有的语法命令格式来写一些变量定义以及函数定义。(P40)
Null这个Agent,它通常和UDP配合使用,作为数据的接收者。
类Tcl封闭了Otcl解释器的实例,并提供了访问解释器的方法。当NS一开始运行的时候,Tcl类即被实例化了。P52,这里面也是在C++类中调用Tcl方法的途径。
Tcl用换行或者;表示命令结束。
Tcl中的关键字是由proc命令来定义的。在Otcl中,定义成员函数是以类名加上instproc来定义的。
构件的主要功能通常是在C++程序中实现的,Otcl中的类则主要是提供C++面向对象用户的配置接口。
我们把分裂对象模型中Otcl类称为解释类,把对应的C++类称为编译类,并称它们互为”影像类”。同样地,称Otcl对象为解释对象,称C++对象为编译对象,并称这两个对象互为”影像对象”
NS维护了一个哈希表,为C++类结构中的每个TclObject都保存了一个引用,从而可以快速地找到这些对象。
P107 移动节点的组成是我所要关注的重点内容。