A mio parere, le variabili di istanza sono necessarie solo quando i dati verranno utilizzati tra le chiamate.
Ecco un esempio:
myCircle = myDrawing.drawCircle(center, radius);
Ora immaginiamo che la classe myDrawing utilizzi 15 funzioni di supporto per creare l'oggetto myCircle e ciascuna di queste funzioni avrà bisogno del centro e del raggio. Non dovrebbero comunque essere impostati come variabili di istanza della classe myDrawing. Perché non saranno mai più necessari.
D'altra parte, la classe myCircle dovrà memorizzare sia il centro che il raggio come variabili di istanza.
myCircle.move(newCenter);
myCircle.resize(newRadius);
Affinché l'oggetto myCircle sappia qual è il raggio e il centro quando vengono effettuate queste nuove chiamate, devono essere archiviate come variabili di istanza, non solo passate alle funzioni che ne hanno bisogno.
Quindi, fondamentalmente, le variabili di istanza sono un modo per salvare lo "stato" di un oggetto. Se una variabile non è necessaria per conoscere lo stato di un oggetto, non dovrebbe essere una variabile di istanza.
E per quanto riguarda rendere tutto pubblico. Potrebbe semplificarti la vita in questo momento. Ma tornerà a perseguitarti. Per favore, non farlo.