#... http://www.cs.mun.ca/~donald/bsc/node12.html
# INHERITANCE
package dog;
sub new {
my $class = shift;
return(bless({'puppies'=>15},$class));
}
sub get {
my ($self,$name) = @_;
return ($self->{$name});
}
sub set {
my ($self, $name, $newvalue) = @_;
#this is silly but saves space
$self->{$name} = $newvalue;
return $self->{$name};
}
sub bark {
return 'woof...I INHERITED this capability.';
}
package cockerSpaniel;
use parent -norequire, qw|dog|;
sub new {
my ($class) = @_;
return(bless(dog->new(),$class));
}
sub bark {
my ($class) = @_;
return ($class->SUPER::bark() . '..but then overrode it');
}
package main;
my $doggie = new cockerSpaniel();
$doggie->set('puppies',29);
print qq|\nHere are the cockerSpaniel's puppies: | . $doggie->get('puppies');
my $realdog = new dog();
print qq|\nHere are the parent dog's puppies: | . $realdog->get('puppies');
# POLYMORPHISM, or dynamic binding of function calls
print qq|\n| . $doggie->bark();
# Data Encapsulation
# There are numerous techniques. Take your pick:
# http://www.csse.monash.edu.au/~damian/TPC/1999/Encapsulation/Paper.html