29
Programmazione II Lezione 14 Daniele Sgandurra [email protected] 7/12/2010 1/29 Programmazione II Lezione 14 7/12/2010

Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Programmazione IILezione 14

Daniele Sgandurra

[email protected]

7/12/2010

1/29 Programmazione II Lezione 14 7/12/2010

Page 2: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Sommario

1 Astrarre sul ControlloSottoprogrammiPassaggio Parametri

2/29 Programmazione II Lezione 14 7/12/2010

Page 3: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul Controllo

Parte I

Astrarre sul Controllo

3/29 Programmazione II Lezione 14 7/12/2010

Page 4: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Astrazione

Concetto di astrazione:

es., macchina astratta:

“astratto” in opposizione a “fisico”;la macchina astratta nasconde la macchina sottostante.

Astrarre = nascondere qualcosa.

Presente in ogni disciplina scientifica:

descrizione di un fenomeno concentrandosi solo su alcuni suoiaspetti.

Nei linguaggi di programmazione:

astrazione sul controllo:

nascondere dettagli procedurali.

astrazione sui dati:

definire e utilizzare tipi di dato sofisticati senza far riferimentoall’implementazione.

4/29 Programmazione II Lezione 14 7/12/2010

Page 5: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Sottoprogrammi

Scomposizione di un problema in sottoproblemi.

soluzione di un problema piu semplice;comporre in modo opportuno le soluzioni ai sottoproblemi;deve esserci supporto da parte del linguaggio di programmazione.

Sottoprogramma, procedura o funzione:

sezione di codice:

identificata da un nome;dotata di un proprio ambiente locale;capace di scambiare informazioni col resto del codice permezzo di parametri.

meccanismi linguistici:

definizione:uso (chiamata).

5/29 Programmazione II Lezione 14 7/12/2010

Page 6: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Sottoprogrammi: Esempio

i n t foo ( i n t a , i n t b ) {i n t tmp = b ;i f ( tmp == 0) r e t u r n a ;e l s e r e t u r n a + 1 ;

}

Definizione di una funzione:

di nome foo (questo nome fa parte dell’ambiente non locale dellafunzione);il cui ambiente locale e costituto da a, b, tmp.

La prima linea e l’intestazione.

Le restanti linee costituiscono il corpo.

Una funzione scambia informazioni con il resto del programma mediante

tre meccanismi:

i parametri;i valori di ritorno;l’ambiente non locale.

6/29 Programmazione II Lezione 14 7/12/2010

Page 7: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Sottoprogrammi: Parametri

Parametri formali nella definizione del sottoprogramma:

nomi (ambiente: come per le variabili locali);si comportano come variabili legate (bound);

la ridenominazione non ha effetti sulla semantica.

Parametri attuali (effettivi) nella chiamata del sottoprogramma:

nomi o anche espressioni:

dipende anche dai passaggi consentiti dal linguaggio.

Regola generale: numero e tipo devono coincidere:

compatibilita dei tipi;sottoprogrammi con un numero variabile di parametri.

7/29 Programmazione II Lezione 14 7/12/2010

Page 8: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Sottoprogrammi: Valore di Ritorno e Ambiente non Locale

Funzioni: sottoprogrammi che restituiscono un valore:

scambio di informazioni non solo tramite parametri;meccanismo linguistico per la restituzione del valore:

return (C e derivati).

Procedure: sottoprogrammi che non restituiscono un valore:

funzioni di tipo void (C e derivati).

Ambiente non locale: meccanismo meno sofisticato (e pericoloso) colquale un sottoprogramma scambia informazioni col resto del programma.

8/29 Programmazione II Lezione 14 7/12/2010

Page 9: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Astrazione Funzionale

Dal punto di vista pragmatico: sottoprogramma = meccanismo chepermette al progettista di ottenere astrazione funzionale.

Componente software: entita che fornisce un servizio all’ambiente:

non importa come si realizza il servizio;basta conoscere l’interfaccia per richiederli:

una funzione per ogni servizio.

Separazione:

come richiedere il servizio (interfaccia);come e implementato.

Astrazione funzionale: principio metodologico:

specifica, implementazione e uso sono indipendenti (anche dalcontesto);

il cliente non dipende dal corpo ma solo dall’intestazione(interazione limitata al passaggio dei parametri).

trasparenza: sostituzione con altro corpo ha la stessa semantica.

9/29 Programmazione II Lezione 14 7/12/2010

Page 10: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri

Modalita di legame tra parametri attuali e parametri formali:

fissata al momento della definizione del sottoprogramma;puo essere specifica per ogni singolo parametro;vale per ogni uso (chiamata) del sottoprogramma.

Semantica (comunicazione):

ingresso: dal chiamante al chiamato;uscita: dal chiamato al chiamante;ingresso/uscita: bidirezionale.

Specifiche tecniche implementative:

tipo di comunicazione;forma di parametro;semantica della modalita;implementazione canonica;costo.

10/29 Programmazione II Lezione 14 7/12/2010

Page 11: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Valore (1)

Meccanismo semplice, default in molti linguaggi:

Pascal, C, Java.

Modalita: parametro in ingresso.

Ambiente locale esteso con il binding tra il parametro formale e unanuova variabile.

Parametro attuale:

espressione (r-value) nella chiamata da valutare prima della stessa;il valore viene assegnato al parametro formale.

Durante l’esecuzione:

nessun rapporto tra parametro formale e parametro attuale.

Al termine:

il parametro viene distrutto insieme all’ambiente locale.

11/29 Programmazione II Lezione 14 7/12/2010

Page 12: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Valore (2)

Se modello di allocazione a pila:

parametro formale nel RdA;alla chiamata si copia il valore (sequenza di chiamata).

Costo:

per strutture dati molto grandi, copia dispendiosa;accesso a costo minimo (come le altre variabili del corpo).

i n t y = 1 ;v o i d foo ( i n t x ) {

x = x + 1 ;}. . .y = 1 ;foo ( y + 1) ;// y v a l e 1

12/29 Programmazione II Lezione 14 7/12/2010

Page 13: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Riferimento (1)

Meccanismo a basso livello presente in molti linguaggi:

Pascal (modificatore var);altri (C e derivati): dipende dalle strutture dati e presenza puntatori.

Modalita: parametro di ingresso/uscita.

Parametro attuale: l-valore.

Alla chiamata:

valutazione dell’l-valore;estensione dell’ambiente locale con un binding tra il parametroformale e questo l-valore (alias).

All’uscita:

distruzione del legame, non della variabile.

13/29 Programmazione II Lezione 14 7/12/2010

Page 14: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Riferimento (2)

Se modello di allocazione a pila:

parametro formale nel RdA;si copia l’l-valore del parametro attuale (sequenza di chiamata).

Costo: abbastanza basso:

sia per la memorizzazione dell’indirizzo;sia per l’accesso: costo di un indirizzamento indiretto.

Il parametro attuale puo essere un’espressione di cui si riesce a calcolarel’l-valore al momento della chiamata.

i n t y = 0 ;v o i d foo ( reference i n t x ) {

x = x + 1 ;}. . .y = 0 ;foo ( y ) ;// y v a l e 1

i n t [ ] V = new V [ 1 0 ] ;i n t i = 0 ;v o i d foo ( reference i n t x ) {

x = x + 1 ;}. . .V [ 1 ] = 1 ;foo ( V [ i+1]) ;// V [ 1 ] v a l e 2

14/29 Programmazione II Lezione 14 7/12/2010

Page 15: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Swap in C e Java

Il C ammette solo il passaggio per valore:ma permette la manipolazione di puntatori e indirizzi, per cui e possibilesimulare il passaggio per riferimento:

v o i d swap ( i n t ∗a , i n t ∗b ) {i n t tmp = ∗a ; ∗a = ∗b ; ∗b = tmp ;

}i n t v1 = . . . ;i n t v2 = . . . ;swap(&v1 , &v2 ) ;

In Java, la funzione swap non si puo scrivere:Java adotta il modello delle variabili a riferimento (per i tipi classe);possibile comunicazione bidirezionale (se oggetti mutabili e variabilipubbliche):

c l a s s A {i n t v ;

}

v o i d swap ( A a , A b ) {i n t tmp = a . v ; a . v = b . v ; b . v = tmp ;

}

15/29 Programmazione II Lezione 14 7/12/2010

Page 16: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Costante

Modalita in ingresso (altro nome: read-only):

compromesso tra passaggio per valore e per riferimento.

Parametro attuale: espressioni generiche.

Vincolo statico: nessuna modifica permessa nel corpo:

ne diretta: assegnazione;ne indiretta: passaggio a sottoprogrammi che li modifichino.

Semantica: come quella del passaggio per valore.

Implementazione: dipende dalla macchina astratta:

piccole dimensioni: come nel passaggio per valore (copia);grandi dimensioni: come nel passaggio per riferimento.

Spesso, indicato tramite un modificatore (parola riservata):

in Java: final;in C/C++: const.

16/29 Programmazione II Lezione 14 7/12/2010

Page 17: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Risultato (1)

Modalita di sola uscita (duale del passaggio per costante):

ambiente locale esteso aggiungendo un binding tra il parametroformale e una nuova variabile;parametro attuale: espressione dotata di l-value.

Durante l’esecuzione:

nessun legame tra i due parametri (nessuna informazione puotransitare in ingresso).

Al termine del sottoprogramma:

prima della distruzione dell’ambiente locale, copia del valore delparametro formale nella locazione indicata da quello attuale.

17/29 Programmazione II Lezione 14 7/12/2010

Page 18: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Risultato (2)

Implementazione:

come per il passaggio per valore.

Utilita:

sottoprogrammi che restituiscono piu valori.

v o i d foo ( result i n t x ) {x = 8 ;

}. . .i n t y = 1 ;foo ( y ) ;// y v a l e 8

18/29 Programmazione II Lezione 14 7/12/2010

Page 19: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Valore-Risultato (1)

Modalita bidirezionale combinata valore-risultato:

il parametro formale e una variabile locale;parametro attuale: espressione dotata di l-value.

Alla chiamata:

parametro attuale valutato e l’r-valore ottenuto viene assegnato allalocazione del parametro formale.

Al termine del sottoprogramma:

prima della distruzione dell’ambiente locale copia del valore delparametro formale nella locazione indicata dal parametro attuale.

19/29 Programmazione II Lezione 14 7/12/2010

Page 20: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Valore-Risultato (2)

Implementazione:

come per il passaggio per valore:

ma in Ada e come per riferimento per strutture grandi anchese non semanticamente corretta.

v o i d foo ( valueresult i n t x ) {x = x + 1 ;

}. . .i n t y = 8 ;foo ( y ) ;// y v a l e 9

20/29 Programmazione II Lezione 14 7/12/2010

Page 21: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Valore-Risultato (3)

v o i d foo ( reference/valueresult i n t x

reference/valueresult i n t y

reference i n t z ) {y = 2 ;x = 4 ;i f ( x == y ) z = 1 ;}

. . .i n t a = 3 ;i n t b = 0 ;foo (a , a , b ) ;

Nel passaggio valore-risultato non c’e aliasing:

se x e y distinti, z e quindi b non viene modificato:

vale 0.

altrimenti (passaggio di x e y per riferimento):

alla fine b varrebbe 1.

21/29 Programmazione II Lezione 14 7/12/2010

Page 22: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (1)

Modalita simile a quella per riferimento, ma semanticamente piu precisa:

viene da Algol.

Regola di copia (semantica ridotta a sintassi):

sia f una funzione con un unico parametro formale x e a

un’espressione compatibile con x;una chiamata a f con parametro attuale a e semanticamenteequivalente all’esecuzione del corpo di f nel quale tutte leoccorrenze di x sono sostituite con a.

22/29 Programmazione II Lezione 14 7/12/2010

Page 23: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (2)

Caso: presenza di piu variabili con lo stesso nome:

i n t x = 0 ;i n t foo ( name i n t y ) {

i n t x = 2 ;r e t u r n x + y ;

}. . .i n t a = foo ( x + 1) ;

1 valutando il return nell’ambiente locale di foo, si avrebbe return

x+x+1; cioe si restituisce 5 (cattiva applicazione della regola dicopia: risultato dipendente dal nome della variabile locale);

2 se il corpo fosse int z = 2; return z+y; si avrebbe return

z+x+1; cioe si restituisce 3.

23/29 Programmazione II Lezione 14 7/12/2010

Page 24: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (3)

Caso: presenza di piu variabili con lo stesso nome:

1 variabile catturata dalla dichiarazione locale;2 sostituzione senza cattura di variabile:

si richiede che la valutazione del parametro formale avvenganell’ambiente del chiamante anziche del chiamato.

Quindi, nel passaggio per nome:

semantica: regola di copia;sostituzione: senza cattura:

viene sostituito sempre il parametro attuale piu il suoambiente (fissato a momento della chiamata).

24/29 Programmazione II Lezione 14 7/12/2010

Page 25: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (4)

Caso: valutazione del parametro attuale a ogni sua occorrenza del

parametro formale:

secondo la regola di copia;conseguenze per gli effetti collaterali:

i n t i = 2 ;i n t fie ( name i n t y ) {

r e t u r n y + y ;}. . .i n t a = fie ( i++) ;// i v a l e 4 e a v a l e 5

la regola di copia impone la valutazione di i++ per due volte:

la prima restituisce 2 e porta il valore di i a 3;la seconda restituisce 3 e porta il valore di i a 4.

25/29 Programmazione II Lezione 14 7/12/2010

Page 26: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (5)

Differenza con la modalita valore-risultato:

v o i d fiefoo ( valueresult/name i n t x

valueresult/name i n t y ) {x = x + 1 ;y = 1 ;

}. . .i n t i = 1 ;i n t [ ] A = new i n t [ 5 ] ;A [ 1 ] = 4 ;fiefoo (i , A [ i ] ) ;

Per valore-risultato (ma anche per riferimento): A[1] vale 1 e i vale 2 eil resto dell’array A intatto;

Per nome: A[1] vale 4 e i vale 2 ma modifica anche A[2] che vale 1.

26/29 Programmazione II Lezione 14 7/12/2010

Page 27: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (6)

Implementazione:

occorre passare:

espressione testuale (nome);ambiente:

almeno tutte le variabili libere, cioe non associate,nell’espressione.

chiusura = (espressione, ambiente);

alla chiamata: passaggio della chiusura:

quando il chiamato incontra il parametro formale risolve ilriferimento valutando la prima componente secondo la secondacomponente della chiusura.

27/29 Programmazione II Lezione 14 7/12/2010

Page 28: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Passaggio Parametri per Nome (7)

Chiusura: coppia di puntatori:

(i) al codice di valutazione dell’espressione;(ii) di catena statica al blocco dell’ambiente locale nel quale valutare

l’espressione.

Alla chiamata:

costruzione della chiusura da parte del chiamante;associata al parametro formale nel RdA del chiamato (x).

Modalita di passaggio parametri molto costosa.

28/29 Programmazione II Lezione 14 7/12/2010

Page 29: Programmazione II - Lezione 14groups.di.unipi.it/~daniele/teaching/pr2-10/pr2-14.pdf · 10/29 Programmazione II Lezione 14 7/12/2010. Astrarre sul Controllo Sottoprogrammi Passaggio

Astrarre sul ControlloSottoprogrammiPassaggio Parametri

Riferimenti

[1] Linguaggi di programmazione: principi e paradigmi (Cap. 7).

Maurizio Gabbrielli, Simone Martini.

29/29 Programmazione II Lezione 14 7/12/2010