[Bioperl-l] Use of Root.pm versus RootI.pm

Chris Fields cjfields at uiuc.edu
Tue Oct 3 10:29:51 EDT 2006


> The interface classes (those ending in 'I') should actually inherit
> from RootI, not Root.
> 
> In reality this recommendation is more theoretical than it makes that
> much of a difference I think. The motivation is that interface
> classes should not determine the actual implementation of a class
> (hash ref, array ref, whatever), and since Root.pm contains lots of
> implementation using a hash ref that decision will basically have
> been made.
> 
> On the contrary though, RootI contains implementation too, although
> I'm not sure it would prescribe the object implementation as opposed
> to merely implementing static methods (like throw(), warn(), etc).
> That would need to be checked.
> 
> 	-hilmar

The constructor in Bio::Root::RootI lets one know that its use is
deprecated, so you shouldn't have any cases of 'our qw(Bio::Root::RootI)';
there should be some way of inheriting Root directly or indirectly.  I would
say that any direct use of RootI is not good practice, though.  For the
current implementation we should only inherit Bio::Root::Root, which
implements RootI.

Is there any reason to shut off the warning with BIOPERLDEBUG?  

>From RootI:

sub new {
  my $class = shift;
  my @args = @_;
  unless ( $ENV{'BIOPERLDEBUG'} ) {
      carp("Use of new in Bio::Root::RootI is deprecated.  Please use
Bio::Root::Root instead");
  }
  eval "require Bio::Root::Root";
  return Bio::Root::Root->new(@args);
}


Christopher Fields
Postdoctoral Researcher - Switzer Lab
Dept. of Biochemistry
University of Illinois Urbana-Champaign



> 
> On Oct 3, 2006, at 12:30 AM, Torsten Seemann wrote:
> 
> > My understanding is that all Bioperl-compliant classes should inherit
> > from Bio::Root::Root, not Bio::Root::RootI.
> >
> > Additionally, if functions such as throw() or _rearrange() are to be
> > used without a class instance reference, they are to be used as class
> > methods via Bio::Root::Root, not Bio::Root::RootI.
> >
> > Is this correct?
> >
> > My naive audit of bioperl-live CVS brought up the following
> > statistics:
> >
> > # Root.pm
> > /cvs/bioperl-live $ grep -r 'use Bio::Root::Root;' Bio | wc -l
> > 26
> > /cvs/bioperl-live $ grep -r 'use base.*Bio::Root::Root' Bio | wc -l
> > 346
> >
> > # RootI.pm
> > /cvs/bioperl-live $ grep -r 'use Bio::Root::RootI;' Bio | wc -l
> > 9
> > /cvs/bioperl-live $ grep -r 'use base.*Bio::Root::RootI' Bio | wc -l
> > 79
> >
> > My guess would be that all RootI should be changed to plain Root ?
> >
> > Any help appreciated,
> >
> > --
> > Dr Torsten Seemann               http://www.vicbioinformatics.com
> > Victorian Bioinformatics Consortium, Monash University, Australia
> >
> > _______________________________________________
> > Bioperl-l mailing list
> > Bioperl-l at lists.open-bio.org
> > http://lists.open-bio.org/mailman/listinfo/bioperl-l
> >
> 
> --
> ===========================================================
> : Hilmar Lapp  -:-  Durham, NC  -:-  hlapp at gmx dot net :
> ===========================================================
> 
> 
> 
> 
> 
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l



More information about the Bioperl-l mailing list