1This is stooop (a Simple Tcl Only Object Oriented Programming scheme) 2version 4.2. Stooop is implemented in a single sourceable file and 3uses simple techniques to provide object orientation to the great Tcl 4language. 5 6If you know C++ or Java, stooop will be easy to use for you. Using the 7familiar class, new, delete and virtual keywords and a few coding 8conventions, you can start object oriented Tcl code right away, as the 9following simple example shows: 10 11 12source stooop.tcl 13namespace import stooop::* 14 15class circle { 16 proc circle {this canvas diameter} { 17 set ($this,diameter) $diameter 18 set ($this,canvas) $canvas 19 set ($this,id) [$canvas create oval 0 0 $diameter $diameter] 20 } 21 proc ~circle {this} { 22 $($this,canvas) delete $($this,id) 23 } 24 proc move {this x y} { 25 $($this,canvas) move $($this,id) $x $y 26 } 27} 28 29pack [canvas .canvas] 30set c [new circle .canvas 50] 31update; after 1000 32circle::move $c 10 10 33update; after 1000 34delete $c 35 36 37Stooop supports single and multiple inheritance, data encapsulation 38(all member data is public), dynamic binding, nested classes, object 39copy, runtime type identification, optional runtime procedure and data 40access checking as well as tracing. 41 42As stooop is entirely written in Tcl, it will run on all Tcl supported 43platforms, including Windows and the Mac Intosh, if you have Tcl 44version 8.3 or above. 45 46The class, new, delete, virtual and classof commands are implemented 47as Tcl procedures. 48 49Stooop was implemented with a constant concern for performance. Member 50data is stored in Tcl associative arrays, which are best for random 51data access. Classes are implemented as namespaces to improve 52encapsulation and reduce naming interferences. Object oriented helper 53code is kept as small and as efficient as possible. Typically, only a 54couple of Tcl lines are added to a member procedure definition. 55Program startup time will be slightly increased due to some class and 56member procedures preprocessing, but runtime overhead is kept to a 57strict minimum. Use of object oriented techniques may actually improve 58the performance of your code. 59 60A full HTML documentation, simple demonstration script, graphical 61demonstration with composite pattern and test files are provided. You 62may also run the test suite and look at the test scripts for 63examples. There is also a utility for creating packages (in the Tcl 64sense) from stooop compatible class files. 65 66There is a companion package to stooop: scwoop (a Simple Composite 67Widget Object Oriented Package). Scwoop is implemented in a single 68sourceable file and uses simple techniques to provide composite widget 69(also known as mega widget) support to the great Tk widget library. 70Moodss (a Modular Object Oriented Dynamic SpreadSheet) implemented 71with stooop, scwoop, tkTable and BLT is also available on my website 72(at http://jfontain.free.fr/). 73 74Whether you like it (or hate it), please let me know. I would like to 75hear about bugs and improvements you would like to see. I will correct 76the bugs quickly, especially if you send me a test script. 77 78Copyright (c) 2001 by Jean-Luc Fontaine <jfontain@free.fr>. 79This code may be distributed under the same terms as Tcl. 80