- Information hiding
In computer science, information hiding is the principle of segregation of the design decisions in a computer program that are most likely to change, thus protecting other parts of the program from extensive modification if the design decision is changed. The protection involves providing a stable interface which protects the remainder of the program from the implementation (the details that are most likely to change).
Written another way, information hiding is the ability to prevent certain aspects of a class or software component from being accessible to its clients, through an explicit exporting policy and through reliance on the short form[clarification needed] as the primary vehicle for class documentation.
The term encapsulation is often used interchangeably with information hiding. Not all agree on the distinctions between the two though; one may think of information hiding as being the principle and encapsulation being the technique. A software module hides information by encapsulating the information into a module or other construct which presents an interface.
A common use of information hiding is to hide the physical storage layout for data so that if it is changed, the change is restricted to a small subset of the total program. For example, if a three-dimensional point (x,y,z) is represented in a program with three floating point scalar variables and later, the representation is changed to a single array variable of size three, a module designed with information hiding in mind would protect the remainder of the program from such a change.
In object-oriented programming, information hiding (by way of nesting of types) reduces software development risk by shifting the code's dependency on an uncertain implementation (design decision) onto a well-defined interface. Clients of the interface perform operations purely through it so if the implementation changes, the clients do not have to change.
In his influential book on object-oriented design, Grady Booch defined encapsulation as "the process of compartmentalizing the elements of an abstraction that constitute its structure and behavior; encapsulation serves to separate the contractual interface of an abstraction and its implementation." This formulation is cited by a number of books as an authoritative definition of encapsulation.
The purpose is to achieve potential for change: the internal mechanisms of the component can be improved without impact on other components, or the component can be replaced with a different one that supports the same public interface. Encapsulation also protects the integrity of the component, by preventing users from setting the internal data of the component into an invalid or inconsistent state. Another benefit of encapsulation is that it reduces system complexity and thus increases robustness, by limiting the interdependencies between software components.
In this sense, the idea of encapsulation is more general than how it is applied in OOP: for example, a relational database is encapsulated in the sense that its only public interface is a Query language (SQL for example), which hides all the internal machinery and data structures of the database management system. As such, encapsulation is a core principle of good software architecture, at every level of granularity.
Encapsulating software behind an interface allows the construction of objects that mimic the behavior and interactions of objects in the real world. For example, a simple digital alarm clock is a real-world object that a lay person can use and understand. They can understand what the alarm clock does, and how to use it through the provided interface (buttons and screen), without having to understand every part inside of the clock. Similarly, if you replaced the clock with a different model, the lay person could continue to use it in the same way, provided that the interface works the same.
In the more concrete setting of an object-oriented programming language, the notion is used to mean either an information hiding mechanism, a bundling mechanism, or the combination of the two. (See Encapsulation (object-oriented programming) for details.)
The concept of information hiding was first documented in a paper by David Parnas, "On the Criteria to Be Used in Decomposing Systems Into Modules" published in the Communications of the ACM in December 1972. Before then, modularity was discussed by Richard Gauthier and Stephen Pont in their 1970 book titled Designing Systems Programs although modular programming itself had been used at many commercial sites for many years previously - especially in I/O sub-systems and software libraries- without acquiring the 'information hiding' tag - but for similar reasons (as well as the more obvious code reuse reason).
Example of information hiding
Information hiding serves as an effective criterion for dividing any piece of equipment, software or hardware, into modules of functionality. For instance a car is a complex piece of equipment. In order to make the design, manufacturing, and maintenance of a car reasonable, the complex piece of equipment is divided into modules with particular interfaces hiding design decisions. By designing a car in this fashion, a car manufacturer can also offer various options while still having a vehicle which is economical to manufacture.
For instance, a car manufacturer may have a luxury version of the car as well as a standard version. The luxury version comes with a more powerful engine than the standard version. The engineers designing the two different car engines, one for the luxury version and one for the standard version, provide the same interface for both engines. Both engines fit into the engine bay of the car which is the same between both versions. Both engines fit the same transmission, the same engine mounts, and the same controls. The differences in the engines are that the more powerful luxury version has a larger displacement with a fuel injection system that is programmed to provide the fuel air mixture that the larger displacement engine requires.
In addition to the more powerful engine, the luxury version may also offer other options such as a better radio with CD player, more comfortable seats, a better suspension system with wider tires, and different paint colors. With all of these changes, most of the car is the same between the standard version and the luxury version. The radio with CD player is a module which replaces the standard radio, also a module, in the luxury model. The more comfortable seats are installed into the same seat mounts as the standard types of seats. Whether the seats are leather or plastic, or offer lumbar support or not, doesn't matter.
The engineers design the car by dividing the task up into pieces of work which are assigned to teams. Each team then designs their component to a particular standard or interface which allows the sub-team flexibility in the design of the component while at the same time ensuring that all of the components will fit together.
Motor vehicle manufacturers frequently use the same core structure for several different models, in part as a cost-control measure. Such a "platform" also provides an example of information hiding, since the floorpan can be built without knowing whether it is to be used in a sedan or a hatchback.
As can be seen by this example, information hiding provides flexibility. This flexibility allows a programmer to modify functionality of a computer program during normal evolution as the computer program is changed to better fit the needs of users. When a computer program is well designed decomposing the source code solution into modules using the principle of information hiding, evolutionary changes are much easier because the changes typically are local rather than global changes.
Cars provide another example of this in how they interface with drivers. They present a standard interface (pedals, wheel, shifter, signals, gauges, etc.) on which people are trained and licensed. Thus, people only have to learn to drive a car; they don't need to learn a completely different way of driving every time they drive a new model. (Granted, there are manual and automatic transmissions and other such differences, but on the whole cars maintain a unified interface.)
Relation to object-oriented programming
The authors of Design Patterns discuss the tension between inheritance and encapsulation at length and state that in their experience, designers overuse inheritance (Gang of Four 1995:20). The danger is stated as follows:
- "Because inheritance exposes a subclass to details of its parent's implementation, it's often said that 'inheritance breaks encapsulation'". (Gang of Four 1995:19)
- Implementation inheritance
- Inheritance semantics
- Modularity (programming)
- Virtual inheritance
- Transparency (computing)
- Scope (programming)
- Compartmentalization (information security)
Wikimedia Foundation. 2010.
Look at other dictionaries:
Information Hiding — [engl.], Kapselung … Universal-Lexikon
Information Hiding — Geheimnisprinzip; im ⇡ Software Engineering ein ⇡ Modularisierungsprinzip; grundlegende Bedeutung für die Software Technologie (⇡ Software Engineering). I.H. besagt, dass die Art und Weise, wie ein Modul seine Aufgaben erfüllt, im Innern des… … Lexikon der Economics
Hiding — (also called abscondence or concealment) is obscuring something from view or rendering it inconspicuous. Hiding may also refer to: Hiding Out, a 1987 movie starring Jon Cryer. A Figure in Hiding , Volume 16 in the original Hardy Boys book series … Wikipedia
Hiding Inside the Horrible Weather — Infobox Album | Name = Hiding Inside the Horrible Weather Type = Album Artist = My American Heart Released = June 26, 2007 Recorded = Genre = Emo Length = 40:20 Label = Warcon Producer = James Paul Wisner US Billboard Chart Peak = 28 Reviews =… … Wikipedia
Error hiding — is an anti pattern, in computer programming. The programmer hides error messages by overriding them with exception handling. As a result of this the root error message is hidden from the user (hence error hiding ) and so they will not be told… … Wikipedia
And the Rock Cried Out, No Hiding Place — Infobox Television episode Title = And the Rock Cried Out, No Hiding Place Series = Babylon 5 Caption = Season = 3 Episode = 20 Airdate = 14 October 1996 8 September 1996 (UK) Production = 320 Writer = J. Michael Straczynski Director = David… … Wikipedia
Phi-hiding assumption — The Phi Hiding assumption or Φ Hiding assumption is an assumption about the difficulty of finding small factors of φ( m ) where m is a number whose factorization is unknown, and φ is Euler s totient function. The security of many modern… … Wikipedia
Private information retrieval — In cryptography, a private information retrieval (PIR) protocol allows a user to retrieve an item from a server in possession of a database without revealing which item she is retrieving. PIR is a weaker version of 1 out of n oblivious transfer,… … Wikipedia
Public information film — Public Information Films (known as PIFs) are a series of government commissioned short films, shown during television advertising breaks in the UK. The US equivalent is the Public Service Announcement (PSAs). ubjectsThe films advised the public… … Wikipedia
Geheimnisprinzip — ⇡ Information Hiding … Lexikon der Economics