Zoo’s Meta-Model

As I’ve been working with meta-models a lot in the last week, I thought I’d just draw one for my idea of “Zoo”:http://www.zefhemel.com/archives/2005/05/01/zoo-a-still-imaginary-net-scripting-language. So, I present to you: Zoo’s current meta-model:

Zoo's Meta-Model

Most of you will ask yourself what the… something… a meta-model is. In short it comes down to this: think of an object-oriented programming language, for example Java. What are the main players in Java? There are for instance objects, classes, packages and methods. How do these relate to each other? Well, a package contains multiple classes. A class contains multiple methods. A class creates objects. So the (simplified) meta-model of Java looks like this:

Java's Meta-Model

A meta-model describes how a model works. A meta-model contains data about a model. Just like meta-data contains data about data.

Is this useful at all? Yes. As a matter of fact, it maps quite well on how you implement it. To show this, have a look at a part of my class diagram for Zoo:

Java's Meta-Model in Classes

(The [string attr] : ZooAccessor attribute is a hashtable that maps attribute names to their values.)

I know. Knowing this must have an amazing impact on your life. Wait until you hear about meta-meta-models. Yes, really, they exist. Go check the “UML specification”:http://www.omg.org/technology/documents/formal/uml.htm.