diff options
Diffstat (limited to 'lib/Class/MakeMethods/Docs/RelatedModules.pod')
| -rw-r--r-- | lib/Class/MakeMethods/Docs/RelatedModules.pod | 962 |
1 files changed, 962 insertions, 0 deletions
diff --git a/lib/Class/MakeMethods/Docs/RelatedModules.pod b/lib/Class/MakeMethods/Docs/RelatedModules.pod new file mode 100644 index 0000000..93ef930 --- /dev/null +++ b/lib/Class/MakeMethods/Docs/RelatedModules.pod @@ -0,0 +1,962 @@ +=head1 NAME + +Class::MakeMethods::Docs::RelatedModules - Survey of Class Builders + + +=head1 SYNOPSIS + + http://search.cpan.org/search?mode=module&query=Class + + +=head1 DESCRIPTION + +There are a variety of modules on CPAN dedicated to the purpose of +generating common constructor and accessor methods. Below, I survey +several of these, summarizing some basic features and technical +approaches, and comparing them to Class::MakeMethods and other +modules. + + +=head2 Caution + +B<Please note that these comments are for basic comparison purposes +only and may be incorrect or out of date.> Please consult the +documentation from a current version of each module for more specific +details. Corrections and clarifications would by welcomed by the author at the email address below. + + +=head2 Points of Comparison + +In general, I compared the following characteristics: + +=over 4 + +=item Distribution + +Is it included with Perl, or on CPAN? Is it being actively maintained? + +=item Usage + +How do you go about declaring your class's methods? + +=item Mechanism + +How are they generated and delivered? + +=item Instance type + +Are the objects of your class blessed hashes, or something else? + +=item Core Methods + +Does the module provide a constructor and basic accessors? Are there specialized methods for hash-ref, array-ref, and object-ref accessors? + +=item Extensible + +Can you subclass the package to create new types of methods, or is there some other way to extend it? + +=item Other Methods + +Other types of methods provided. + +=item Emulator + +Does Class::MakeMethods provide a drop-in replacement for this module? + +=item Comments + +Other characteristics or features of note. + +=back + + +=head1 RELATED MODULES + +=head2 accessors + +=over 4 + +=item Distribution + +CPAN. Uploaded Sep 2003. + +=item Comments + +I have not yet reviewed this module in detail. + +=item Example + + package MyObject; + use accessors qw( foo bar baz ); + +=back + +=head2 Attribute::Property + +=over 4 + +=item Distribution + +CPAN. + +=item Comments + +I have not yet reviewed this module in detail. + +=back + + +=head2 Class::Accessor + +=over 4 + +=item Distribution + +CPAN. Last update 4/01. + +=item Usage + +Inherit and call function with declaration arguments + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Cleanly. + +=item Standard Methods + +Scalar accessors. + +=item Extensible + +Yes. + +=item Comments + +Accessor methods call overwritable C<self-E<lt>get(I<key>)> and +C<self-E<lt>set(I<key>, I<value>)> methods. + +Also includes Class::Accessor::Fast, which creates direct hash keys accessors without calling get and set methods. + +=item Emulator + +Yes, but only for the Fast variation; see Class::MakeMethods::Emulator::AccessorFast. + +=item Example + + package MyObject; + @ISA = qw(Class::Accessor); + MyObject->mk_accessors(qw( simple ordered mapping obj_ref )); + +=back + + +=head2 Class::Class + +=over 4 + +=item Distribution + +CPAN. Last update 1/00. + +=item Usage + +Inherit and fill %MEMBERS hash; methods created when first object is created + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Yes. + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +No. + +=item Example + +Usage is similar to Class::Struct: + + package MyObject; + use Class::Class; + @ISA = qw(Class::Class); + %MEMBERS = ( + simple => '$', + ordered => '@', + mapping => '%', + obj_ref => 'FooObject' + ); + +=item Other Method Types + +Provides a polymorph() method that is similar to Class::Method's "ClassName:class_name -require". + +=back + + +=head2 Class::Constructor + +=over 4 + +=item Distribution + +CPAN. Last update 11/01. + +=item Usage + +Inherit and call function with declaration arguments + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Cleanly. + +=item Standard Methods + +Hash constructor, with bells. + +=item Extensible + +No. + +=item Emulator + +No, but possible. + +=item Example + + package MyObject; + @ISA = qw(Class::Constructor); + MyObject->mk_constructor( Name => 'new' ); + +=back + + +=head2 Class::Classgen + +=over 4 + +=item Distribution + +CPAN. Last update 12/00. + +=item Usage + +Pre-processor run against declaration files. + +=item Mechanism + +Assembles and saves code file + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Yes. (I think.) + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +No. (I think.) + +=item Example + + header: + package MyObject; + variables: + $simple + @ordered + %mapping + $obj_ref + +=back + + +=head2 Class::Contract + +=over 4 + +=item Distribution + +CPAN. Last update 5/01. + +=item Usage + +Call function with declaration arguments + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Scalar reference with external data storage. + +=item Subclasses Cleanly + +Yes. + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +Yes. (I think.) + +=item Comments + +Supports pre- and post-conditions, class invariants, and other +software engineering goodies. + +=item Example + + package MyObject; + use Class::Contract; + contract { + ctor 'new'; + attr 'simple' => SCALAR; + attr 'ordered' => ARRAY; + attr 'mapping' => HASH; + attr 'obj_ref' => 'FooObject'; + } + +=back + + +=head2 Class::Data::Inheritable + +=over 4 + +=item Distribution + +CPAN. Last update 4/00. + +=item Usage + +Inherit and call function with declaration arguments + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Class data, with inheritance. + +=item Subclasses Cleanly + +Yes, specifically. + +=item Standard Methods + +Scalar accessors. + +=item Extensible + +No. + +=item Example + +Usage is similar to Class::Accessor: + + package MyObject; + @ISA = qw(Class::Data::Inheritable); + MyObject->mk_classdata(qw( simple ordered mapping obj_ref )); + +=item Emulator + +Yes, Class::MakeMethods::Emulator::Inheritable, passes original test suite. + +=back + + +=head2 Class::Delegate + +=over 4 + +=item Distribution + +CPAN. Uploaded 12/0. + +=item Comments + +I have not yet reviewed this module in detail. + +=back + +=head2 Class::Delegation + +=over 4 + +=item Distribution + +CPAN. Uploaded 12/01. + +=item Comments + +I have not yet reviewed this module in detail. + +=back + +=head2 Class::Generate + +=over 4 + +=item Distribution + +CPAN. Last update 11/00. + +=item Usage + +Call function with declaration arguments + +=item Mechanism + +Assembles and evals code string, or saves code file. + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Yes. + +=item Standard Methods + +Constructor and accessors (scalar, array, hash, object, object array, etc). + +=item Extensible + +Unknown. + +=item Comments + +Handles private/protected limitations, pre and post conditions, +assertions, and more. + +=item Example + +Usage is similar to Class::Struct: + + package MyObject; + use Class::Generate; + class MyObject => [ + simple => '$', + ordered => '@', + mapping => '%', + obj_ref => 'FooObject' + ]; + +=back + +=head2 Class::Hook + +=item Distribution + +CPAN. Uploaded 12/01. + +=item Comments + +I have not yet reviewed this module in detail. + + +=head2 Class::Holon + +=over 4 + +=item Distribution + +CPAN. Experimental/Alpha release 07/2001. + +=item Instance Type + +Hash, array, or flyweight-index. + +=item Subclasses Cleanly + +No. (I think.) + +=item Standard Methods + +Constructor and scalar accessors; flywieght objects also get scalar mutator methods. + +=item Extensible + +No. (I think.) + +=item Comments + +I'm not sure I understand the intent of this module; perhaps future versions will make this clearer.... + +=back + + +=head2 Class::MethodMaker + +=over 4 + +=item Distribution + +CPAN. Last update 1/01. + +=item Usage + +Import, or call function, with declaration arguments + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Hash, Static. + +=item Subclasses Cleanly + +Yes. + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +Yes. + +=item Example + +Usage is similar to Class::MakeMethods: + + package MyObject; + use Class::MethodMaker ( + new => 'new', + get_set => 'simple', + list => 'ordered', + hash => 'mapping', + object => [ 'FooObject' => 'obj_ref' ], + ); + +=item Emulator + +Yes, Class::MakeMethods::Emulator::MethodMaker, passes original test suite. + +=back + + +=head2 Class::MakeMethods + +=over 4 + +=item Distribution + +CPAN. + +=item Usage + +Import, or call function, with declaration arguments; or if desired, make methods on-demand with Autoload, or declare subroutines with a special Attribute. + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Hash, Array, Scalar, Static, Class data, others. + +=item Subclasses Cleanly + +Yes. + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +Yes. + +=item Example + +Usage is similar to Class::MethodMaker: + + package MyObject; + use Class::MakeMethods::Hash ( + new => 'new', + scalar => 'simple', + array => 'ordered', + hash => 'mapping', + object => [ 'obj_ref', { class=>'FooObject' } ], + ); + +=back + + +=head2 Class::Maker + +=over 4 + +=item Distribution + +CPAN. Last update 7/02. + +=item Usage + +Call function with declaration arguments. + +=item Mechanism + +Generates and installs closures (I think). + +=item Instance Type + +Hash (I think). + +=item Subclasses Cleanly + +Unknown. + +=item Standard Methods + +Constructor and various scalar and reference accessors. + +=item Extensible + +Unknown. + +=item Comments + +I haven't yet reviewed this module closely. + +=back + + +=head2 Class::SelfMethods + +=over 4 + +=item Distribution + +CPAN. Last update 2/00. + +=item Usage + +Inherit; methods created via AUTOLOAD + +=item Mechanism + +Generates and installs closures (I think) + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Yes. + +=item Standard Methods + +Constructor and scalar/code accessors (see Comments). + +=item Extensible + +No. + +=item Comments + +Individual objects may be assigned a subroutine that will be called as a method on subsequent accesses. If an instance does not have a value for a given accessor, looks for a method defined with a leading underscore. + +=back + + +=head2 Class::Struct + +=over 4 + +=item Distribution + +Included in the standard Perl distribution. Replaces Class::Template. + +=item Usage + +Call function with declaration arguments + +=item Mechanism + +Assembles and evals code string + +=item Instance Type + +Hash or Array + +=item Subclasses Cleanly + +No. + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +No. + + package MyObject; + use Class::Struct; + struct( + simple => '$', + ordered => '@', + mapping => '%', + obj_ref => 'FooObject' + ); + +=item Emulator + +Yes, Class::MakeMethods::Emulator::Struct. + +=back + + +=head2 Class::StructTemplate + +=over 4 + +=item Distribution + +CPAN. Last update 12/00. + +No documentation available. + +=item Usage + +Unknown. + +=item Mechanism + +Unknown. + +=back + + +=head2 Class::Template + +=over 4 + +=item Distribution + +CPAN. Out of date. + +=item Usage + +Call function with declaration arguments (I think) + +=item Mechanism + +Assembles and evals code string (I think) + +=item Instance Type + +Hash. + +=item Subclasses Cleanly + +Yes. (I think.) + +=item Standard Methods + +Constructor and various accessors. + +=item Extensible + +No. (I think.) + +=item Example + +Usage is similar to Class::Struct: + + package MyObject; + use Class::Template; + members MyObject { + simple => '$', + ordered => '@', + mapping => '%', + obj_ref => 'FooObject' + }; + +=back + + +=head2 Class::Virtual + +Generates methods that fail with a message indicating that they were not implemented by the subclass. (Cf. 'Template::Universal:croak -abstract'.) + +Also provides a list of abstract methods that have not been implemented by a subclass. + +=over 4 + +=item Distribution + +CPAN. Last update 3/01. + +=item Extensible + +Unknown. + +=item Mechanism + +Uses Class::Data::Inheritable and installs additional closures. + +=back + + +=head2 CodeGen::PerlBean + +=over 4 + +=item Distribution + +CPAN. + +=item Usage + +Call function with declaration arguments. + +=item Mechanism + +Generates and writes source code to a file. + +=item Instance Type + +Hash (I think). + +=item Subclasses Cleanly + +Unknown. + +=item Standard Methods + +Constructor and various scalar and reference accessors. + +=item Extensible + +Unknown. + +=item Comments + +I haven't yet reviewed this module closely. + +=back + + +=head2 HTML::Mason::MethodMaker + +=over 4 + +=item Distribution + +CPAN. + +=item Usage + +Package import with declaration arguments + +=item Mechanism + +Generates and installs closures + +=item Instance Type + +Hash. + +=item Standard Methods + +Scalar accessors. + +=item Extensible + +No. + +=item Example + + use HTML::Mason::MethodMaker ( + read_write => [ qw( simple ordered mapping obj_ref ) ] + ); + +=back + + +=head1 TO DO + +The following modules are relevant but have not yet been cataloged above. + +=head2 Attribute::Property + +=head2 Class::Accessor::Chained + +=head2 Class::Accessor::Lvalue + +=head2 Class::Accessor::Ref + +=head2 Class::AutoClass + +=head2 Class::Builder + +=head2 Class::Member + +=head2 Class::Trigger + + +=head1 SEE ALSO + +See L<Class::MakeMethods> for general information about this distribution. + + +=head1 CREDITS AND COPYRIGHT + +=head2 Developed By + + M. Simon Cavalletto, simonm@cavalletto.org + Evolution Softworks, www.evoscript.org + +=head2 Copyright + +Copyright 2002 Matthew Simon Cavalletto. + +Portions copyright 2000, 2001 Evolution Online Systems, Inc. + +=head2 License + +You may use, modify, and distribute this document under the same terms as Perl. + +=cut |
