* Smylers <[EMAIL PROTECTED]> [2003-11-03 00:40]:
> > An actually implementation agnostic name would probably be
> > something like ::SafeInheritance. (Which it isn't completely
> > though, but see below.)
>
> Possibly. But safety isn't really the point --
> Wx::StaticBoxSizer can safely be inherited from,
Well, you can't safely store your own attributes in a $self
hashref provided by a superclass; putting them in an out-of-band
data structure lets you.
Maybe that's the name you're after - Class::OutOfBandAttributes.
> That's a good reason; that would be a reason for all Perl
> objects doing all of their attributes like that (well, except
> when subclasses want to access their parents data ...).
Then the subclasses should use accessors. Just like you do in any
modern OO-aware language.
> My module is not intended to be a general implementation for
> people who want inside-out objects! Anybody wanting such a
> module will be disappointed by trying to use my module!
Indeed, as I noticed by looking at it again, it does things quite
differently. The similarity is in using $self as a hash key.
> > But I'd prefer to do
> >
> > for(@{$self->get_attr('foo')}){ ... } # A
> >
> > rather than
> >
> > for($self->attribute_list('foo')){ ... } # B
>
> Believe it or not, so would I! Because, in a 'normal' class I'd just
> write:
>
> foreach (@{$self->{foo}}) { ... } # C
>
> so merely using $self->get_attribute('foo') in place of
> $self->{foo} would seem like the most natural alternative.
> And that's what I did first.
>
> The only flaw with that approach is that it doesn't work!
You could just have people pass a default to get_attribute.
for(@{$self->get_attr('foo', [])}){ ... }
If exists() shakes its head, that's what they get.
Or maybe you want to make this a distinct get_attr_or_default().
> It isn't that I don't consider Y to be a valid problem to
> solve, nor even that I'm against the existence of a module that
> solves Y. It's just that it isn't this module.
It was mostly a misunderstanding. I didn't take a close enough
look at your code to see the difference before shooting off about
inside out objects.
Still, I don't consider it meritorious on the premise that it
isn't inside out, simply because if there was Class::InsideOut
and an someone installed it, they'd never need your module
again.. it's a pity there's nothing like it there yet because it
address 90% of the contemporary criticism of Perl-OO..
I guess in the absence of Class::InsideOut, having
Class::OutOfBandAttributes as a band-aid isn't a bad idea.
(There's a lot of orders of magnitude less useful stuff out on
CPAN..)
... Although.. just riffraffing about it on this thread gave me
enough sparks that I may well soon enough tackle the task.. :-) I
just need to bring all pieces of the puzzle that occured to me
together.
--
Regards,
Aristotle
"If you can't laugh at yourself, you don't take life seriously enough."