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