NAME

Data::Object::Prototype - Data::Object Prototype-based Programming

VERSION

version 0.02

SYNOPSIS

use Data::Object::Prototype;

my $bear = object {
    name     => 'bear',
    type     => 'black bear',
    attitude => 'indifferent',
};

$bear->package->install(responds => sub {
    'Roarrrr'
});

$bear->package->install(succeeds => sub {
    shift->isa(ref shift)
});

my $papa = extend $bear => {
    name     => 'papa bear',
    type     => 'great big papa bear',
    attitude => 'agitated',
};

$papa->package->install(responds => sub {
    "Who's been eating my porridge?"
});

my $baby = extend $papa => {
    name     => 'baby bear',
    type     => 'tiny little baby bear',
    attitude => 'baby',
};

$baby->package->install(responds => sub {
    "Who's eaten up all my porridge?"
});

my $mama = extend $bear => {
    name     => 'mama bear',
    type     => 'middle-sized mama bear',
    attitude => 'confused',
};

$mama->package->install(responds => sub {
    "Who's been eating my porridge?"
});

if ($papa && $mama && $baby && $baby->succeeds($papa)) {
    my $statement = "The %s said, '%s'\n";

    printf $statement, $papa->get('name'), $papa->responds;
    printf $statement, $mama->get('name'), $mama->responds;
    printf $statement, $baby->get('name'), $baby->responds;

    # The Papa Bear said, "Who's been eating my porridge?"
    # The Mama Bear said, "Who's been eating my porridge?"
    # The Baby Bear said, "Who's eaten up all my porridge?"
}

DESCRIPTION

Data::Object::Prototype implements a thin prototype-like layer on top of the Data::Object type-object framework. This module allows you to develop using a prototype-based style in Perl, giving you the ability to create, mutate, extend, mixin, and destroy anonymous Data::Object type classes, ad hoc and with very little code.

Prototype-based programming is a style of object-oriented programming in which classes are not present, and behavior reuse (known as inheritance in class-based languages) is performed via a process of cloning existing objects that serve as prototypes. Due to familiarity with class-based languages such as Java, many programmers assume that object-oriented programming is synonymous with class-based programming.

However, class-based programming is just one kind of object-oriented programming style, and other varieties exist such as role-oriented, aspect-oriented and prototype-based programming. A prominent example of a prototype-based programming language is ECMAScript (a.k.a. JavaScript or JScript). Note: This is an early release available for testing and feedback and as such is subject to change.

AUTHOR

Al Newkirk anewkirk@ana.io

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Al Newkirk.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.