π This article is part of the official Clprolf documentation series (1/6).
Clprolf is a new programming language and framework that adds clarity to OOP by enforcing roles, responsibilities, and clean design.
Clprolf is a language and framework that helps you design objects with a single, explicit responsibility.
By assigning each class a role (also called its declension), you ensure compliance with the Single Responsibility Principle (SRP).
Objects become components, and this clarity remains intact even with inheritance.
What Is a Declension?
A declension expresses the nature of a class β its fundamental role in the system.
Clprolf defines only a few basic roles, which keeps design unambiguous and intuitive.
The five available declensions are:
agent
Synonyms:abstraction,simu_real_obj.worker_agent
Synonyms:comp_as_worker.model
(no synonyms).information
(no synonyms).indef_obj
A flexible object without explicit role, behaving like a traditional OO class.
Synonyms and Aspects
Each declension keeps only a minimal set of synonyms, and every synonym reflects a specific aspect:
-
Agent declension β
agent(agent aspect),abstraction(object aspect),simu_real_obj(simulation aspect) -
Worker_agent declension β
worker_agent(agent aspect),comp_as_worker(simulation aspect) -
Model declension β
model -
Information declension β
information -
Indef_obj declension β
indef_obj
This structure makes the system both easy to memorize and easy to teach.
Synonyms are no longer arbitrary alternatives but clearly justified by the perspective they express.
Business-Like Objects
These objects represent real-world abstractions or domain concepts.
-
agent: the active actor.-
agentemphasizes action. -
simu_real_objemphasizes simulation. -
abstractionemphasizes conceptual encapsulation (e.g., aConnection, aSocket).
-
abstraction: for abstract concepts and system elements (connections, sockets, system utilities).simu_real_obj: a micro-simulation of a real-world entity.
Example: aGiraffeclass with states and behaviors simulating how a giraffe acts.model: a passive entity with no behavior β just attributes.
Example: aCustomerwith fields but no methods.
Technical Objects
These objects handle purely computational or support tasks.
Here, the computer itself is seen as the actor.
worker_agent: the computer as a worker executing algorithms.
Synonyms:comp_as_worker.information: a coherent data container, used by workers in algorithms.
β οΈ Unlikemodel, it does not represent a real-world entity, only technical data.
Examples: system utilities, DAOs, repositories, low-level services, or MVC view components.
Declensions and Genders
Declensions can be refined with genders (optional sub-roles).
They may also have synonyms:
-
@Expert_component=@Human_expert -
@Active_agent(no synonym) -
@Static=@Expert_component_static=@Human_expert_static -
@Staticforworker_agent(no synonym)
β οΈ Genders apply only to agents, except @Static, which may also apply to worker_agent.
Interrelationships Between Declensions
Agents and Workers
Every agent can also act as a worker (computers execute agents as workers).
But explicit workers should be minimized for clarity.Models and Information
A model can be represented as information (stored as data),
but information should not replace a model.-
Unidirectional Substitutions
- Agent β Worker β
- Worker β Agent β
- Model β Information β
- Information β Model β
These reversals usually reveal a design flaw or a deliberate reinterpretation.
Interfaces and Declensions
Interfaces also have declensions:
-
compat_interf_version=version_inh -
compat_interf_capacity=capacity_inh -
compat_interf(no synonym)
Declensions on interfaces specify which classes are allowed to implement them.
Capacity interfaces can also have a gender called Advice:
@For_agent_like@For_worker_like
Inheritance Consistency
Clprolf enforces that inheritance stays role-consistent:
- Business and technical objects cannot be mixed in the same hierarchy.
- Synonyms of a declension are accepted.
- Exceptions may be forced with
@Forced_inh.
Using Declensions
In pure Clprolf, the declension replaces the class keyword.
In the framework, it appears as an annotation above the class.
Example:
@Agent
public class Animal { ... }
Algorithm for Choosing a Declension
Every class must declare a role.
Step 1 β Does the class have methods?
- Yes β it is active β choose
@Agentor@Worker_agent. - No β it is passive β use
@Model(entity) or@Information(technical container).
Step 2 β Is the responsibility business-related or technical?
- Business logic or expert knowledge β
@Agent. - Technical or support layer β
@Worker_agent.
Example: System Class in Java
At first sight: @Worker_agent (low-level, technical).
But Clprolf favors @Agent whenever possible.
System could also be seen as:
-
@Abstractionβ since βthe systemβ is a conceptual entity. -
@Agent(Gender.EXPERT_COMPONENT)β as an expert component representing the environment.
Summary
- Declensions make objects into components with explicit roles.
- Roles clarify responsibilities, improve readability, and ensure inheritance coherence.
- Synonyms keep flexibility while preserving consistency.
Result: a simpler, more maintainable system, where every object is clearly positioned.
Notice
If the class already fits one of the well-known architectural categories, you can directly assign a matching role:
- A service β
@Agent - A helper β
@Agentor@Worker_agent(often withGender.STATIC) - A DAO or repository β
@Worker_agent - A controller β
@Agent
Top comments (0)