guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Delegation in goops?


From: Neil Jerram
Subject: Re: Delegation in goops?
Date: Sat, 11 Feb 2006 11:34:14 +0000
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

Alan Grover <address@hidden> writes:

> Does anybody have a solution to implement delegation in goops?
>
> I have an object that implements the full behavior of interest. Say it's
> an employee object.
>
> For whatever perverse reason, which I assure you is reasonable, I want
> to wrap the employee in another object. And, for the most part, it will
> act just like the employee, except in a few places. Let's say I want to
> have the employee masquerade as the CEO. The wrapper would implement a
> few methods like "title", "salary", etc. And, specifically, the wrapper
> doesn't need to know what all the other methods are, or what might be
> added later.
>
> Seems like a job for delegation.

Sounds like a job for inheritance to me.  But I'm sure you must have
thought of that and rejected it already, so can you explain why?  That
will probably throw some more light on your objective and thinking.

> So, I looked at the goops MOP.
>
> "compute-applicable-methods" would let me decide when to delegate or
> not. But, "next-method" is implemented in such a way that it doesn't
> call "compute-applicable-methods". Though not perfectly clear to me why,
> next-method returned "no-method".

The functioning of next-method is based on inheritance.

> "no-applicable-method" assumes that you will throw an exception. It does
> not let you substitute a method of your choosing. Specifically, it's
> result is discarded, and it appears to be approximately in the same
> place as "compute-applicable-methods" so you would get the same problems
> as above.

But if you could customize no-applicable-method to return a just in
time method, you can equally well define your fallback method using
define-method, can't you?  (Using <top> to ensure that it matches all
possible arg types.)  So I don't think this is a significant
restriction.

Regards,
        Neil





reply via email to

[Prev in Thread] Current Thread [Next in Thread]