[Xotcl] More usage questions
Gustaf Neumann
Gustaf.Neumann@wu-wien.ac.at
Mon, 11 Dec 2000 16:26:33 +0100 (CET)
>>>>> "L" == Laurent Duperval <laurent.duperval@netergynet.com> writes:
L> Hi,
L> How do I do aggregation of objects? For example, in Java I have
L> class Foo {
L> Class1 c1;
L> Class2 c2;
L> }
L> where Class1 and Class2 are two other classes. How do I create the same
L> effect in XOTcl? I've tried a few variations but I don't get the effect I
L> want so I guess I'm doing wrong.
Dear Laurent,
XOTcl supports dynamic aggregation of (a) objects and (b) classes.
Your example resembles a static aggregation of objects (static, since
you can't change the aggregation at runtime).
For object aggregation, one can do:
Class Class1
Class Class2
Class Foo
Foo instproc init {} {
Class1 [self]::c1
Class2 [self]::c2
}
Foo f
In order to change the aggregation, one can add new objects
Object f::o
The objects form an object tree, which can be disaggregated or moved
etc. through the copy/move/destroy methods.
In addition to the aggregation of objects, XOTcl allows the
aggregation of descriptive structures (classes) as well
Class C
Class C::Foo
C::Foo instproc ...
C::Foo proc ...
which supports the same methods for disaggregation etc. like for
object aggregation.
For a more detailed discussion about aggregation in XOTcl see:
http://nm.wu-wien.ac.at/research/publications/sac.pdf
L> Also, how do you create and use private data? By this I mean data (and
L> possibly methods) which are only accessible by the class or the object.
XOTcl has no native support for private data. The idea of private data
conflicts to a certain point with the idea of introspection and
reflection. However, one can achieve a similar behavior through
refinement of the set method (and by deactivating the Tcl set
command). For the refinement you can define for example a set method
on the class level, mixins or filters.
hope this helps
best regards
-gustaf neumann