Otcl语法总结_英语语法总结

其他工作总结 时间:2020-02-29 01:13:43 收藏本文下载本文
【www.daodoc.com - 其他工作总结】

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语法总结

JSP语法(1)——HTML注释HTML 注释 在客户端显示一个注释 语法 ] --> 例子 1 在客户端的HTML源代码中产生和上面一样的数据: 例子 2 --> 在客户端的HTML源代码中显示为:......

N4语法总结

1、~ず接续:动词未然形+ず“不„„,没„„”辞書を使わずに日本語の新聞を読むことができる。注意:ず表示否定,主要用于书面语。2、~たがる接续:动词ます+たがる“想要„„,愿意„„”......

下载Otcl语法总结word格式文档
下载Otcl语法总结.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文