Seems like you are thinking along the lines of making Parrot support 
Prevayler-style

 http://www-106.ibm.com/developerworks/web/library/wa-objprev/index.html

stuff naturally and with less coding at the top layer. Is that where you 
are headed with
this?


Regards,

-- Gregor Purdy




Sam Vilain <[EMAIL PROTECTED]>
Sent by: Sam Vilain <[EMAIL PROTECTED]>
03/05/2003 11:11 AM

 
        To:     [EMAIL PROTECTED], Paul <[EMAIL PROTECTED]>, [EMAIL PROTECTED]
        cc: 
        Subject:        Associations between classes [was: Re: Object spec]


On Thu, 06 Mar 2003 04:19, Paul wrote:
> > Leave them out to carry on with the status quo of a myriad of subtly
> > different, non-interchangable approaches to associating classes.
> TMTOWTDI?
> Still, though your point is valid if I understand it, it will always be
> possible to create "non-interchangable approaches", and we don't want
> to dictate methods if we can help it.
> I think I need an example....unfortunately I'm at work and haven't the
> time to properly peruse the one you offered. Thus I must apologize, and
> wait for more input.

Consider this excerpt from the test script:

my $joe = new Person(name => "Joe Average");
my $car = new Object(description => "Red Car");

$car->set_owner($joe);

ok($joe->posessions->includes($car), "Joe owns car");

The `Object' class has an association which it calls `owner', to class 
`Person' (note: not all associations will be restricted to a particular 
class).  This is a collection that can only have one element so it is 
implemented with a reference.

The `Person' class has an association which it calls `posessions' to class 

`Object'.  This is an unordered collection that can hold many elements so 
it is implemented with a Set::Object.

They are the same relationship, and so setting the relationship from one 
direction affects the other direction.

So, it makes sense to allow the same methods to access and update the 
collections.

is($joe->get_posessions(0), $car, "Joe's first posession is his car");
ok($joe->posessions->includes($car), "Joe's posessions are a set");
ok($joe->posessions_includes($car), "Joe's set of posessions is 
encapsulated");

These tests perhaps illustrate the level to which I've made them similar;

is($car->get_owner(0),  $joe, "Refs can look like arrays");
ok($car->owner_includes($joe), "Refs can look like encapsulated sets");
eval { $car->owner->includes($joe) };
ok($@, "Refs cannot behave like real Sets");

To make the last test work would need associations in the object core, I 
think.
-- 
Sam Vilain, [EMAIL PROTECTED]

Whatever you do will be insignificant, but it is very important that
you do it.
 -- Mahatma Gandhi 



Reply via email to