in reply to Re^3: I hate the leading underscores.
in thread I hate the leading underscores.

Agreed. Private methods/variables should have no reason to be called outside a class. If necessary, simply make a public accessor that calls that private method/variable.

What if you don't have access to the original source code? Usually you do in Perl, but it's not always convenient to modify it. You're then at the mercy of someone else's design decisions.

You could have a perfectly legitimate reason for calling a method that someone else thought you wouldn't or shouldn't. The problem with a strict OO design is that it assumes the original design is perfect.

I'm not saying we should always call private methods (otherwise there'd be no need to indicate them with a leading underscore), but it's nice to have the option.

Replies are listed 'Best First'.
Re^5: I hate the leading underscores.
by Anonymous Monk on Feb 16, 2005 at 16:45 UTC
    Just call the method if that pleases you. Noone is stopping you from calling an undocumented method. Just don't be surprised that after an upgrade, the method is no longer there, or causes your system to send out spam.

    That's what private means. It means the author/maintainer keeps the rights to modify it without notice. I don't see the difference between calling a private method or fiddling with attributes directly. It's great as long as it works. But you've voided your warranty. If you do it with my modules, you don't get support, and you don't get sympathy if your program breaks.

Re^5: I hate the leading underscores.
by RazorbladeBidet (Friar) on Feb 16, 2005 at 16:39 UTC
    What if you don't have access to the original source code? Usually you do in Perl, but it's not always convenient to modify it. You're then at the mercy of someone else's design decisions.

    That's usually why you'd need protected elements. So derived classes can access them. But I believe there are cases where you should be mindful of changing access to private information. It's private for a reason.