Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Abstract Classes

by dpuu (Chaplain)
on Apr 28, 2003 at 18:20 UTC ( [id://253778]=note: print w/replies, xml ) Need Help??


in reply to Abstract Classes

The purpose of an abstract class is to constrain the implementor of its subclasses. This being perl, we don't try too hard to prevent circumvention of our constraints. So a very simple implementation of an abstract class is:
package BaseClass; sub new { my ($class, @args) = @_; my $self = bless {}, $class; $self->init(@args); $self->check_interface__BaseClass; $self; } sub init { die "oops, this is the base class" } sub check_interface__BaseClass { my ($self) = @_; foreach my $method (qw[ foo bar baz ]) { $self->can($method) or die "method $method not implemented"; } }
With this simple approach, if your subclasses don't redefine "new" (they define the init method instead), then they get the interface checking. If they do redefine "new", then they can still check the interface by calling the check_interface method explicitly.

Sure, it has its limitations, but if you want a lightweight solution, this seems to fit the bill. --Dave

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://253778]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (7)
As of 2024-04-24 09:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found