AW: [Q] mixin pattern - how to use an alternate Behavior
for Class
Rob Withers
rwithers12 at mediaone.net
Tue Jan 29 13:12:25 UTC 2002
At 10:26 AM 1/28/2002, you wrote:
>Rob,
>
>What an interesting problem! As Nathanael has already shown there are
>various implications when you start breaking the parallel hierarchy. I
>think that (probably) the best you could do for a practical solution
>would be to factor out the recompilation behavior. E.g., one possible
>solution would be that MetaClass itself knows what kind of compiler to
>use and you can therefore redirect queries to the "meta meta class" (now
>it's getting funky ;-)
>
>Incidentally, once you're at this level you can do whatever you want.
>There is no reason for Mumble class to be an instance of MetaClass - the
>hierarchy restrictions doesn't go that far.
Andreas,
I had to go for another couple of laps around the track before I really saw
what you meant. I could have my MixinMetaclass, which has an instance
variable holding my contextClass. I could have the various '#compile...'
methods be overridden in Class to do a 'self class thisClassCompile:...'
(what is the opposite of meta? ;) and implement the appropriate
activities there that I could control with different metaclass classes. :)
Is this a reasonable change to the system?
Cheers,
Robert
> > -----Ursprüngliche Nachricht-----
> > Von: squeak-dev-admin at lists.squeakfoundation.org
> > [mailto:squeak-dev-admin at lists.squeakfoundation.org] Im
> > Auftrag von Rob Withers
> > Gesendet: Montag, 28. Januar 2002 00:32
> > An: squeak-dev at lists.squeakfoundation.org
> > Betreff: [Q] mixin pattern - how to use an alternate Behavior
> > for Class
> >
> >
> > 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
|