Some time ago, a professor of mine was trying to create a program using a particular toolset. This toolset had a publicly-declared programming interface, but no means of restricting access. Unfortunately none of the documented public interface would let the professor make the program work as desired. Being clever and resourceful, the professor figured out how to change some data the toolset used that was not accessible through the publicly-declared interface. To the professor's surprise however, the program still did not work as hoped, changing the data "behind the scenes" had unintended, collateral consequences that made the program crash and burn. Just so the record is clear, let me state emphatically that my professor was justified in violating the so-called encapsulation presented by the toolset. It is not the programmer's job to give up easily and tell the user, "Sorry, but the toolset doesn't do what you want". The programmer's job is to be clever and resourceful and find a way to implement the design if at all practicable. If the toolset frustrates every devious attempt to get the program to work as desired, it is then, of course, the duty of the programmer to publicly lampoon the toolset's promotional literature and place an evil curse on the software company that developed it.