Beefy Boxes and Bandwidth Generously Provided by pair Networks httptech
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

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

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


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


Comment on Re: Why get() and set() accessor methods are evil
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://310013]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (9)
As of 2014-04-24 10:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (565 votes), past polls