home *** CD-ROM | disk | FTP | other *** search
- package protected;
-
- use strict;
-
- use vars qw($VERSION);
-
- $VERSION = 0.04;
-
- use Class::Fields::Fuxor;
- use Class::Fields::Attribs;
-
- sub import {
- #Dump the class.
- shift;
-
- my $package = caller;
- add_fields($package, PROTECTED, @_);
- }
-
- return <<TIP;
- Protect your member! Wear a cup!
- TIP
-
- __END__
- =pod
-
- =head1 NAME
-
- protected - "private" data fields which are inherited by child classes
-
-
- =head1 SYNOPSIS
-
- package Foo;
- use public qw(foo bar );
- use private qw(_private);
- use protected qw(_pants spoon);
-
- sub squonk {
- my($self) = shift;
- $self->{_pants} = 'Infinite Trousers';
- $self->{spoon} = 'What stirs me, stirs everything';
- ...
- }
-
- package Bar;
- # Inherits foo, bar, _pants and spoon
- use base qw(Foo);
- ...
-
-
- =head1 DESCRIPTION
-
- =over 4
-
- =item I<Protected member.>
-
- Restricted data or functionality. An attribute or method only
- directly accessible to methods of the same class or of a subclass, but
- inaccessible from any other scope.
-
- From B<"Object Oriented Perl"> by Damian Conway
-
- =back
-
- The C<protected> module implements something like Protected data
- members you might find in a language with a more traditional OO
- implementation such as C++.
-
- Protected data members are similar to private ones with the notable
- exception in that they are inherited by subclasses. This is useful
- where you have private information which would be useful for
- subclasses to know as well.
-
- For example: A class which stores an object in a database might have a
- protected member "_Changed" to keep track of changes to the object so
- it does not have to waste time re-writing the entire thing to disk.
- Subclasses of this obviously need a _Changed field as well, but it
- would be breaking encapsilation if the author had to remember to "use
- fields qw(_Changed)" (Assuming, of course, they're using fields and
- not just a plain hash. In which case forget this whole module.)
-
-
- =head2 The Camel Behind The Curtain
-
- In reality, there is little difference between a "protected" variable
- and a "public" on in Perl. The only real difference is that the
- protected module doesn't care what the field is called (ie. if it
- starts with an underscore or not) whereas fields uses the name to
- determine if the variable is public or private (ie. inherited or not).
-
-
- =head1 AUTHOR
-
- Michael G Schwern <schwern@pobox.com>
-
-
- =head1 SEE ALSO
-
- L<public>, L<private>, L<fields>, L<Class::Fields>, L<base>
-
- =cut
-