@Fauveboy Yes, you can use [abstraction 1], [abstraction 2] to distinguish different abstractions. And if you are very confident that you will never open up two instances of your patch at the same time, this would be enough. But if you open up two instances somewhere in the future, they will interfere with each other, if you have something like [send $1-something] inside the abstraction.
i use $0 all the time just to be sure and don't have to worry, but it is up to you. i would for example use [abstraction $0 1], [abstraction $0 2], if the abstractions would need to communicate with the main patch or each other. The important thing here is that every send, receive, text, array and struct get some $0, but this is only if you maybe open two instances at any time at once.
The other thing is that $-arguments in objects and messages work completely differently. As @whale-av just described while i am typing...