如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Otcl语法总结第一篇:Otcl语法总结Otcl语法总结以下主要是在网上下载的高手总结的基础上,添加了一点自己的补充。Otcl称为ObjectTcl,它是在Tcl的基础上做了一个面向对象的封装,是一种面向对象的脚本语言。在Tcl中引入面向对象的机制,使得Tcl功能更加强大和方便使用。在Otcl中,支持继承、封装和多态性等面向对象的概念,这点与C++,smallTalk等面向对象的语言类似,但编程的风格跟C++有很大的不同,这可能使C++程序员最开始感到并不习惯。1、类的定义类的定义和创建一个实例:%ClassFruits;#创建一个类=>Fruits%Fruitsfruit;#创建一个对象的实例=>fruit%fruitinfoclass;#查看实例属于哪一个类=>Fruits%Fruitsinfoinstances;#查看对象拥有实例=>fruit关键字Class用来创建一个OTcl对象。如果想定义一个类实例,则在对象名后面加实例变量名。info命令可以单看类与对象之间的从属关系。2、构造函数与析构函数OTcl同样提供构造函数和析构函数,使类对象能够轻巧地被创建和撤销。构造函数的主要功能是创建类对象,初始化其成员变量,析构函数撤销对象。在OTcl中,析构函数名并不需要同类名相同,一般通过调用init过程来实现类的构造函数,调用的destory过程完成类的析构。Safetyinstprocinit{}{;#构造函数$selfnext;#显式调用父类的构造函数$selfsetcount0}Safetyinstprocdestroy{}{;#析构函数$selfnext}在OTcl中,构造函数和析构函数不会自动调用父类的构造函数,必须显式调用父类的构造函数和析构函数。上例中命令$selfnext就是显式调用父类的构造函数,所以$selfnext就调用父类的构造函数。同理,析构函数工作过程也是这样。3、成员函数和成员函数的定义在OTcl中,成员变量比不需要事先定义,因此在成员函数需要使用它的时候,就可以在函数体内定义。定义成员变量使用关键字instvar。在所有的成员函数中要使用已经声明了的成员变量必须使用instvar来重新声明,否则变量只是当作函数内局部变量。成员函数所有的成员变量都是基于public的。在OTcl中,采用关键字instproc来定义一个成员函数,成员函数的定义和参数的定义与Tcl中相同,只需要在前面指定类名表示这个成员函数属于哪一个类。所有成员函数也是基于public的。%Fruitsinstprocinit{args}{$selfsetinstvarcolor0;#初始化成员变量为0eval$selfnext$args}上例中,定义了类Fruits的一个init成员函数,变量$self表示对象本身,有点像C++中的this指针。next是指父类的同名方法,类似于C++中的函数覆盖。%Fruitsinstprocshow_color{}{setcolorgreenputs“thecoloroffruitis$color”}%Fruitsfruit%fruitsetcolor;#查看成员变量color的值=>0%fruitshow_color;#调用Fruits的show_color方法thecoloroffruitisgreen%fruitsetcolor=>0;#仍然是0,因为在show_color中定义的color只#是局部变量。在类的成员函数中也可以使用局部变量,作用域仅仅在成员函数中。4、继承在OTcl中所有成员函数和成员变量都是基于public属性的,这点并不像C++等面向对象的程序设计语言的多重属性机制,减小了编程的难度。子类的对象可以继承和使用基类的所有成员函数和方法,在OTcl中,关键字superclass表示类的继承。%ClassFruits;#定义父类FruitsFruitsinstprocgrow{}{$selfinstvarweightincrweightif{$weight>10}then{putsstderr“itismature!”}return{};#这里注意return的用法与C语言中的区别}%ClassApple–superclassFruits;#类Apple继承自Fruits%AppleappleAppleinstprocinit{args}{eval$selfnext$args;#调用父类的构造函数}%appleshow_color;#实际调用的是父类的show_color函数=>thecoloroffruitisgreen在OTcl中,也同样支持多重继承机制,继承关系满足有向无环图。ClassSafety;#定义类SafetySafetyinstprocinit{}