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

关于TCL-OO(TCL中的面向对象编程)的资源,tcl,Tcl,我正在实习,实习要求我学习和实践TCL-OO,所以我一直在寻找有关TCL-OO的教程、示例和书籍,但我找不到任何东西,因此如果有人能给我一些关于TCL-OO的好建议,我将不胜感激 我在网上做了一些研究,发现了这些资料 链接: 书籍: clif Flynt编写的TCL/TK a开发人员指南第三版-只有两章介绍TCL-OO 因此,除了这两个参考资料之外,如果有人能给我提供额外的资料,那将是非常棒的。提前谢谢你的链接是关于Tcl 8.6中包含的新OO支持,它仍在开发中,这个OO子系统的资源很难找到,

我正在实习,实习要求我学习和实践TCL-OO,所以我一直在寻找有关TCL-OO的教程、示例和书籍,但我找不到任何东西,因此如果有人能给我一些关于TCL-OO的好建议,我将不胜感激

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

链接:

书籍: clif Flynt编写的TCL/TK a开发人员指南第三版-只有两章介绍TCL-OO


因此,除了这两个参考资料之外,如果有人能给我提供额外的资料,那将是非常棒的。提前谢谢你的链接是关于Tcl 8.6中包含的新OO支持,它仍在开发中,这个OO子系统的资源很难找到,虽然它可以被使用,但我认为它更适合作为其他OO包的基础。p> 对于Tcl 8.5和更早版本,有许多“附加”OO包,这是一个很好的起点。我过去使用过incr_Tcl和XOTcl,你应该能够找到关于它们的合理数量的信息,它们的主页上有在线手册、教程和示例。

披露:我编写了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
编写一个类非常简单,上面的内容足以让您做很多事情。有几个基本特性没有列出:
超类
允许您命名类的父类,它默认为所有对象的类
oo::object
forward
允许您将方法调用分派给另一个命令,这是一种简单的委托<代码>析构函数允许您编写对象离开时调用的内容;执行
Example new
将生成一个对象而不命名,所创建对象的名称是调用该对象的结果;当前对象的名称是在方法内调用
self
的结果

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

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

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

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

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

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

您可以在运行时更改任何对象的类(除了
oo::object
oo::class
之外;出于安全考虑,它们被特别锁定)

是的,我是TclOO的作者,但我仍在探索我的创作能做些什么。我已经尽了最大努力确保它几乎可以满足您的任何要求。

有点晚了,但是


有一篇教程我发到了

非常感谢您回答我的问题,非常感谢您的帮助,我会随时发布我的进度(即,如果我遇到一些有趣的事情,并发现它可以让很多像我一样的人受益)Donal先生,我浏览了您的个人资料、您与Tcl的关系以及您对Tcl OO的贡献,我知道,既然Tcl/tk是一个开源项目,你只能在有时间和机会的时候做你能做的事情,但是你所在社区的任何人都不可能主动编写一个非常简单简洁的教程,就像一本15页的入门书,介绍如何使用TCL-OO以及如何有效地使用手册中的资源一样。@NANDAGOPAL无需大喊大叫(好吧,输入大写字母)。问题是我离材料太近了;我想我看到了太多的细节,无法写一篇关于它们的好教程。(这是我在工作中与一些人就开发人员是否应该编写用户文档的反复争论。)尽管如此,我还是很乐意帮助其他人编写教程。我相信Clif Flynt即将出版的书中会有大量关于TclOO的内容,但尚未出版。对不起,先生,恕我直言,作为一名学生和一名应届毕业生,我对开源社区有着最高的敬意,实际上我并不是有意要大喊大叫,我只是想强调我的要求的本质,我非常抱歉,我的意思是任何不尊重(有意和无意),我将非常高兴看到一个关于TCL-OO的指南出来。我真的很期待从这个社区和你们这样的先驱者那里学到很多东西。