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

NAN*_*PAL 5 tcl

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

我在网上做了一些研究,并发现了这些材料

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

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

所以除了这两个参考文献,如果有人可以用额外的材料指导我,它将是辉煌的,提前谢谢

Ash*_*rni 6

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

有一个我发布到http://www.magicsplat.com/articles/oo.html的教程


Don*_*ows 5

披露:我编写了 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
Run Code Online (Sandbox Code Playgroud)

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

构造函数和方法可以像基本的 Tclproc命令一样接受参数。析构函数不能。

更复杂

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

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

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

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

您可以对oo::class自身进行子类化,以定义创建和管理对象的新方法。

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

是的,我是 TclOO 的作者,但我仍在探索我的创作可以做什么。我已经非常努力地确保它几乎可以满足您的任何要求。


Jac*_*son 3

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

对于 Tcl 8.5 及更早版本,有许多“附加”OO 软件包,这里是一个很好的起点。我过去使用过 incr_Tcl 和 XOTcl,您应该能够找到有关它们的合理数量的信息,它们的主页有在线手册、教程和示例。