Class::MakeMethods::RelatedModules - Survey of Class Builders
http://search.cpan.org/search?mode=module&query=Class
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.
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.
In general, I compared the following characteristics:
Is it included with Perl, or on CPAN? Is it being actively maintained?
How do you go about declaring your class's methods?
How are they generated and delivered?
Are the objects of your class blessed hashes, or something else?
Does the module provide a constructor and basic accessors? Are there specialized methods for hash-ref, array-ref, and object-ref accessors?
Can you subclass the package to create new types of methods, or is there some other way to extend it?
Other types of methods provided.
Does Class::MakeMethods provide a drop-in replacement for this module?
Other characteristics or features of note.
CPAN. Last update 4/01.
Inherit and call function with declaration arguments
Generates and installs closures
Hash.
Cleanly.
Scalar accessors.
Yes.
Accessor methods call overwritable self-<get(key) and self-<set(key, value) methods.
self-<get(key)
self-<set(key, value)
Also includes Class::Accessor::Fast, which creates direct hash keys accessors without calling get and set methods.
Yes, but only for the Fast variation; see Class::MakeMethods::Emulator::AccessorFast.
package MyObject; @ISA = qw(Class::Accessor); MyObject->mk_accessors(qw( simple ordered mapping obj_ref ));
CPAN. Last update 1/00.
Inherit and fill %MEMBERS hash; methods created when first object is created
Constructor and various accessors.
No.
Usage is similar to Class::Struct:
package MyObject; use Class::Class; @ISA = qw(Class::Class); %MEMBERS = ( simple => '$', ordered => '@', mapping => '%', obj_ref => 'FooObject' );
Provides a polymorph() method that is similar to Class::Method's "ClassName:class_name -require".
CPAN. Last update 11/01.
Hash constructor, with bells.
No, but possible.
package MyObject; @ISA = qw(Class::Constructor); MyObject->mk_constructor( Name => 'new' );
CPAN. Last update 12/00.
Pre-processor run against declaration files.
Assembles and saves code file
Yes. (I think.)
No. (I think.)
header: package MyObject; variables: $simple @ordered %mapping $obj_ref
CPAN. Last update 5/01.
Call function with declaration arguments
Scalar reference with external data storage.
Supports pre- and post-conditions, class invariants, and other software engineering goodies.
package MyObject; use Class::Contract; contract { ctor 'new'; attr 'simple' => SCALAR; attr 'ordered' => ARRAY; attr 'mapping' => HASH; attr 'obj_ref' => 'FooObject'; }
CPAN. Last update 4/00.
Class data, with inheritance.
Yes, specifically.
Usage is similar to Class::Accessor:
package MyObject; @ISA = qw(Class::Data::Inheritable); MyObject->mk_classdata(qw( simple ordered mapping obj_ref ));
Yes, Class::MakeMethods::Emulator::Inheritable, passes original test suite.
CPAN. Uploaded 12/0.
I have not yet reviewed this module in detail.
CPAN. Uploaded 12/01.
CPAN. Last update 11/00.
Assembles and evals code string, or saves code file.
Constructor and accessors (scalar, array, hash, object, object array, etc).
?
Handles private/protected limitations, pre and post conditions, assertions, and more.
package MyObject; use Class::Generate; class MyObject => [ simple => '$', ordered => '@', mapping => '%', obj_ref => 'FooObject' ];
CPAN. Experimental/Alpha release 07/2001.
Hash, array, or flyweight-index.
Constructor and scalar accessors; flywieght objects also get scalar mutator methods.
I'm not sure I understand the intent of this module; perhaps future versions will make this clearer....
CPAN. Last update 1/01.
Import, or call function, with declaration arguments
Hash, Static.
Usage is similar to Class::MakeMethods:
package MyObject; use Class::MethodMaker ( new => 'new', get_set => 'simple', list => 'ordered', hash => 'mapping', object => [ 'FooObject' => 'obj_ref' ], );
Yes, Class::MakeMethods::Emulator::MethodMaker, passes original test suite.
Intended for CPAN release RSN.
Hash, Array, Scalar, Static, Class data, others.
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' } ], );
CPAN. Last update 2/00.
Inherit; methods created via AUTOLOAD
Generates and installs closures (I think)
Constructor and scalar/code accessors (see 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.
Included in the standard Perl distribution. Replaces Class::Template.
Assembles and evals code string
Hash or Array
package MyObject; use Class::Struct; struct( simple => '$', ordered => '@', mapping => '%', obj_ref => 'FooObject' );
Yes, Class::MakeMethods::Emulator::Struct.
No documentation available.
???
CPAN. Out of date.
Call function with declaration arguments (I think)
Assembles and evals code string (I think)
package MyObject; use Class::Template; members MyObject { simple => '$', ordered => '@', mapping => '%', obj_ref => 'FooObject' };
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.
CPAN. Last update 3/01.
Extensible
Mechanism
Uses Class::Data::Inheritable and installs additional closures.
CPAN.
Package import with declaration arguments
use HTML::Mason::MethodMaker ( read_write => [ qw( simple ordered mapping obj_ref ) ] );
See Class::MakeMethods for general information about this module.
See Class::MakeMethods::ReadMe for distribution, installation, version and support information.
M. Simon Cavalletto, Evolution Online Systems, simonm@evolution.com
Copyright (c) 2000, 2001 Evolution Online Systems, Inc.
This documentation may be used, redistributed and/or modified under the same terms as Perl.
8 POD Errors
The following errors were encountered while parsing the POD:
'=item' outside of any '=over'
You forgot a '=back' before '=head2'
You can't have =items (as at line 749) unless the first thing after the =over is an =item
You forgot a '=back' before '=head1'
To install Class::MakeMethods, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Class::MakeMethods
CPAN shell
perl -MCPAN -e shell install Class::MakeMethods
For more information on module installation, please visit the detailed CPAN module installation guide.