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.
Clprolf is based on two core principles:
These principles define how Clprolf structures components and relationships.
The class domain is the central subject around which a class is organized. It defines what the class fundamentally represents and what it is responsible for.
For example:
File class has a class domain related to file handling.Random class has a class domain related to random generation.Connection class has a class domain related to connection management.PdfGenerator class has a class domain related to PDF generation.A technical class, by contrast, does not represent a conceptual domain. It provides technical support (e.g., logging, parsing, low-level utilities).
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.
Each declension keeps only a minimal set of synonyms, and every synonym reflects a specific aspect:
agent (agent aspect), abstraction (object aspect), simu_real_obj (simulation aspect)worker_agent (agent aspect), comp_as_worker (simulation aspect)modelinformationindef_objThis 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.
These objects represent real-world abstractions or domain concepts.
agent: the active actor.
agent emphasizes action.simu_real_obj emphasizes simulation.abstraction emphasizes conceptual encapsulation (e.g., a Connection, a Socket).abstraction: for abstract concepts and system elements (connections, sockets, system utilities).
simu_real_obj: a micro-simulation of a real-world entity.
Example: a Giraffe class with states and behaviors simulating how a giraffe acts.
model: a passive entity with no behavior — just attributes.
Example: a Customer with fields but no methods.
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.
⚠️ Unlike model, it does not represent a real-world entity, only technical data.
Examples: system utilities, DAOs, repositories, low-level services, or MVC view components.
Interfaces also have declensions:
compat_interf_version = version_inhcompat_interf_capacity = capacity_inhcompat_interf (no synonym)Clprolf enforces that inheritance stays role-consistent:
@Forced_inh.In pure Clprolf, the declension replaces the class keyword.
In the framework, it appears as an annotation above the class.
Example:
public class_for agent Animal { ... }
@Agent
public class Animal { ... }
Every class must declare a role.
Step 1 – Does the class have methods?
@Agent or @Worker_agent.@Model (entity) or @Information (technical container).Step 2 – Is the responsibility domain or technical?
@Agent.@Worker_agent.Result: a simpler, more maintainable system, where every object is clearly positioned.
If the class already fits one of the well-known architectural categories, you can directly assign a matching role:
@Agent@Agent or @Worker_agent@Worker_agent@Agent