[Q] mixin pattern - how to use an alternate Behavior for Class

ducasse ducasse at iam.unibe.ch
Mon Jan 28 07:06:57 UTC 2002


Hi Rob  

we are working on mixin (not like yours in fact) mixin are not only about
compiling in a different scope ;)

I think that we have kind of similar questions ;)
Nathanael will certainly get ion contact with you.

Stef

> I am trying to create a mixin class which compiles it's methods 'in' the
> scope of a different class.  One way to go would be to have class side
> #compile methods which switches the class used to compile the method in.  I
> would need a classVariable to hold this contextClass and off we go.
> 
> An alternative mechanism that I am exploring, is to have a different
> subclass of ClassDescription (or Class), which has an instance method
> contextClass, and the compile methods are overridden on the instance side
> of this MixinClass.
> 
> So I have a MixinClass, which has roughly identical protocol to Class and I
> am now adding a set of methods to ClassBuilder to create this class
> (instance of MixinClass).  The problem is that I am not sure what to set
> the superclass of the Metaclass instance too.  (1b) If I leave it alone, my
> class is an instance of Class.  (1a) If I force it to MixinClass, then my
> class is an instance of MixinClass and my instance methods are ok, but the
> class-side confuses me a little - I have broken the metaclass superclass
> inheritence.  Do I really need to have a MixinProtoObject to root
> everything with MixinClass class as the first metaclass superclass, or can
> I stitch myself into a different point in the hierarchy and still have my
> class be an instance of MixinClass, rather than Class, but maintain the
> correct metaclass inheritence?  I believe it all relies on the
> implementation of 'meta new', especially with Interpreter>>formatOfClass:
> aClass, where aClass is a metaclass instance.
> 
> Cheers,
> Rob
> 
> 
> 
> 1a) meta _ Metaclass new.
> meta
> superclass: MixinClass
> methodDictionary: MethodDictionary new
> format: MixinClass format.
> newClass _ meta new.
> 
> 
> 1b) meta _ Metaclass new.
> meta
> superclass: newSuper class
> methodDictionary: MethodDictionary new
> format: MixinClass format.
> newClass _ meta new.
> 
> 
> 
> 2) newClass
> superclass: newSuper
> methodDictionary: MethodDictionary new
> format: newFormat;
> contextClass: aContextClass;
> setInstVarNames: instVars;
> organization: nil.
> ^newClass
> 
> 




More information about the Squeak-dev mailing list