<!doctype html public "-//W3C//DTD W3 HTML//EN">
<html><head><style type="text/css"><!--
blockquote, dl, ul, ol, li { padding-top: 0 ; padding-bottom: 0 }
 --></style><title>Re: Good LISP steals?</title></head><body>
<div>At 1:14 AM -0700 4/17/02, Brian T. Rice wrote:</div>
<blockquote type="cite" cite><br></blockquote>
<blockquote type="cite" cite>Not at all. My final note is about the
tools we use, which relates to the *DUM DA DUM* CLOS MOP that everyone
gets so excited about when they discover it (I definitely did, but
this was in '94). My biggest idea has been that the menus don't really
reflect any kind of conceptual structure, which only when I just read
your post did it (recently) occur to me that it specifically relates
to the lack of a MOP. What I mean is that we could include things like
objects for reifying slots themselves, or separate the object
structural information from itself (Kent Beck in the back of the
_Ordered Collections_ book recommends a MetaObject refactoring of just
this kind). (Right now, you can use such methods on any object to
&quot;hack&quot; in it, breaking abstraction.) This isn't as necessary
though as making menus that support the concepts, so that I can manage
slots by clicking on a list(Morph) of slots in the current class and
get more than &quot;methods calling this instVar&quot;. This is just a
small example that comes to mind, though. I also just recalled that
MetaObjects can be used to encapsulate both the dependents mechanism
and the mutation protection I mentioned above.</blockquote>
<blockquote type="cite" cite><br></blockquote>
<div><br></div>
<div>The biggest win of a MOP, IMHO, is that it allows you to do what
amounts to aspect-oriented programming without having to build a lot
of aspect-oriented tools and frameworks.&nbsp; For instance, having a
reified Metaclass lets you add or modify the system behavior of
methods without creating new subclasses and modifying the
application-level code of the methods in the subclass. You can replace
the &quot;DoesNotUnderstand&quot; proxy hack, and not have to either
write a lot of delegation methods or build a tool to generate
them.</div>
<div><br></div>
<div>One of the nicest examples of this I've seen was in a paper at
OOPSLA '89, in which the author showed how to make objects persistent
using MOP:</div>
<div><br></div>
<blockquote>Andreas Paepcke. PCLOS: Stress Testing CLOS - Experiencing
the Metaobject Protocol. In Proceedings of the Conference on
Object-Oriented Programming Systems, 1990.
http://www-db.stanford.edu/~paepcke/shared-documents/pclosmeta.ps</blockquote
>
<blockquote><br></blockquote>
<div><br></div>
<x-sigsep><pre>-- 
</pre></x-sigsep>
<div>&quot;The joke is over when the head falls off.&quot; - Scotts'
proverb<br>
=========<br>
Bruce Cohen<br>
5908 SW California St.<br>
Portland, OR 97219<br>
brucecohen@qwest.net</div>
</body>
</html>