Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Autoload versus auto-generating accessors

by Arunbear (Prior)
on Feb 12, 2016 at 10:58 UTC ( [id://1155061]=note: print w/replies, xml ) Need Help??


in reply to Autoload versus auto-generating accessors

Compared to auto-generating, using Autoload is

  • Slower, because the inheritance hierarchy will be searched before getting to AUTOLOAD
  • Trickier - did you remember to handle DESTROY? Did you handle disallowed methods?

But a more important question to consider is - Should I be using getters and setters?

The short answer is "most likely not", but for more depth see BrowserUk's answer:Re: OOP's setter/getter method - is there a way to avoid them?

Another good read is Why getter and setter methods are evil. Some relevant quotes are:
A fundamental precept of OO systems is that an object should not expose any of its implementation details. This way, you can change the implementation without changing the code that uses the object. It follows then that in OO systems you should avoid getter and setter functions since they mostly provide access to implementation details.
and
This implementation hiding principle leads to a good acid test of an OO system's quality: Can you make massive changes to a class definition—even throw out the whole thing and replace it with a completely different implementation—without impacting any of the code that uses that class's objects? This sort of modularization is the central premise of object orientation and makes maintenance much easier. Without implementation hiding, there's little point in using other OO features.
  • Comment on Re: Autoload versus auto-generating accessors

Replies are listed 'Best First'.
Re^2: Autoload versus auto-generating accessors
by goldenblue (Acolyte) on Feb 12, 2016 at 16:06 UTC

    well... I do have @rw and @ro vars in the code that the Autoload checks against... And I don't protect against truly malicious code, it's all company internal. I basically wrote a Base class and want people to use it without too much effort... and handle all the 'if this is a reference to a hash, do this, if it a reference to an array...' so, the accessors are just supposed to be syntactic sugar. I don't like all the {''} extras...

    So, it is basically my way of using the 'public' interface of the class... What it does allow me is that when someone uses these accessors, I don't give away references to the data, but make sure that only copies are passed.

    If thatsyntactic sugar is used.

    also, I admit I am not concerned about speed.


    --

      I forget: my main reason for using OO-like implementation in perl is inheritance...

      And because all of the classes in this package are written that way...


      --

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (3)
As of 2024-04-19 19:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found