Skip to content

Object-Oriented Programming

A programming paradigm that organizes computation as interactions among identity-bearing objects that combine state with behavior and respond through method or message dispatch.

Version
v2 · 2026-09-06 · History
Domain-specific #
2408
Origin domain
computer programming
Subdomain
programming paradigms
Aliases
OOP, Object-oriented paradigm

Core Idea

Object-oriented programming organizes a program as a population of objects: computational entities with identity, state, and behavior that collaborate through message sending or method invocation. An object can preserve information across interactions, select behavior according to the message received and its dynamic kind, and hide representation choices behind a behavioral interface. The paradigm is therefore more specific than merely storing records beside procedures.

The stable identity survives differences among languages. Smalltalk emphasizes objects communicating by messages; class-based languages commonly describe method calls and dynamic dispatch; prototype-based languages delegate behavior through objects rather than treating classes as indispensable. Alan Kay's history of Smalltalk makes messaging, state retention, and extreme late binding central to the original lineage.

Scope of Application

The paradigm structures graphical interfaces, simulations, business applications, operating-system services, games, distributed systems, and language runtimes. It is especially useful when a domain can be represented as long-lived participants with changing local state and negotiated behavior.

Different lineages emphasize different roles. Simula supplied class, object, inheritance, and virtual-operation machinery for simulation. Smalltalk treated nearly all computation as messaging among objects. C++ combined classes and virtual dispatch with procedural and systems-programming facilities. Prototype languages use delegation rather than class instantiation as the main sharing route. These are variants of the paradigm, not evidence that any one language feature is sufficient.

Clarity

Consider a request \(m(a_1,\ldots,a_n)\) sent to receiver \(o\). Dispatch can be represented abstractly as

\[ \operatorname{body}=\operatorname{lookup}(\operatorname{dynamicKind}(o),m), \]

followed by execution with \(o\) bound as the current receiver. The object's state may change from \(\sigma_o\) to \(\sigma'_o\), while clients need only the operation's contract. This receiver-sensitive lookup distinguishes polymorphic dispatch from selecting an ordinary overloaded function solely from static argument types.

Manages Complexity

OOP localizes change by assigning responsibilities to objects and exposing limited protocols. A caller that depends on a protocol can ignore whether the receiver stores a table, computes a value lazily, or delegates to another object. Dynamic dispatch replaces some explicit type tests with extensible behavior selection.

Abstract Reasoning

An object may be modeled as a labeled transition system

\[ (\sigma,m,\vec a)\longmapsto(\sigma',r,e), \]

where \(\sigma\) is private state, \(m\) a requested operation, \(\vec a\) arguments, \(r\) a result, and \(e\) externally visible effects. Clients reason from admissible message traces and contracts rather than the full representation.

Knowledge Transfer

The structural roles transfer across class-based, prototype-based, actor-like, component, and distributed-object settings. The concrete meanings of identity, state, and dispatch change: identity may be a memory reference, stable handle, actor address, or persistent key; state may be mutable fields or an encapsulated evolving process; dispatch may be a virtual table, dictionary lookup, multimethod, or delegation chain.

Transfer has limits. Actors enforce stronger isolation and asynchronous messaging than ordinary objects. Abstract data types can hide representation without runtime receiver identity.

Relationships to Other Abstractions

Local relationship map for Object-Oriented ProgrammingParents appear above the current abstraction, mutual partners to the right, and children below. Node labels state whether each abstraction is prime or domain-specific; colors identify relation types.Object-OrientedProgrammingDOMAINPrime abstraction: Abstract Data Type — presupposes, typicalAbstractData TypePRIME

Current abstraction Object-Oriented Programming Domain-specific

Parents (1) — more general patterns this builds on

  • Object-Oriented Programming presupposes, typical Abstract Data Type Prime

    Abstract Data Type is the proposed minimal parent through a typical composition/presupposition relation.

Hierarchy paths (3) — routes to 2 parentless roots

Neighborhood in Abstraction Space

Object-Oriented Programming sits in a sparse region of the domain-specific corpus (83rd percentile for distinctiveness): few abstractions share its structure, so a faithful description tends to retrieve it precisely.

Family — Unclustered & Miscellaneous (1565 abstractions)

Nearest neighbors

Computed from structural-signature embeddings · 2026-09-08