...
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
package Base;
sub new {
my $class = shift;
my $self = {}; # no parent
bless $self, $class;
print "new Base\n";
return $self;
};
sub base_value {return 1;}
}
{
package Derived;
our @ISA = qw(Base); # establishes inheritance
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_); # relies on established inheritance
print "new Derived\n";
return $self;
};
sub derived_value {return 2;}
}
BEGIN {
my $derived = Derived->new();
my $b = $derived->base_value();
my $d = $derived->derived_value();
print "base_value = $d$b\n";
print "derived_value = $d\n";
}
|
...
| Code Block |
|---|
new Base new Derived derivedbase_value = 21 basederived_value = 1 2 |
Risk Assessment
Modifying class inheritance at runtime can introduce subtle bugs and is usually a sign of poor design.
...
Tool | Diagnostic |
|---|---|
Perl::Critic | ClassHierarchies::ProhibitExplicitISA |
Bibliography
| [Conway 2005] | "Inheritance," p. 360 |
| [CPAN] | Maischein, Max, parent |
| [CPAN] | Shank, Elliot, Perl-Critic-1.116 ClassHierarchies::ProhibitExplicitISA |
...