I think that instead of a "base" class that will be overriden to support another media it will be better to create a class that, during creation, accepts a "helper" class that implements the I/O scheme.
package ShoppingCart; sub new { my $class = shift; my $self = {}; bless $self, $class; $self->initialize(@_); return $self; } sub initialize { my $self = shift; $self->{IO} = shift; } sub PrintAll { my $self = shift; while (my $item = $self->{IO}->GetNext()) { ... } } ... package ShoppingCart::IO::File; # this is NOT a subclass of ShoppingCart!!! sub new { ... } sub GetNext {} sub ResetCounter {} ... package ShoppingCart::IO::DBI; sub new { ... } sub GetNext {} sub ResetCounter {} ... package main; my $IO = new ShoppingCart::IO::DBI $server, $username, $password; my $Cart = new ShoppingCart $IO; ...
There might be some inheritance between the IO Scheme implementation objects, but I doubt it.
Also ... if you really really cared you could add some code to ShoppingCart::initilize() that would test whether the passed IOScheme object supports all the required methods with $IO->can(...).
I do not know if this will be of any help in your case though.
Jenda
In reply to Re: OOP: Plugin Style Development
by Jenda
in thread OOP: Plugin Style Development
by jk2addict
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |