[Xotcl] Re: [Xotcl] Real value of meta-class

Uwe Zdun uwe.zdun@uni-essen.de
Tue, 30 Jan 2001 13:40:11 +0100


On Monday 29 January 2001 18:51, Rick Hedin wrote:
> Greetings.
>
> I worked through the example in the "Meta-Classes" section of the XOTcl
> tutorial.  The result is the same whether myMetaClass is a metaclass or
> not. If you define it
>
> 	Class myMetaClass
>
> rather than
>
> 	Class myMetaClass -superclass Class

this is just a syntax example ... take a look at the next program example
in the tutorial:

  Class NoClassInfo -superclass Class
  ...<snip>...
  NoClassInfo Agent

you can see that "Agent" is of the class "NoClassInfo". Therefore, 
changes on myMetaClass don't affect the Agent class.

If you do something, like:
  
  Class NoClassInfo
  ...<snip>...
  NoClassInfo Agent

this has an effect on "Agent" -> now it is not a class anymore, but an object 
(and you've restricted the Object->info abilities).

Try now:

  Agent myAgent

which would in the first case, call:

  Agent create myAgent

and then create an object. Since Agent is not a class, you cannot derive 
objects from it. Therefore, you now receive an error message:

  unable to dispatch method 'myAgent'

you will obtain the same result for any other class feature, like

  myAgent instproc ...
  myAgent instmixin ...

the sense of a metaclass is just to distinguish object and class
features ... for class object and class
features are available, for objects just the object features, like
"proc", "mixin", etc. are available.

>
> then
>
> 	Agent info superclass
>
> gives the same result.
>
> I understand, in theory, that one wants to derive a class from some "more
> basic" entity, but so far it seems to me that I can achieve everything I
> want to achieve by starting with a class, not a metaclass, and modifying
> it.
>
> Is there an example where being a metaclass results in different output?
>

Metaclasses give the programmer access to the class features. One important
class feature is how the language defines objects (in the Class->create and
Class->alloc methods). You require access to metaclasses only if you want to 
mainpulate or extend the class features. Sometimes you may also want to 
restrict certain class features, as for instance when you wrap C++ (or ITcl) 
classes, which are non-dynamic. In most langauges without meta-classes or 
meta-object protocolls you don't have access to these features. Thus most 
often you cannot define a customized class system behavior in those languages.

Regards,

Uwe

-- 
Uwe Zdun
Specification of Software Systems, University of Essen
Phone: +49 201 81 00 332, Fax: +49 201 81 00 398
zdun@xotcl.org, uwe.zdun@uni-essen.de