Metaclasses and co.
Noury Bouraqadi
bouraqadi at ensm-douai.fr
Mon Feb 20 21:16:30 UTC 2006
Hi,
Remember there is MetaclassTalk
(http://csl.ensm-douai.fr/MetaclassTalk) that provides explicit
metaclasses and other reflective facilities for Squeak. You can define
your own metaclasses and use them in order to have classes with the
following protocole :
Object subclass: #Person
instanceVariableNames: 'name age '
classVariableNames: ''
poolDictionaries: ''
category: 'MetaclassTalk-Examples'
metaclass: MyMetaclass
One intersting application of explicit metaclasses I did is to extend
Smalltalk with mixin-based inheritance.
However, neither implicit metaclasses (with parallel hierarchies) nor
explicit metaclasses are totally satisfactory. Actually, there should
be a mix of both (see my papers on metaclass compatibility OOPSLA98,
ESUG2003).
Noury
Le 16 févr. 06, à 19:37, Bergel, Alexandre a écrit :
> Today I spend some time to read and understand an old mail from
> Andreas
> (http://lists.squeakfoundation.org/pipermail/squeak-dev/2005-October/
> 096370.html) about having a parallel metaclass hierarchy. I really
> like this.
>
> Thanks Andreas!!
>
> I wrote a short test to understand it, I think it might interest some
> of you:
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> testClassCreation
> "self debug: #testClassCreation"
> | mcls cls |
>
> mcls := MyMetaclass
> subclass: #MC
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'MyMetaClassesGenerated'.
> cls := MyObject
> subclass: #C
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'MyMetaClassesGenerated'
> metaclass: mcls.
> classCreated addAll: {mcls . cls}. "Used in teardown to remove the
> classes"
>
> mcls compile: 'foo ^20'.
>
> self assert: (cls new class == cls).
> self assert: (cls class name = 'C class').
> self assert: (cls class class == mcls).
> self assert: (cls class class class class == MyMetaclass).
> self assert: (cls class soleInstance == cls).
>
> self assert: (cls canUnderstand: #foo) not.
> self assert: (cls class respondsTo: #foo).
> -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>
> Cheers,
> Alexandre
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel http://www.cs.tcd.ie/Alexandre.Bergel
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
--------------------------------------------------------------
Dr. Noury Bouraqadi - Enseignant/Chercheur
Ecole des Mines de Douai - Dept. G.I.P
http://csl.ensm-douai.fr/noury
European Smalltalk Users Group Board
http://www.esug.org
Squeak: an Open Source Smalltalk
http://www.squeak.org
--------------------------------------------------------------
More information about the Squeak-dev
mailing list
|