in reply to OO design question

I would write a base class that that has the methods for getting and setting data. I would then write individual sub classes that inherit from that base class. This way, you would only have to check the type once, and bless the object into the proper class.

my @a=qw(random brilliant braindead); print $a[rand(@a)];

Replies are listed 'Best First'.
Re: Re: OO design question
by nop (Hermit) on Apr 26, 2001 at 17:57 UTC
    Can you explain in more detail, or sketch a toy example?
      How 'bout:
      #!/usr/bin/perl -w ### set up some packages ### this would normally be done using their own files { package Nifty; sub new { my $type = shift; my $self = {@_}; if( $self->{type} ){ # require $self->{type}; # if the Nifty::A packages # were in their own files $type = $self->{type}; } return bless( $self, $type); } sub get { return "Some_Value"; } ### default print method sub print_it { my $self = shift; my $str = shift; return $str; } } { package Nifty::A; @Nifty::A::ISA = qw(Nifty); sub print_it { my $self = shift; my $str = shift; return "<a href=$str>$str</a>"; } } { package Nifty::B; @Nifty::B::ISA = qw(Nifty); sub print_it { my $self = shift; my $str = shift; return uc($str); } } # more types et cetera ### here is the main program use strict; my ($obj,$val); $obj = Nifty->new(); $val = $obj->get(); print $obj->print_it( $val ) ,"\n"; $obj = Nifty->new(type=>'Nifty::A'); $val = $obj->get(); print $obj->print_it( $val ) ,"\n"; $obj = Nifty->new(type=>'Nifty::B'); $val = $obj->get(); print $obj->print_it( $val ) ,"\n"; exit;


      Basically, put the normal functionality in the base class. Anything that changes, put in the sub classes.

      my @a=qw(random brilliant braindead); print $a[rand(@a)];