有关TCL-OO的资源(TCL中的面向对象编程)

时间:2012-08-24 09:16:41

标签: tcl

我正在做实习,实习需要我学习和练习TCL - OO所以我一直在寻找TCL - OO的教程,例子和书籍,但我找不到任何东西,所以如果有人能的话,我会非常感激给我一些关于TCL的好建议 - OO。

我在网上进行了一些研究并发现了这些材料

链接: http://www.tcl.tk/cgi-bin/tct/tip/257

图书: TCL / TK开发人员指南clif Flynt第3版 - 在TCL只有2章 - OO

所以除了这两个参考文献之外,如果有人可以用额外的材料指导我,那将是非常好的提前感谢

3 个答案:

答案 0 :(得分:5)

有点晚了,但是......

我发布了http://www.magicsplat.com/articles/oo.html

的教程

答案 1 :(得分:4)

披露:我写了TclOO(在设计和测试中得到了很多其他人的帮助)。


简单的开始

TclOO允许非常简单的使用,但是当你开始使用它的大部分功能时,它会变得非常复杂。这是一个快速的样本:

# Make a class
oo::class create Example {
    variable x      ;# Not the same as [variable] in a namespace!
    constructor {} {
        set x 1
    }
    method bar {} {
        return [incr x]
    }
}

Example create foo  ;# Make an instance
puts [foo bar]      ;# Call the instance to get 2
puts [foo bar]      ;# Call the instance to get 3
puts [foo bar]      ;# Call the instance to get 4
foo destroy         ;# Kill the instance

编写一个类非常简单,上面的内容足以让你做很多事情。有一些未列出的基本功能:superclass允许您命名类的父类,它默认为oo::object,它是所有对象的类; forward允许您将方法调用分派给另一个命令,这是一种简单的委托; destructor允许你写出当对象消失时调用的东西;执行Example new会创建一个对象而不命名它,创建的对象的名称是调用它的结果;当前对象的名称是在方法中调用self的结果。

构造函数和方法可以像基本的Tcl proc命令一样使用参数。析构者不能。

更复杂

对象可以是rename d,就像任何其他Tcl命令一样,info objectinfo class下面有一大堆内省可用。您可以将特殊的每对象行为附加到oo::objdefine的任何对象。每个对象都有一个私有命名空间,您可以使用它来存储状态(上面示例中的x变量所在的位置)。

默认情况下,如果方法的名称不是以小写字母开头,则不会导出方法(严格来说,它取决于它是否与glob模式“[a-z]*”匹配)。如果您愿意,可以更改此内容。

类本身就是对象(oo::class的实例),这就是为什么它们是通过调用oo::class create创建的; 他们的构造函数将您提供的脚本传递给命令oo::define,该命令负责定义类的行为。 createnew方法只是:创建这些类的实例的类的方法(分别命名为/ unnamed)。

您可以使用多重继承。和mixins。和过滤器。并添加一个调度处理程序来处理调用未知方法的尝试。

您可以将oo::class本身子类化,以便您定义制作和管理对象的新方法。

您可以在运行时更改任何对象的类(oo::objectoo::class除外;出于理智原因,它们会被特别锁定。)

...

是的,我是TclOO的作者,但我仍然在探索我的创作可以做些什么。我已经非常努力地确保能够做出你提出的任何事情。

答案 2 :(得分:3)

您所拥有的链接是针对正在开发的Tcl 8.6所包含的新OO支持,此OO子系统上的资源可能更难找到,而且可以按原样使用,我相信它的目标是更多作为其他OO包的基础。

对于Tcl 8.5及更早版本,有一些'添加'OO包,这些的良好起点是here。我过去使用过incr_Tcl和XOTcl,你应该能够找到合理数量的信息,他们的主页上有在线手册,教程和例子。