[ABE.pm] Inhertance

Ricardo SIGNES rjbs-perl-abe at lists.manxome.org
Wed Mar 7 10:12:11 PST 2007


* Faber Fedor <faber at linuxnj.com> [2007-03-07T12:42:17]
> I've got an class ClassOne with a function called myAverage().  I now
> need a second function that's slightly different called
> myOtherAverage().
> [ ... ]
> Am I correct in wanting to do this: create an object called OtherOne
> that inherits from ClassOne and has a function called myAverage which
> is actually myOtherAverage?

Yes.

  # FILE Averager.pm
  package Averager;

  sub average {
    my ($self, @numbers) = @_;
    return $self->sum(@numbers) / @numbers;
  }

  sub sum {
    my ($self, @numbers) = @_;
    my $sum = 0;
    $sum += $_ for @numbers;
    return $sum;
  }

  1;

Then:

  # FILE Averager/Int.pm
  package Averager::Int;
  use base qw(Averager);

  sub average {
    my ($self, @numbers) = @_;
    my $avg = $self->SUPER::average(@numbers);
    return int($avg);
  }

  1;

And maybe:

  # FILE Averager/Mean.pm
  package Averager::Mean;
  use base qw(Averager);

  sub minmax {
    my ($self, @numbers) = @_;
    my @sorted = sort { $a <=> $b } @numbers;
    return @sorted[0, -1];
  }

  sub average {
    my ($self, @numbers);

    return abs($self->sum( $self->minmax(@numbers) ) / 2);
  }

  1;

-- 
rjbs


More information about the ABE-pm mailing list