Otcl语法总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“英语语法总结”。
Otcl语法总结
以下主要是在网上下载的高手总结的基础上,添加了一点自己的补充。
Otcl称为Object Tcl,它是在Tcl的基础上做了一个面向对象的封装,是一种面向对象的脚本语言。在Tcl中引入面向对象的机制,使得Tcl功能更加强大和方便使用。在Otcl中,支持继承、封装和多态性等面向对象的概念,这点与C++,smallTalk等面向对象的语言类似,但编程的风格跟C++有很大的不同,这可能使C++程序员最开始感到并不习惯。
1、类的定义
类的定义和创建一个实例:
%Cla Fruits;#创建一个类
=>Fruits
%Fruits fruit;#创建一个对象的实例
=>fruit
%fruit info cla;#查看实例属于哪一个类
=>Fruits
%Fruits info instances;#查看对象拥有实例
=>fruit
关键字Cla用来创建一个OTcl对象。如果想定义一个类实例,则在对象名后面加实例变量名。
info命令可以单看类与对象之间的从属关系。
2、构造函数与析构函数
OTcl同样提供构造函数和析构函数,使类对象能够轻巧地被创建和撤销。构造函数的主要功能是创建类对象,初始化其成员变量,析构函数撤销对象。在OTcl中,析构函数名并不需要同类名相同,一般通过调用init过程来实现类的构造函数,调用的destory过程完成类的析构。
Safety instproc init {} {;#构造函数
$self next;#显式调用父类的构造函数 $self set count 0
}
Safety instproc destroy {} {;#析构函数
$self next
}
在OTcl中,构造函数和析构函数不会自动调用父类的构造函数,必须显式调用父类的构造函数和析构函数。上例中命令$self next就是显式调用父类的构造函数,所以$self next就调用父类的构造函数。同理,析构函数工作过程也是这样。
3、成员函数和成员函数的定义
在OTcl中,成员变量比不需要事先定义,因此在成员函数需要使用它的时候,就可以在函数体内定义。定义成员变量使用关键字instvar。在所有的成员函数中要使用已经声明了的成员变量必须使用instvar来重新声明,否则变量只是当作函数内局部变量。成员函数所有的成员变量都是基于public的。在OTcl中,采用关键字instproc来定义一个成员函数,成员函数的定义和参数的定义与Tcl中相同,只需要在前面指定类名表示这个成员函数属于哪一个类。所有成员函数也是基于public的。
%Fruits instproc init {args} {
$self set instvar color 0;#初始化成员变量为0 eval $self next $args
}
上例中,定义了类Fruits的一个init成员函数,变量$self表示对象本身,有点像C++中的this指针。next是指父类的同名方法,类似于C++中的函数覆盖。
%Fruits instproc show_color {} {
set color green
puts “the color of fruit is $color”
}
%Fruits fruit
%fruit set color;#查看成员变量color的值=>0
%fruit show_color;#调用Fruits的show_color方法the color of fruit is green
%fruit set color
=>0;#仍然是0,因为在show_color中定义的color只#是局部变量。在类的成员函数中也可以使用局部变量,作用域仅仅在成员函数中。
4、继承
在OTcl中所有成员函数和成员变量都是基于public属性的,这点并不像C++等面向对象的程序设计语言的多重属性机制,减小了编程的难度。子类的对象可以继承和使用基类的所有成员函数和方法,在OTcl中,关键字supercla表示类的继承。
%Cla Fruits;#定义父类Fruits
Fruits instproc grow {} {
$self instvar weight
incr weight
if {$weight > 10} then {
puts stderr “it is mature!”
}
return{};#这里注意return的用法与C语言中的区别 }
%Cla Apple –supercla Fruits;#类Apple继承自Fruits %Apple apple
Apple instproc init {args} {
eval $self next $args;#调用父类的构造函数
}
%apple show_color;#实际调用的是父类的show_color函数 =>the color of fruit is green
在OTcl中,也同样支持多重继承机制,继承关系满足有向无环图。
Cla Safety;#定义类Safety
Safety instproc init {} {;#构造函数$self next$self set count 0
}
Safety instproc put {thing} {;#定义成员函数
$self instvar count
incr count
$self next $thing;#显式调用父类的put函数 }
Safety instproc get {} {;#定义成员函数
$self instvar count
if {$count == 0} then {return {empty!}}
incr count-1
$self next;#显式调用父类的get函数 }
Cla Stack;#定义类Stack
Stack instproc init {} {;#构造函数
$self next;#调用父类的构造函数
$self set things{};#显式调用父类的set函数 }
Stack instproc put {thing} {;#定义成员函数 $self instvar things;#定义成员变量
set things [concat [list $thing] $things]
return $thing
}
Stack instproc get {} {;#定义成员函数get $self instvar things
set top [lindex $things 0]
set things [lrange $things 1 end]
return $top
}
Cla SafeStack –supercla {Safety Stack};#继承
SafeStack s;#生成对象
s put toast
=>toast;#调用成员函数put
s get
=>toast;#调用成员函数get
s get
=>empty!
s destroy
=>{};#析构函数
上面的例子中,类SafetyStack从类Safety和类Stack多重派生而来,继承顺序是根据关键字supercla后的类名排列顺序,从左到右,即最左边最先继承。类SafeStack首先继承了父类Safety,从而语句s get首先调用了Safety的get函数,由于Safety中的get函数调用了self next,也就是调用了更高一个类Stack的get函数。可以用info命令查看类的继承关系:
%SafeStack info heritage;#差看类SsfeStack的继承关系 =>Safety Stack Object
在OTcl中,子类可以重写父类的成员函数,在成员函数中使用next命令来覆盖父类中同名的成员函数。
%Fruits instproc grow {} {
$self instvar weight
if {$weight
return infantility
} elseif {$weight >= 5 && $weight
return growning
}else{
return mature
}
}
%Apple instproc grow{} {
$self instvar toppings
set t [$self next]
foreach I $toppings {
lappend t $i
}
return $t
}
%Apple instproc rename {args} {
$self instvar name
set name [concat $name $args]
return $name
}
%Apple in_apple
=>in_apple
%in_apple grow
%in_apple rename apple
=>apple
%in_apple grow
=>infantility apple
上例中,%in_apple rename返回传进来的参数apple。当再次调用%in_apple grow,首先把父类中返回来的参数infantility赋值给t,并在t后串接上apple,然后把整个字符串返回。
OTCL是ObjectTCL,引入了类和对象的概念。
1)类和对象的定义:关键字Cla。如Cla Animal;Animal animal_1;可以通过info命令查看类和对象之间的关系。例如:info+cla(查看类)、+instance(查看对象)、+supercla(查看父类)、+heritage(查看继承树)
2)成员变量和函数的定义:Otcl中定义成员函数采用关键字instproc,定义成员变量采用关键字instvar。Otcl中成员变量并不预先定义,在成员函数中定义再使用,因此,当其他成员函数使用该变量时需重新申明。如
Animal instproc run {speed} {
$self instvar speed_
set speed_ $speed
puts “Animal run with speed $speed_”
}其中$self的含义和C++中的this类似
3)对象的初始化和销毁:采用init函数来进行初始化,destroy函数来完成析构过程。如
Animal instproc init {args} {
$self set speed_ 0
eval $self next $args
}
Animal instproc destroy {} {
puts “zap!”
$self next
}其中next函数的意义是父类中的同名函数
4)继承:用到supercla关键字。Otcl中成员函数和变量的属性均是
public,可以被子类继承。Otcl中所有的类都继承自Object类或它的后代。Otcl中子类也可以重写父类的成员函数。Otcl中所有成员函数都是虚函数,并且子类的成员函数同样使用next关键字来调用父类被覆盖的函数。
1.分词短语和关系从句转换die sich verteidigenden Soldaten -- die Soldaten, die sich verteidigen die anzuerkennende Leistung – die Leistung, die anzuerkennen is......
汉语简介总结与简评杨龙英四 20091310421中国人通常自称炎黄子孙,炎黄是指上古床说中的炎帝和黄帝。中国第一个朝代的名称是夏,因“华”(意思是“花”)与夏谐音,中华文明又被称作......
一.词汇 ⑴ 单词1.介词:in, on, under, behind, near, at, of1).in表示"在……中", "在……内"。例如: in our cla 在我们班上in my bag 在我的书包里in the desk 在桌子里......
JSP语法(1)——HTML注释HTML 注释 在客户端显示一个注释 语法 ] --> 例子 1 在客户端的HTML源代码中产生和上面一样的数据: 例子 2 --> 在客户端的HTML源代码中显示为:......
1、~ず接续:动词未然形+ず“不„„,没„„”辞書を使わずに日本語の新聞を読むことができる。注意:ず表示否定,主要用于书面语。2、~たがる接续:动词ます+たがる“想要„„,愿意„„”......