> -----Original Message----- > From: Luke Palmer [mailto:[EMAIL PROTECTED] > Sent: Friday, December 12, 2003 6:23 AM > > 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>. > > - trait > A compile time sticky note to be placed on a wide variety > of things. Used with C<is>.
Did I miss something with IS and OF? That is, I think: C<is> means storage type, while C<of> means trait or class: my @a is Herd of Cat; declares a Herd (presumably a base class of some collection type) with the trait that, in this case, members will be of Class Cat. Did this change when I wasn't looking? > - role > A collection of methods to be incorporated into a class sans > inheritance (and maybe some other stuff, too). Used with C<does>. No comment, since this is still hovering (see Larry's reply). > > So for example: > > class Dog > does Boolean # role > is extended # trait > is Mammal # [1] The only difference I can see here between C<does Boolean> and C<is extended> would be the declaration of Boolean or extended (unless C<is> can only be used with built-in traits, which seems unnecessarily restrictive...) > { > has $.tail; # attribute > has @.legs; # attribute > } > > my $fido = Dog.new > but false; # property > > Hope that clears things up. > > Luke > > [1] This is a base class, which is an overloaded use of C<is>. Though, > upon A12 release, we'll probably find out that it's not overloaded but > instead, elegantly unified, somehow. Thanks for bringing this out. =Austin