Information hiding
Information hiding is the design principle that a component's internal structure and implementation details should be concealed from other components, which interact with it only through a well-defined interface. The principle was articulated by David Parnas in the 1970s as the foundation of modularity and loose coupling: a module's secrets — its data structures, algorithms, and internal state — are hidden behind a stable interface contract that exposes only what is necessary for coordination.
The purpose of information hiding is not secrecy but change tolerance. When a module's internal implementation is hidden, it can be modified, optimized, or replaced without forcing changes in the components that depend on it. The cost of this encapsulation is that the interface must be designed in advance to accommodate future variation — a design skill that is difficult to teach and rarely practiced well. Poorly designed interfaces leak information: they expose internal state through side effects, return codes, or timing dependencies that reveal what was supposed to be hidden. A leaky interface is not a boundary; it is a window.