There's a blog post floating around the web[1] on how Closures + Lambda make up all the
OO programming tools you'll ever want or need. Now this is a long running theme[2] in the Lisp family and really is a testament to how flexible Common Lisp (or any other language which shares these traits) is
.... however ....
the majority of these are for pedagogical purposes[3] and should never be seriously
compared with a fully fledged object system. It's seems to be in vogue to consider
CLOS elephantine[4] and complex but the truth is that at the surface
CLOS is wonderfully simple.
We have classes with slots (read instance variables) created with
defclass, we create
instances of these classes with make-instance. We access (and change) the slots of these
instances using slot-value and create methods for the classes using
defmethod.
Simple, yes? Not complex or elephantine, Yes?
You can read more of course (all in the
CLHS) and discover the object initialization protocol
and how the classes of objects can be changed on the fly, you can find out how to customize
the initialization of your classes and add
accessors to your slots.
You can dig deeper and you'll discover the MOP and discover how to change the behaviour of
slot access and class definition.
But remember that you do not need to understand any of this in order to
define classes, create instances, access slots and define methods!
So next time you are rolling your own Object System because someone considers
CLOS too slow,
or too large, stop and give
CLOS a try, you may just like it.
--------------------
[1] : See
here and
here .
[2] : And is implemented in
PAIP and
On Lisp among others.
[3] : For a full
OO implementation in CL see
KR which is a prototype based object system with
valuepropogation.
[4] : Or big, slow[5] or
klunky[5] : This myth has officially been debunked.