Encapsulation means the enclosing internal features or ideas.
In the context of computer science, this term means the logical separation of a concept from another. Often this is related to the hiding of information behind a defined interface.
There are two important parts to encapsulation:
- Decomposing a system into small, self-contained chunks such as packages and classes. This makes the complexity of the system more manageable because developers can look at just one chunk at a time.
- Hiding the internal details of one chunk from the rest of the system (Information hiding).
In OO design, this term takes on a stronger meaning. Not only is encapsulation from the user, other computing entities or even other programs, but also within programs themselves.
In OO design, several different types of encapsulation are proposed:
- Object Encapsulation
- Class Encapsulation
- Hybrid Encapuslation (Any form of blend between class and object encapsulation)
- Limited/no encapsulation
Encapsulation provides a number of benefits, including:
- The system is easier to understand and modify because it is broken up into small and manageable chunks.
- If data is hidden inside its class, this means that the class that owns the data is in control of the data and it cannot be inadvertently changed by other classes.
- If data is hidden inside its class, the class can enforce validity checks to ensure the data doesn't get into an invalid state.
- If the internal details of a chunk change, the rest of the system will not be affected because it is not dependent on the internal details that have changed.
- Encapsulation boundary
- Encapsulation is hierarchical
- Equals vs the Encapsulation Boundary
- Encapsulate concrete state pattern
- Information hiding
- Access levels
|Techniques: Abstraction | Aggregation versus Composition | Association versus Dependency | Coupling | Encapsulation | Information hiding | Inheritance | Multiple Inheritance | Overloading | Polymorphism
Features: Abstract class | Class versus Object | Component versus Module | Instance | Interface | Method | Package versus Namespace | Superclass | Subclass