Class-design is a subset of software design: so it all depends.
As the question is little subjective (everybody has a different approach) I will only say that I use this method, without saying that it's the best. Probably there are a lot of different ways.
public interface FuncX {
public void actionX(FuncP p, FuncQ q, FuncR r);
}
And let classes implement this interface. If two classes are small but related, I let them implement both interfaces.
It makes each implementation very easy testable. To bootstrap the system, a main method must create instances of specific classes. This can be configurable, for instance.
public class MyFuncX implements FuncX, FuncP {
public void actionX(FuncP p, FuncQ q, FuncR r) {
...
}
public void actionP(...) {
...
}
}
// the caller:
FuncX x = new MyFuncX(); // dependency
FuncQ q = ...;
FuncR r = ...;
x.actionX(x, q, r);