=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 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 Cget(I)> and Cset(I, I)> 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 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