Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Re: perspective and object-disorientation

by Ctrl-z (Friar)
on Jan 19, 2003 at 21:57 UTC ( [id://228241]=note: print w/replies, xml ) Need Help??


in reply to Re: perspective and object-disorientation
in thread perspective and object-disorientation

I see what you are saying. I think the Employee/Artist example i gave doesn't really hold up to what I was trying to express, but was more convenient than getting too contrived on a subject Im not 100% on. (not 25% on!)

So far I have been using a similar setup to what you suggest. Im not too clued-up on patterns, but it seems to be like the hasa relationship suggested by others?.
I find this kind of "orientation" simple to manage - it is DOM-ish and familiar. All objects inherit a common base-class for general introspection and delegation , then rely on their own class to provide their "individuality".

The problem i find with this, is that an objects "individuality" is purely based on its data - it is difficult to have dynamic behaviour, sensitive to both the environment the object is created in, and the relationship between (for example) caller() and $self at any given time.
If @ISA were an instance variable, then this could be realistically implemented. The class may provide a default - but time, context and environment could mutate it appropriately. As it stands, @ISA is per class, so the only way I can think of to hack it, would be something like
sub callMethod { my $self = shift; my ($method, @args) = @_; # pseudo-code only ;) (defined( $self->{buddies}->{ caller() } ) ) ? unshift @ISA, "Behaviour::Informal" : unshift @ISA, "Behaviour::Guarded" ; my @return = $self->$method(@args) if $self->can($method); # hide what we just did from the rest of our class! shift @ISA; return @return; }

I realise the limitations with the above code, but i guess its somewhat less abstract than the pseudo-existential waffle of "perspectives" ;)
Im pretty much out of my depth here, so perhaps I am just thrashing in comp.sci terminology?

Replies are listed 'Best First'.
Re: Re: Re: perspective and object-disorientation
by pdcawley (Hermit) on Jan 19, 2003 at 22:32 UTC
    But caller doesn't do what you want. Try:
    sub respond_to_message_from { my $self = shift; my($message, $sender); my $attitude = $self->appropriate_attitude_to($sender); $attitude->respond_to_message_from($self, $message, $sender); }
    This avoids monkeying with @ISA, which can only be a good thing. $attitude is an example of the Strategy Pattern. Note that I've not got an @args parameter to this function, instead I'd expect them to be wrapped up in teh $message object (which can be thought of as an example of the Argument Object pattern.
      ah!

      I realised the insufficiency of using caller() in that way - but your example is still great. Having the  $self->appropriate_attitude_to($sender) return an object is really...neat.

      Thanks, I'll play around with this

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://228241]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2024-04-19 15:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found