There are a lot of nice advices here. Thanks to all.

Quote Originally Posted by SilverWarior View Post
One piece of advice. If you are extending some class with new functionality it is recommended to change the name of the extended class in order to avoid confusing it with the original class that it was extended from.
Yes, I've learned that the hard way.

The injection thing is interesting but I think I'll not do that way.

Quote Originally Posted by drezgames View Post
Maybe this:
<Action><Object><Attribute/State>();// Do an Action over some Object Attribute/State
This is how I tend to make my APIs, more info about this here:
raylib syntax analysis · raysan5/raylib Wiki (github.com)
That's a nice way. Maybe I should review my API now I'm (re)starting it.

Quote Originally Posted by Chebmaster View Post
The second one BUT use classes with class (static) methods instead of unit names.
This way you *cannot* call method without specifying which.
And can pack several ones in the same unit
And move them between units if you need to change architecture -- without touching the calling code
I didn't realize I can do that. I did in some PHP projects but forgot completely there are also static class methods and properties in Pascal. Since I'll revisit my API I'll see how this may fit with the old-school I want to archieve.