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]