Beefy Boxes and Bandwidth Generously Provided by pair Networks chromatic writing perl on a camel
more useful options
 
PerlMonks  

Re: Why get() and set() accessor methods are evil

by enoch (Chaplain)
on Nov 25, 2003 at 13:45 UTC ( [id://310013]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Why get() and set() accessor methods are evil

Your example is breaking encapsulation. That is, it is avoiding the accessor and reaching in to the internals. If we have the object:
package OOtest; sub new { my $invoker = shift; my $class = ref($invoker) || $invoker; my $self = {}; bless ($self, $class); $self->{list} = []; return $self; } sub get_array { my $self = shift; return $self->{list}; }
To access the array, use the accessor get_array and do not bypass it by delving in and directory accessing the private variable.
my $obj = OOtest->new(); # NOT foreach my $tmp ( @{ $obj->list() } foreach my $tmp ( @{ $obj->get_array() } ) { # process list }
Now, internally, you want to change OOtest to use a hash, but you do not want to break other code that expects it to use (and wants) an array. Behold the beauty of accessors, you merely change the get_array subroutine.
package OOtest; sub new { my $invoker = shift; my $class = ref($invoker) || $invoker; my $self = {}; bless ($self, $class); $self->{list} = (); return $self; } sub get_array { my $self = shift; return values %{$self->{list}}; # anything asking for an array gets + it }
enoch

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://310013]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.