Making things protected breaks encapsulation, while keeping them
private hampers extensibility. Ideally, we would go through careful
design phases and consider all such issues, coming up with clean
interfaces that allow just enough visibility into reference
implementations of public-facing interfaces and abstract classes to do
what a user might need, while keeping the internal workings of Pig
isolated. So, yes.  But that involves either foreseeing all possible
use cases, or forcing a user to choose between waiting on a 3+ month
release cycle and maintaining their own patched version of Pig,
instead of an official release. With that in mind, I would favor
usability and extensibility over implicitly encouraging programming by
cut-n-paste.

Naturally, I am talking about implementations of user-facing
abstractions here -- UDFs, Load/Store funcs, Input formats, etc. Since
anyone trying to do things like create new physical operators would be
working inside the Pig guts anyway, they can turn things protected if
they want to, so that's fine.


On Tue, Feb 2, 2010 at 10:28 PM, Pradeep Kamath <prade...@yahoo-inc.com> wrote:
> Would it be better to make them protected when a use case for
> inheritance arises rather than begin as protected?
>
> -----Original Message-----
> From: Dmitriy Ryaboy [mailto:dvrya...@gmail.com]
> Sent: Tuesday, February 02, 2010 7:35 PM
> To: pig-dev@hadoop.apache.org
> Subject: Private variables are not eco-friendly
>
> Hi all,
> I keep running into problems trying to extend Pig due to variables
> being declared private. The latest time around it was in PigSlice --
> one can't inherit it and do much meaningful overriding of methods
> because the input streams are private rather than protected, so I
> can't change how it gets created. I wound up having to copy+paste the
> class wholesale, which is unfortunate. I know the Slice/Slicer
> interfaces are going away, but as a general rule -- can we be mindful
> of folks trying to extend classes, and make inner members protected,
> rather than private or package?
>
> Thanks
> -Dmitriy
>

Reply via email to