[ https://issues.apache.org/jira/browse/MAHOUT-190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12770621#action_12770621 ]
Sean Owen commented on MAHOUT-190: ---------------------------------- How about this compromise: I think there are several instances that everyone where everyone will agree there's no real case for extension (e.g. test cases). There are some cases where there's a question -- there's some case for extension. I'll prepare a patch where the 'clear' cases are made private, and otherwise, raw access is replaced with getters/setters. This should be a strict improvement. We retain API openness going forward, just in a slightly more organized way. And the non-controversial cases are 'fixed'. > Make all instance fields private > -------------------------------- > > Key: MAHOUT-190 > URL: https://issues.apache.org/jira/browse/MAHOUT-190 > Project: Mahout > Issue Type: Improvement > Affects Versions: 0.2 > Reporter: Sean Owen > Assignee: Sean Owen > Priority: Minor > Fix For: 0.3 > > > This one may be more controversial but is useful and interesting enough to > discuss. > I personally believe instance fields should always be private. I think the > pro- and con- debate goes like this: > Making all fields private increases encapsulation. Fields must be made > explicitly accessible via getters and setters, which is good -- default to > hiding, rather than exposing. Not-hiding a field amounts to committing it to > be a part of the API, which is rarely intended. Using getters/setters allows > read/write access to be independently controlled and even allowed -- allows > for read-only 'fields'. Getters/setters establish an API independent from the > representation which is a Good Thing. > But don't getters and setters slow things down? > Trivially. JIT compilers will easily inline one-liners. Making fields private > more readily allows fields to be marked final, and these two factors allow > for optimizations by (Proguard or) JIT. It could actually speed things up. > But isn't it messy to write all those dang getters/setters? > Not really, and not at all if you use an IDE, which I think we all should be. > But sometimes a class needs to share representation with its subclasses. > Yes, and it remains possible with package-private / protected getters and > setters. This is IMHO a rare situation anyway, and, the code is far easier to > read when fields from a parent don't magically appear, or one doesn't wonder > about where else a field may be accessed in subclasses. I also feel like > sometimes making a field more visible is a shortcut enabler to some bad > design. It usually is a bad smell. > Thoughts on this narrative. Once again I volunteer to implement the consensus. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.