README for Class::Classless
Time-stamp: "2000-05-13 19:40:59 MDT"
[Excerpted from the POD...]
NAME
Class::Classless -- framework for classless OOP
SYNOPSIS
use strict;
use Class::Classless;
my $ob1 = $Class::Classless::ROOT->clone;
$ob1->{'NAME'} = 'Ob1';
$ob1->{'stuff'} = 123;
$ob1->{'Thing'} = 789;
my $ob2 = $ob1->clone;
$ob2->{'NAME'} = 'Ob2';
printf "ob1 stuff: <%s>\n", $ob1->{'stuff'};
printf "ob2 stuff: <%s>\n", $ob2->{'stuff'};
printf "ob1 Thing: <%s>\n", $ob1->{'Thing'};
printf "ob2 Thing: <%s>\n", $ob2->{'Thing'};
$ob1->{'METHODS'}{'zaz'} = sub {
print "Zaz! on ", $_[0]{'NAME'}, "\n";
};
$ob1->zaz;
$ob2->zaz;
$ob1->EXAMINE;
$ob2->EXAMINE;
This prints the following:
ob1 stuff: <123>
ob2 stuff: <123>
ob1 Thing: <789>
ob2 Thing: <>
Zaz! on Ob1
Zaz! on Ob2
<Class::Classless::X=HASH(0x200236f4)>
'stuff', 123,
'NAME', 'Ob1',
'Thing', 789,
'METHODS', { 'zaz', 'CODE(0x20068360)' },
'PARENTS', [ 'ROOT' ],
<Class::Classless::X=HASH(0x2002cb48)>
'stuff', 123,
'NAME', 'Ob2',
'METHODS', { },
'PARENTS', [ 'Ob1' ],
OVERVIEW
In class-based OOP frameworks, methods are applicable to
objects by virtue of objects belonging to classes that
either provide those methods, or inherit them from classes
that do.
In classless OOP frameworks (AKA delegation-and-prototypes
frameworks), what methods an object is capable of is
basically an attribute of that object. That is, in Perl
terms: instead of methods being entries in the symbol table
of the package/class the object belongs to, they are entries
in a hash table inside the object. Inheritance is
implemented not by having classes inheriting from other
classes (via ISA lists), but by having objects inherit from
other objects (via PARENTS lists).
In class-based OOP frameworks, you get new objects by
calling constructors. In a classless framework, you get new
objects by copying ("cloning") an existing object -- and the
new clone becomes a child (inheritor) of the original
object. (Where do you get the one original object? The
language provides one, which has no parents, and which
contains some general purpose methods like "clone".)
PREREQUISITES
This suite requires Perl 5; I've only used it under Perl 5.004, so for
anything lower, you're on your own.
Class::Classless doesn't use any nonstandard modules.
INSTALLATION
You install Class::Classless, as you would install any Perl module
library, by running these commands:
perl Makefile.PL
make
make test
make install
If you want to install a private copy of Class::Classless in your home
directory, then you should try to produce the initial Makefile with
something like this command:
perl Makefile.PL LIB=~/perl
DOCUMENTATION
POD-format documentation is included in Classless.pm. POD is readable
with the 'perldoc' utility. See ChangeLog for recent changes.
MACPERL INSTALLATION NOTES
Don't bother with the makefiles. Just make a Class directory in your
MacPerl site_lib or lib directory, and move Classless.pm into there.
SUPPORT
Questions, bug reports, useful code bits, and suggestions for
Class::Classless should just be sent to me at sburke@cpan.org
AVAILABILITY
The latest version of Class::Classless is available from the
Comprehensive Perl Archive Network (CPAN). Visit
<http://www.perl.com/CPAN/> to find a CPAN site near you.
Copyright (c) 1999, 2000 Sean M. Burke. All rights reserved.
This library is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
AUTHOR
Sean M. Burke, sburke@cpan.org