15.06.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!