if 0 {Richard Suchenwirth 2003-11-04 - A colleague asked me for a skeleton for simple OO in Tcl, and said I should wikify it too ;) - so here it is. It basically has only one "singleton class" filetbl, and mixes generic and specific code - I marked the specific parts, so you can put your own content there. But it's simple, and maybe interesting to read. Note also that no "OO framework" is needed at all - Tcl just can by itself, if one wishes :^)
Namespaces are created with namespace eval, before we can populate them with procs or variables: }
namespace eval filetbl { variable n 0 }
#---------------------------------- Constructor
proc filetbl::create filename { variable n set fp [open $filename] ;# specific set tbl "put your data here - $n" ;# specific namespace eval [incr n] \ [list variable filename $filename fp $fp tbl $tbl] ;# variables specific set self [namespace current] interp alias {} ${self}::$n {} ${self}::dispatch $n return ${self}::$n }
#---------------------------------- Method dispatcher
proc filetbl::dispatch {this cmd args} { eval $cmd $this $args }
#-----------------------------------Destructor
proc filetbl::delete this { close [set ${this}::fp] ;# specific namespace delete $this interp alias {} [namespace current]::$this {} }
#------------------------------- Further problem-specific methods come here:
proc filetbl::test {this args} { puts [list hello $args] puts "tbl= [set ${this}::tbl]" }
#------------------------------- Self-test
if {[file tail [info script]] eq [file tail $argv0]} { set ft [filetbl::create [info script]] $ft test hello world ;# == filetbl::test $ft hello world $ft delete }
See also A little IO stack for a variation where the methods are implemented inside the dispatcher.
Category Object Orientation - Arts and crafts of Tcl-Tk programming