ExtendedObjectTcl provides MixIn''''''s which are classes that can be mixed into other classes or objects dynamically. This has the effect of being able to add methods to another class or object outside of the class hierarchy. I have found that mixins allow the separation of "object abilities" or groups of common methods out of the class definition. Since ExtendedObjectTcl is fully dynamic mixins can be added or removed from a class or object at will. This allows the object to move through its life and acquire and lose different abilities as it goes. Therefore much of my code has evolved into: Class Some''''''Ability Some''''''Ability instproc someMethod { } { ... } Class Something Something instmixin Some''''''Ability Something parameter { varA varB varC } This code creates the class Something with the method someMethod. At first this is strange, but it allows the class hierarchy to reflect the true nature of the OO design and the abilities can be added on after. This is similar to AspectOrientedProgramming, but it seems that all methods become part of some mixin. -- BenThomasson ---- The code snippet above implies that the means by which Some''''''Ability is implemented are always the same, but this may not be true. For instance (illustrated in a CeePlusPlus-ish hodgepodge of pseudocode): struct FmTunerI''''''nterface { virtual void Set''''''Frequency(float megahertz) = 0; virtual void Select''''''Preset(int button_index) = 0; }; class AnalogFmT''''''uner : public FmTunerI''''''nterface { public: void Set''''''Frequency(float megahertz) {/* Rotate variable capacitor to appropriate capacitance to tune circuit */} void Select''''''Preset(int button_index) {/* Use clever arrangement of levers and pulleys to Set''''''Frequency() mechanically */} }; class DigitalFmT''''''uner : public FmTunerI''''''nterface { public: bool Set''''''Frequency(float megahertz) {/* Program appropriate digital value into VCO to mix with input to generate IF */} bool Select''''''Preset(int button_index) {/* Look up megahertz in table[button_index] and call Set''''''Frequency() */} }; ...the point being that the ability to implement a particular feature doesn't mean the feature is necessarily implemented in the same way. -- MikeSmith ''But wouldn't you use normal method inheritance for that?'' -- KristofferLawson