Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Dispensa in PDF - Dipartimento di Scienze Ambientali, Informatica e ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Carnielli Efrem: Programmazione a componenti<br />
Pr<strong>in</strong>cipi <strong>di</strong> progettazione<br />
nuovo activation record specifico per quella chiamata che rimane sullo stack per<br />
tutto il tempo <strong>in</strong> cui la funzione è <strong>in</strong> esecuzione.<br />
Le funzioni che chiamano altre funzioni danno luogo a una sequenza <strong>di</strong> record <strong>di</strong><br />
attivazione organizzata a pila, per l'appunto lo stack <strong>di</strong> attivazione, questa struttura<br />
consente chiamate a funzioni ed ottimizza la ricorsione.<br />
La sequenza dei l<strong>in</strong>k d<strong>in</strong>amici costituisce la cosiddetta catena d<strong>in</strong>amica che collega<br />
gli activation record, e rappresenta la storia delle attivazioni.<br />
Quando una funzione term<strong>in</strong>a, il controllo torna alla funzione chiamante, che deve<br />
riprendere la sua esecuzione dall’istruzione successiva alla chiamata della<br />
funzione, mentre l'activation record della funzione chiamata viene smontato, (se ne<br />
perde traccia), per lasciare spazio per nuove chiamate. Nell'esempio sopra, si vede<br />
che gli activation record tengono traccia del punto <strong>di</strong> ritorno, che <strong>in</strong> entrambi i casi<br />
consiste nell'assegnamento del risultato della funzione.<br />
Quali altre <strong>in</strong>formazioni possono mancare?<br />
Se avessi una variabile z che rappresenta l'istanza <strong>di</strong> una classe devo avere<br />
all'<strong>in</strong>terno dell'activation record un riferimento all'oggetto che rappresenta, che si<br />
troverà <strong>in</strong> java <strong>in</strong> memoria heap, mentre per alcuni l<strong>in</strong>guaggi potrebbe essere<br />
caricato nell'activation record.<br />
Per le funzioni, spesso il record <strong>di</strong> attivazione prevede anche un’ulteriore cella,<br />
dest<strong>in</strong>ata a contenere il risultato della funzione (come nell'esempio dove abbiamo<br />
la variabile ret); altre volte, il risultato viene restituito dalla funzione al chiamante<br />
semplicemente lasciandolo <strong>in</strong> un registro della CPU.<br />
52