Beyond Objects
Summary
A core principle of object orientation (OO), which partitions system functionality among objects corresponding to problem domain individuals, has profoundly influenced software development for over fifty years. This paper argues that this partitioning is neither natural nor straightforward, leading to inevitable problems like fragmentation and conflation of functionality, making software difficult to write, read, and maintain. It critiques how actions involving multiple individuals are often arbitrarily assigned to single objects, resulting in poor modularity and problematic dependencies, even in modern web frameworks utilizing object-relational mappers. The article proposes an alternative "concept" approach, which decouples problem domain individuals from functional modules. This method uses "concepts" to encapsulate actions and relations over individuals, allowing a single individual to participate in multiple concepts and coordinating behaviors through declarative action synchronization, aiming for stronger modularity, clearer separation of concerns, and better alignment with problem domain types.
Key takeaway
For AI Architects and Software Engineers designing new systems or refactoring existing ones, understand that object orientation's core principle of assigning computations to domain objects often creates fragmented and tightly coupled code. This leads to conflation and technical debt. Instead, explore "relational modularity" using concepts. This approach decouples domain individuals from functional modules, coordinating via action synchronization. It promises clearer separation of concerns and improved legibility, especially with LLM-based code generation.
Key insights
Object orientation's core principle of assigning computations to domain objects inherently causes modularity issues.
Principles
- Object orientation's core principle leads to fragmentation and conflation.
- Decouple domain individuals from functional modules for better modularity.
- Externalize coordination between modules via action synchronization.
Method
The "concept" approach defines modules (concepts) that encapsulate actions and relations over individuals, allowing individuals to span multiple concepts. Coordination occurs via declarative action synchronization rules.
In practice
- Represent concepts as classes in object-oriented languages.
- Use event-driven architectures for concept synchronization.
- Generate concept specifications and implementations one at a time.
Topics
- Object-Oriented Critique
- Software Modularity
- Concept-Oriented Design
- Relational Modularity
- Action Synchronization
- Software Architecture
Code references
Best for: AI Scientist, Software Engineer, Research Scientist, AI Architect
Related on AIssential
Editorial summary, takeaway, and curation by AIssential. Original article published by cs.SE updates on arXiv.org.