On Fri, Dec 12, 2003 at 04:23:02AM -0700, Luke Palmer wrote:
> So I'm seeing a lot of inconsistent OO-vocabulary around here, and it
> makes things pretty hard to understand.
>
> So here's how Perl 6 is using said inconsistent terms, AFAIK:
>
> - attribute
> A concrete data member of a class. Used with C<has>.
>
> - property
> An out-of-band sticky note to be placed on a single object.
> Used with C<but>.
I think an important aspect of properties that you left out here is
that they are run-time.
> - trait
> A compile time sticky note to be placed on a wide variety of things.
> Used with C<is>.
>
> - role
> A collection of methods to be incorporated into a class sans
> inheritance (and maybe some other stuff, too). Used with C<does>.
s/class/object/
Roles are like sticky behavior (as I understand them) just as properties
are sticky state. And I assume that roles are run-time so that you can
have your objects obtain new behavior (fullfill new roles) as needed
without having to use eval all the time.
I think I'm getting it but I'm not sure. Does something like this
work?
my role Teach { ... }
my role Operate { ... }
my role Learn { ... }
my Person $frank;
{ temp $frank_the_teacher = $frank does Teach; ... }
{ temp $frank_the_doctor = $frank does Operate; ... }
{ temp $frank_the_student = $frank does Learn; ... }
I.e., we can use dynamic scoping to control how long an object
fulfills a particular role? Maybe it could also be written like so:
my Person $frank;
{ my role Teach { ... }; $frank does Teach; ... }
{ my role Operate { ... }; $frank does Operate; ... }
{ my role Learn { ... } $frank does Learn; ... }
so that when the role goes out of scope, the object no longer
possesses the abilities of that role.
I confuse myself everytime I think about this stuff.
-Scott
--
Jonathan Scott Duff
[EMAIL PROTECTED]