In sostanza non capisco al volo a quale istanza si fa riferimento in una determinata parte del codice e do ,per questo ,scontato che si faccia riferimento a un oggetto a cui in realtà non fa riferimento. Credo di dover riprendere il concetto di Scope per averlo più chiaro.
No, lo Scope e' tutta un'altra cosa. Per Scope si intende la parte di codice dove una variabile (che puo' essere anche un metodo) e' valida perche' definita. Infatti si parla di "scope of a variable", la parola Scope da sola non ha senso.
Per esempio lo Scope della variabile 'this' (che e' una keyword speciale) e' tutto il corpo all'interno di una classe, e si riferisce all'oggetto (istanza) definito in quel preciso momento.
Secondo me il problema che stai avendo e' probabilmente dovuto al fatti che non hai capito bene la differenza tra 'class' e 'istanza'. Controlla il tuo libro di testo, se hai dubbi chiedi, perche' e' un concetto fondamentale.
--- i due messaggi sono stati uniti ---
... Il dubbio più grande era sul secondo costruttore ...
Il costruttore e' uno dei principi chiave di una classe, perche' definisce come la classe venga creata, ponendo delle limitazioni sulla stessa.
Per esempio, nel tuo caso quando definisci un oggetto (istanza) della classe Docente, lo puoi creare cosi':
Java:
Docente d = new Docente();
d.Name = "Pippo";
d.Cognome = ...
E via dicendo. Questo puo' creare un serio problema (bug) nel codice, in quanto ti permette di creare un oggetto "vuoto", ossia senza attributi, se non ti ricordi di assegnare TUTTI i campi che sono obbligatori. Non solo, ma ti costringe a creare dei metodi 'SET' per assgnare valori a campi che non dovrebbero essere piu' riassegnati. Il cognome di un docente rimane sempre lo stesso (non proprio vero, ma partiamo da qui per il momento).
Ha quindi MOLTO piu' senso creare alle classi costruttori che permettano di potere definirne istanze senza ambiguita'. per esempio
Java:
Docente d = New Docente("Mario", "Rossi", 123456, 35);
In altre parole, il costruttore deve proprio "costruire" un oggetto con tutti gli attributi legali, quelli che non vanno cambiati.
Per migliorare il tuo codice (sto facendo didattica qui, non ha nulla a che fare con il tuo esercizio) assegnare l'eta' a una persona e' fondamentalmente sbagliato perche' ovviamente l'eta' cambia nel tempo. Saresti costretto a aggiornare i dati ogni mese :)
Sarebbe piu' corretto assegnare invece la data di nascita, e avere poi un metodo che la ritorna e un secondo metodo che ritorna l'eta' calcolando la differenza tra la data odierna e la data di nascita.
PS come ho detto altrove, questo non e' tipico di Java, fa parte della programmazione orientata a oggetti.