Declarative handling of state as performed via predicates, grammar rules (both DCGs and EDCGs), or parametric objects (and, related, as handled by optionals and expecteds libraries and similar) is well understood. But my cautionary advice in my previous message is about mutable state (either using dynamic predicates or dynamic entities), which should always be avoided and, if not possible, minimized in Logtalk/Prolog applications. This is also common advice as mutable state breaks declarative semantics. What’s not (yet) widespread is the very idea of declarative object-oriented programming. Fighting and breaking the common and immediate association of objects with imperative semantics is key to move logic programming past the limitations of module systems.