The following module was proposed for inclusion in the Module List:

  modid:       Class::Declare
  DSLIP:       RdpOp
  description: Classes with method/attribute access control
  userid:      IBB (Ian Brayshaw)
  chapterid:    6 (Data_Type_Utilities)
  communities:
    comp.lang.perl.modules

  similar:
    Class::ArrayObjects Class::Contract

  rationale:

    I am not 100% happy with the choice of Class::Declare, even though
    it describes the module and how it's used: you declare the
    attributes and methods and you declare how they are to be accessed
    (public, private, protected, etc). Having run the name past
    comp.lang.perl.modules as well as privately amoungst fellow
    developers I've received no other suggestions.

    Class::Declare offers a clean, Perl-ish interface, that would be
    familiar to developers more accustomed to C++ and Java classes. It
    also provides complete data encapsulation: the only way to access
    object and class data is through the object and class accessors.

    From the README:

    NAME
        Class::Declare - Declare classes with public, private and protected
        attributes and methods.

    SYNOPSIS       package My::Class;

          use strict;       use warnings;
          use base qw( Class::Declare );

          __PACKAGE__->declare( public    => { public_attr    => 42         } ,
                                private   => { private_attr   => 'Foo'      } ,
                                protected => { protected_attr => 'Bar'      } ,
                                class     => { class_attr     => [ 3.141 ]  }
                                static    => { static_attr    => { a => 1 } } ,
                                shared    => { shared_attr    => \'string'  } ,
                                friends   => 'main::trustedsub'               ,
                                init      => sub { # object initialisation
                                                ...
                                                1;
                                             }                                ,
                                strict    => 0
                              );

          sub publicmethod {
            my $self = __PACKAGE__->public( shift );
            ...       }

    The motivation behind the module was to provide a robust and
    relatively secure framework for generating classes that supported
    access control through standard OO relationships of public, private
    and protected. Class::Declare objects are blessed scalar references,
    helping to ensure access to object and class internals occurs only
    through accessors (unlike using a blessed hash reference, where the
    user can access the hash directly).

    This type of class representation and construction is perhaps more
    familiar to those coming from a Java or C++ background, and would
    make porting of applications written in those languages more
    straight forward. Class::Declare supports public, private and
    protected instance and class methods and attributes.

    I have used this approach (a predecessor to Class::Declare) in
    large applications, and found the access control mechanisms (which
    may be disabled in a production environment on a per-module basis to
    accelerate the code execution) to be a great asset during
    development.

    Class::Declare supports multiple inheritance, as well as
    serialisation via Storable. It also provides a number of helper
    routines, such as automatic processing and validation of named
    parameters, and a dump() routine for pretty-printing object and
    class attributes while obeying the access control mechanisms. (Since
    there is no way to access the internal hash in which Class::Declare
    stores the object attribute values, Data::Dumper cannot give
    meaningful output for Class::Declare objects.)

  enteredby:   IBB (Ian Brayshaw)
  enteredon:   Wed Jun  4 11:08:37 2003 GMT

The resulting entry would be:

Class::
::Declare         RdpOp Classes with method/attribute access control IBB


Thanks for registering,
-- 
The PAUSE

PS: The following links are only valid for module list maintainers:

Registration form with editing capabilities:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=eb400000_e441d45ade440093&SUBMIT_pause99_add_mod_preview=1
Immediate (one click) registration:
  
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=eb400000_e441d45ade440093&SUBMIT_pause99_add_mod_insertit=1

Reply via email to