Class::MakeMethods::Docs::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:
- Distribution
- Is it included with Perl, or on CPAN? Is it being actively
maintained?
- Usage
- How do you go about declaring your class's methods?
- Mechanism
- How are they generated and delivered?
- Instance type
- Are the objects of your class blessed hashes, or something else?
- Core Methods
- Does the module provide a constructor and basic accessors? Are there
specialized methods for hash-ref, array-ref, and object-ref
accessors?
- Extensible
- Can you subclass the package to create new types of methods, or is there
some other way to extend it?
- Other Methods
- Other types of methods provided.
- Emulator
- Does Class::MakeMethods provide a drop-in replacement for this
module?
- Other characteristics or features of note.
- Distribution
- CPAN. Uploaded Sep 2003.
- I have not yet reviewed this module in detail.
- Example
-
package MyObject;
use accessors qw( foo bar baz );
- Distribution
- CPAN.
- I have not yet reviewed this module in detail.
- Distribution
- CPAN. Last update 4/01.
- Usage
- Inherit and call function with declaration arguments
- Mechanism
- Generates and installs closures
- Instance
Type
- Hash.
- Subclasses
Cleanly
- Cleanly.
- Standard
Methods
- Scalar accessors.
- Extensible
- Yes.
- Accessor methods call overwritable
"self-<get(key)"
and
"self-<set(key,
value)"
methods.
Also includes Class::Accessor::Fast, which creates direct hash
keys accessors without calling get and set methods.
- Emulator
- Yes, but only for the Fast variation; see
Class::MakeMethods::Emulator::AccessorFast.
- Example
-
package MyObject;
@ISA = qw(Class::Accessor);
MyObject->mk_accessors(qw( simple ordered mapping obj_ref ));
- Distribution
- CPAN. Last update 1/00.
- Usage
- Inherit and fill %MEMBERS hash; methods created
when first object is created
- Mechanism
- Generates and installs closures
- Instance
Type
- Hash.
- Subclasses
Cleanly
- Yes.
- Standard
Methods
- Constructor and various accessors.
- Extensible
- No.
- Example
- Usage is similar to Class::Struct:
package MyObject;
use Class::Class;
@ISA = qw(Class::Class);
%MEMBERS = (
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
);
- Other Method
Types
- Provides a polymorph() method that is similar to Class::Method's
"ClassName:class_name -require".
- Distribution
- CPAN. Last update 5/01.
- Usage
- Call function with declaration arguments
- Mechanism
- Generates and installs closures
- Instance
Type
- Scalar reference with external data storage.
- Subclasses
Cleanly
- Yes.
- Standard
Methods
- Constructor and various accessors.
- Extensible
- Yes. (I think.)
- Supports pre- and post-conditions, class invariants, and other software
engineering goodies.
- Example
-
package MyObject;
use Class::Contract;
contract {
ctor 'new';
attr 'simple' => SCALAR;
attr 'ordered' => ARRAY;
attr 'mapping' => HASH;
attr 'obj_ref' => 'FooObject';
}
- Distribution
- CPAN. Last update 4/00.
- Usage
- Inherit and call function with declaration arguments
- Mechanism
- Generates and installs closures
- Instance
Type
- Class data, with inheritance.
- Subclasses
Cleanly
- Yes, specifically.
- Standard
Methods
- Scalar accessors.
- Extensible
- No.
- Example
- Usage is similar to Class::Accessor:
package MyObject;
@ISA = qw(Class::Data::Inheritable);
MyObject->mk_classdata(qw( simple ordered mapping obj_ref ));
- Emulator
- Yes, Class::MakeMethods::Emulator::Inheritable, passes original test
suite.
- Distribution
- CPAN. Uploaded 12/0.
- I have not yet reviewed this module in detail.
- Distribution
- CPAN. Uploaded 12/01.
- I have not yet reviewed this module in detail.
- Distribution
- CPAN. Last update 11/00.
- Usage
- Call function with declaration arguments
- Mechanism
- Assembles and evals code string, or saves code file.
- Instance
Type
- Hash.
- Subclasses
Cleanly
- Yes.
- Standard
Methods
- Constructor and accessors (scalar, array, hash, object, object array,
etc).
- Extensible
- Unknown.
- Handles private/protected limitations, pre and post conditions,
assertions, and more.
- Example
- Usage is similar to Class::Struct:
package MyObject;
use Class::Generate;
class MyObject => [
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
];
- Distribution
- CPAN. Uploaded 12/01.
- I have not yet reviewed this module in detail.
- Distribution
- CPAN. Experimental/Alpha release 07/2001.
- Instance
Type
- Hash, array, or flyweight-index.
- Subclasses
Cleanly
- No. (I think.)
- Standard
Methods
- Constructor and scalar accessors; flywieght objects also get scalar
mutator methods.
- Extensible
- No. (I think.)
- I'm not sure I understand the intent of this module; perhaps future
versions will make this clearer....
- Distribution
- CPAN. Last update 1/01.
- Usage
- Import, or call function, with declaration arguments
- Mechanism
- Generates and installs closures
- Instance
Type
- Hash, Static.
- Subclasses
Cleanly
- Yes.
- Standard
Methods
- Constructor and various accessors.
- Extensible
- Yes.
- 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' ],
);
- Emulator
- Yes, Class::MakeMethods::Emulator::MethodMaker, passes original test
suite.
- Distribution
- CPAN.
- Usage
- Import, or call function, with declaration arguments; or if desired, make
methods on-demand with Autoload, or declare subroutines with a special
Attribute.
- Mechanism
- Generates and installs closures
- Instance
Type
- Hash, Array, Scalar, Static, Class data, others.
- Subclasses
Cleanly
- Yes.
- Standard
Methods
- Constructor and various accessors.
- Extensible
- Yes.
- 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' } ],
);
- Distribution
- CPAN. Last update 2/00.
- Usage
- Inherit; methods created via AUTOLOAD
- Mechanism
- Generates and installs closures (I think)
- Instance
Type
- Hash.
- Subclasses
Cleanly
- Yes.
- Standard
Methods
- Constructor and scalar/code accessors (see Comments).
- Extensible
- No.
- 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.
- Distribution
- Included in the standard Perl distribution. Replaces Class::Template.
- Usage
- Call function with declaration arguments
- Mechanism
- Assembles and evals code string
- Instance
Type
- Hash or Array
- Subclasses
Cleanly
- No.
- Standard
Methods
- Constructor and various accessors.
- Extensible
- No.
package MyObject;
use Class::Struct;
struct(
simple => '$',
ordered => '@',
mapping => '%',
obj_ref => 'FooObject'
);
- Emulator
- Yes, Class::MakeMethods::Emulator::Struct.
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.
- Distribution
- CPAN. Last update 3/01.
- Extensible
- Unknown.
- Mechanism
- Uses Class::Data::Inheritable and installs additional closures.
The following modules are relevant but have not yet been cataloged
above.
See Class::MakeMethods for general information about this
distribution.
M. Simon Cavalletto, simonm@cavalletto.org
Evolution Softworks, www.evoscript.org
Copyright 2002 Matthew Simon Cavalletto.
Portions copyright 2000, 2001 Evolution Online Systems, Inc.
You may use, modify, and distribute this document under the same
terms as Perl.