Introduction
Beyond specific notations and diagrams, the object-oriented approach rests on a small set of underlying themes that give it its distinctive character. This section works through six of them in turn — abstraction, encapsulation, combining data and behavior, sharing, an emphasis on object structure, and synergy — each describing a different way in which object-oriented thinking departs from, and improves on, more traditional approaches to software development.
11.3.1 Abstraction
Abstraction means concentrating on the essential characteristics of an object relative to the perspective of the viewer, while ignoring characteristics that are not relevant to that purpose. A single real-world thing can be abstracted in different, equally valid ways depending on why the model is being built — a vehicle looked at by a traffic-planning system and the same vehicle looked at by an insurance system will end up represented very differently, because each cares about different aspects of it.
This selective focus is what makes complex problems tractable. By deliberately setting aside detail that doesn't matter for the task at hand, a designer keeps a model small and understandable enough to reason about, while still capturing what genuinely drives the behavior of the system.
21.3.2 Encapsulation
Encapsulation, also called information hiding, separates the external, observable behavior of an object from the internal details of how that behavior is implemented. Other parts of a system interact with an object only through its defined interface — its operations — without needing to know, or being allowed to depend on, how those operations are actually carried out internally.
This separation gives a system resilience to change: because the internal representation of an object is hidden behind its interface, that representation can later be modified or optimized without breaking any of the other code that uses the object, so long as the interface itself stays the same.
31.3.3 Combining Data and Behavior
Traditional programming techniques tend to treat data structures and the procedures that act on them as two separate things, connected only loosely and often maintained in different parts of a program. The object-oriented approach instead bundles data and the operations that manipulate that data together into a single unit — the object — so that an object's behavior and its state are never far apart.
This combination keeps a system's logic organized around the things it models rather than around a sequence of isolated functions, making it easier to locate the code responsible for a given piece of behavior and reducing the risk that data gets modified by code that doesn't properly understand its meaning or constraints.
51.3.5 Emphasis on Object Structure
Object-oriented development places the structure of objects — what they are and how they relate to one another — at the center of the design process, rather than starting from the functions a system must perform. Because the functions a system needs to support tend to change more often than the underlying things the system is about, building around object structure tends to produce a more stable foundation to design on.
Starting with structure also gives developers a natural, shared vocabulary for talking about a problem, since the objects and their relationships are usually much closer to how domain experts already describe the real-world situation than a list of processing steps would be.
61.3.6 Synergy
Synergy is the theme that ties the others together: abstraction, encapsulation, the combination of data and behavior, sharing, and an emphasis on object structure are far more powerful used together than any one of them would be on its own. Applied jointly, they tend to produce software that is cleaner, more general, and more robust than software built using only some of these ideas.
Summary
| Subsection | Theme | Core Idea |
|---|---|---|
| 1.3.1 | Abstraction | Focus on what matters for the purpose at hand; ignore the rest |
| 1.3.2 | Encapsulation | Hide internal implementation behind a defined interface |
| 1.3.3 | Combining Data and Behavior | Bundle state and operations together in a single object |
| 1.3.4 | Sharing | Reuse common structure and behavior instead of duplicating it |
| 1.3.5 | Emphasis on Object Structure | Design around stable real-world structure rather than transient functions |
| 1.3.6 | Synergy | The themes together are more powerful than any one alone |
Reference
Rumbaugh, J., Blaha, M., Premerlani, W., Eddy, F., & Lorensen, W. (1991). Object-Oriented Modeling and Design, Chapter 1, Section 1.3: Object-Oriented Themes. Prentice Hall International / Prentice Hall India.
This page follows the subsection structure of 1.3.1–1.3.6 as provided, with explanations written in original language for study purposes rather than reproduced from the source text.