It was Friday, December 12, 2003 when Luke Palmer took the soap box, saying: : So I'm seeing a lot of inconsistent OO-vocabulary around here, and it : makes things pretty hard to understand.
Awesome. I've taken your original, plus comments so far and created perlvocab.pod. Lets give it a couple go-rounds and it can be stored in CVS for safe keeping (and maintaining). Send me diffs if you like. Document below sig. Casey West -- Usenet is like Tetris for people who still remember how to read. -- Button from the Computer Museum, Boston, MA =pod =head1 NAME perlvocab - Perl Vocabulary and Glossary =head1 SYNOPSIS This document authoritatively defines many potentially ambiguous terms in Perl. =head1 DESCRIPTION =head2 Object Oriented Terminology =over 4 =item attribute A concrete data member of a class. Declared with C<has>. =item property A run-time, out-of-band sticky note to be placed on a single object, applied with with C<but>. A property is a simple kind of role that supplies a single attribute. The type of a property is identical to its role name. Roles can have subtypes that function as enums when the subtypes are constrained to a single value. You can use one of these subtypes without specifically implying the role name. So saying $bar but Red might give you a value with the property Color. You can write the corresponding boolean test using the smart match operator: $bar ~~ Red and it (smartly) picks out the Color property to compare with, provided it's unambiguous. You can use that syntax to compare against any subtype or junction of subtypes: $bar ~~ Redish&Whiteish # pinkish =item trait A compile-time sticky note to be placed on a wide variety of things. Used with C<is>. =item role A collection of methods and/or attributes to be incorporated into a class sans inheritance (and maybe some other stuff, too). A role can be applied to a class at compile time via C<does>, or to an object at run time via C<but>. So for example: class Dog does Boolean # role is extended # trait is Mammal # base class { has $.tail; # attribute has @.legs; # attribute } my $fido = Dog.new but false; # property In this example, C<Mammal> 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. =head1 AUTHOR Luke Palmer, Original Document Contributions by Larry Wall, and Jonathan Scott Duff Compilation by Casey West =cut