Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

class::virtual(3pm) [debian man page]

Class::Virtual(3pm)					User Contributed Perl Documentation				       Class::Virtual(3pm)

NAME
Class::Virtual - Base class for virtual base classes. SYNOPSIS
package My::Virtual::Idaho; use base qw(Class::Virtual); __PACKAGE__->virtual_methods(qw(new foo bar this that)); package My::Private::Idaho; use base qw(My::Virtual::Idaho); # Check to make sure My::Private::Idaho implemented everything my @missing = __PACKAGE__->missing_methods; die __PACKAGE__ . ' forgot to implement ' . join ', ', @missing if @missing; # If My::Private::Idaho forgot to implement new(), the program will # halt and yell about that. my $idaho = My::Private::Idaho->new; # See what methods we're obligated to implement. my @must_implement = __PACKAGE__->virtual_methods; DESCRIPTION
This is a base class for implementing virtual base classes (what some people call an abstract class). Kinda kooky. It allows you to explicitly declare what methods are virtual and that must be implemented by subclasses. This might seem silly, since your program will halt and catch fire when an unimplemented virtual method is hit anyway, but there's some benefits. The error message is more informative. Instead of the usual "Can't locate object method" error, you'll get one explaining that a virtual method was left unimplemented. Subclass authors can explicitly check to make sure they've implemented all the necessary virtual methods. When used as part of a regression test, it will shield against the virtual method requirements changing out from under the subclass. Finally, subclass authors can get an explicit list of everything they're expected to implement. Doesn't hurt and it doesn't slow you down. Methods virtual_methods Virtual::Class->virtual_methods(@virtual_methods); my @must_implement = Sub::Class->virtual_methods; This is an accessor to the list of virtual_methods. Virtual base classes will declare their list of virtual methods. Subclasses will look at them. Once the virtual methods are set they cannot be undone. missing_methods my @missing_methods = Sub::Class->missing_methods; Returns a list of methods Sub::Class has not yet implemented. CAVEATS and BUGS Autoloaded methods are currently not recognized. I have no idea how to solve this. AUTHOR
Michael G Schwern <schwern@pobox.com> LEGAL
Copyright 2000, 2001, 2003, 2004 Michael G Schwern This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html> SEE ALSO
Class::Virtually::Abstract perl v5.10.1 2007-10-23 Class::Virtual(3pm)

Check Out this Related Man Page

Plugin(3pm)						User Contributed Perl Documentation					       Plugin(3pm)

NAME
Class::DBI::Plugin - Abstract base class for Class::DBI plugins SYNOPSIS
use base 'Class::DBI::Plugin'; sub init { my $class = shift; $class->set_sql( statement_name => ... ); $class->add_trigger( ... ); $class->columns( TEMP => ... ); } sub method_name : Plugged { my $class = shift; $class->sql_statement_name( ... ); } sub this_method_is_not_exported {} DESCRIPTION
Class::DBI::Plugin is an abstract base class for Class::DBI plugins. Its purpose is to make writing plugins easier. Writers of plugins should be able to concentrate on the functionality their module provides, instead of having to deal with the symbol table hackery involved when writing a plugin module. Only three things must be remembered: 1. All methods which are to exported are given the "Plugged" attribute. All other methods are not exported to the plugged-in class. 2. Method calls which are to be sent to the plugged-in class are put in the init() method. Examples of these are set_sql(), add_trigger() and so on. 3. The class parameter for the init() method and the "Plugged" methods is the plugged-in class, not the plugin class. CAVEATS
So far this module only "sees" methods in the plugin module itself. If there is a class between the base class and the plugin class in the inheritance hierarchy, methods of this class will not be found. In other words, inherited methods will not be found. If requested, I will implement this behaviour. TODO
It may be useful for plugin users to be able to choose only the plugin methods they are interested in, if there are more than one. This is not implemented yet. SEE ALSO
o Class::DBI AUTHOR
Jean-Christophe Zeus, <mail@jczeus.com> with some help from Simon Cozens. Many thanks to Mark Addison for the idea with the init() method, and many thanks to Steven Quinney for the idea with the subroutine attributes. COPYRIGHT AND LICENSE
Copyright (C) 2004 by Jean-Christophe Zeus This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.10.0 2004-07-23 Plugin(3pm)
Man Page