Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Re: OO - problem with inheritance

by uwevoelker (Pilgrim)
on Jan 14, 2002 at 20:30 UTC ( #138602=note: print w/replies, xml ) Need Help??


in reply to Re: OO - problem with inheritance
in thread OO - problem with inheritance

Hello Ilya,
thank you for your fast answer. Did I got you right, that when I want to change other configuration parameters like this
&CCS::Data::Datatype::base_class::config_parameter( max_length => {max => 255, default => 255}, min_length => {max => 255});
which is taken from my String class, I need to override your sub parameter_config in this way?
sub parameter_config { return {max_length => {max => 255, default =>255)); }
But I also need the other parameters from base class (like min => 0 and valid => 0 in this case).

Or could I do something like this:
my $parameter_config = SUPER->parameter_config; $parameter_config->{max_length}{max} = 255; $parameter_config->{max_length}{default} = 255; sub parameter_config { $parameter_config }
My classes not only inherit from base_class.pm. There are also datatypes that inherit from other datatypes. Such as Text inherits from String (but no direct base_class) and PrimaryKey inherits from Integer. Is such inheritance with one of this configuration methods combineable?

My goal is, that I can add new parameters only in base_class (let's say has_double_letters or max_number / min_number) and all the datatypes need only to "activate" this new parameters via the ->valid_parameter(qw(mandatory max_number)) call.

Thanks, Uwe

Replies are listed 'Best First'.
Re: Re: Re: OO - problem with inheritance
by IlyaM (Parson) on Jan 14, 2002 at 20:58 UTC
    my $parameter_config = __PACKAGE__->SUPER::parameter_config; $parameter_config->{max_length}{max} = 255; $parameter_config->{max_length}{default} = 255; sub parameter_config { $parameter_config }
    This should work if you want to register your parameters in base_class. BTW you don't need to override parameter_config at all in this case because SUPER->parameter_config returns hash reference stored in $parameter_config variable in base class. So next two lines do affect hash used by base_class. If it is not desired effect you should clone that hash:
    use Storable qw(dclone); my $parameter_config = dclone(__PACKAGE__->SUPER::parameter_config); $parameter_config->{max_length}{max} = 255; $parameter_config->{max_length}{default} = 255; sub parameter_config { $parameter_config }
    Update: Fixed usage of wrong syntax (SUPER->method instead of __PACKAGE__->SUPER::method)

    --
    Ilya Martynov (http://martynov.org/)

      The hash would need to be cloned. But I have an other idea - see my other posting titled "new idea - please comment on this".
      Thanks.
      Hello Ilya,
      I need your help. I have written an Parameter::Validate module. And now I would like to use it as you said.
      use strict; use lib '/home/uwe/cvs/perl'; use lib '/home/uwe/cvs/perl/module'; use Parameter::Validate; use base 'CCS::Data::Datatype::base_class'; # parameter configuration #my $pv = CCS::Data::Datatype::base_class->pv->clone; my $pv = SUPER->pv->clone; $pv->enable(qw(mandatory min_length max_length)); $pv->change(max_length => {max => 255, default => 255}, min_length => {max => 255}); sub pv { $pv; }
      If I use the full qualified parent class name (CCS::Data::Datatype::base_class->pv) everything works like expected. But if I use the line with SUPER->pv I get an error: Can't locate object method "pv" via package "SUPER" (perhaps you forgot to load "SUPER"?) at /home/uwe/cvs/perl/CCS/Data/Datatype/String.pm line 16.
      So, what is wrong with SUPER?

      Thank you, Uwe
        I'm sorry I gave you example which uses wrong syntax. See updated node for fix. Instead of SUPER->pv it should be YourPackage->SUPER::pv. Here YourPackage is full qualified name of your subclassed package. Also you can use special token __PACKAGE__ instead of YourPackage. It will be substituted by Perl with this name.

        BTW be careful with selection of package name. FYI CPAN already has Params::Validate. It is not same name but very close.

        --
        Ilya Martynov (http://martynov.org/)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2022-05-18 12:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (70 votes). Check out past polls.

    Notices?