How can I communicate between objects that doesn't have anything in common without coupling them?

Hello, generally what you did is correct, just you don’t need to implement the interface in ATimeHandler if you don’t want it to react to this interface call.

Only the object that is actually “reacting” the the interface needs to have it implemented - so the PlayerController in your example. This is the actual benefit of the interface that anyone can send the message, but only those that have interface implemented will react to that message.

This is all correct, just the object that is sending the message is not checking if another object is implementing the message - it’s just calling that interface function and if it’s not implemented it will be ignored.

Just to add, if you need to, you can check if object is implementing an interface. This is Blueprint equivalent, but you can probably find C++ function in KismetSystemLibrary: Does Implement Interface | Unreal Engine Documentation