----- 23/5/05 ----- > Recentemente mi sono chiesto se il costruttore di una struttura dati puo' > essere considerato una procedura che cambia lo stato di un programma, > ci ho ragionato un po' sopra e ho pensato che alla fin fine un costruttore > crea (introduce) nel programma una nuova struttura e quindi ne cambia lo stato. > [...] L'affermazione e' in linea di massima corretta, ma con un paio di precisazioni per evitare possibili ambiguita': 1. Per "stato del programma" si deve intendere lo "stato della memoria" della macchina virtuale in cui il programma e' in corso di esecuzione; questa interpretazione e' implicita quando ci si riferisce al concetto di stato nel senso considerato nella terza parte del corso. In termini piu' generali, lo "stato della macchina" e' definito anche dall'istruzione correntemente in esecuzione, per cui lo "stato della macchina" cambia per ragioni banali anche se si esegue un'istruzione ininfluente. D'altro canto, se per stato si intendesse quello della struttura dati costruita, l'affermazione sarebbe priva di significato semplicemente perche' prima la struttura non esisteva. 2. Se il costruttore e' una procedura funzionale (come in Java), e quindi ci si aspetta che l'oggetto creato venga assegnato a una variabile, esplicitamente o implicitamente, allora l'affermazione e' vera ammesso che una qualche forma di assegnazione abbia effettivamente luogo. Un controesempio puo' aiutare a chiarire questo punto. Dopo l'esecuzione dell'istruzione: new Integer(5); (inutile in questa forma, ma accettata dal compilatore), la memoria resta "logicamente" immutata (e "fisicamente" il nuovo oggetto passa subito alle cure del garbage collector, che provvede alla sua eliminazione). ----- * -----