Introduzione ai sottoprogrammi
Paolo Bison
Fondamenti di Informatica Ingegneria Meccanica
Università di Padova A.A. 2008/09
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.1
Struttura
programma formato da vari elementi (sottoprogrammi) indipendenti tra loro
ogni sottoprogramma composto da:
insieme di istruzioni (corpo)
nome del sottoprogramma
esempio program A
x=3*t call B y=x+k
end program A
subroutine B call C t=x*20
end subroutine B
subroutine C t=8*k
end subroutine C
Vantaggi
metodologia di programmazione top-down, bottom-up
operazioni per tipi definiti dall’utente tipo point3D
limitazione duplicazione codice inizializzazione
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.3
Linguaggio di programmazione
sintassi per la definizione dei sottoprogrammi
strutture di controllo per l’attivazione ed esecuzione dei sottoprogrammi
meccanismi per il trasferimento di dati a e da sottoprogrammi
Organizzazione e controllo
sequence control
il controllo dell’ordine di esecuzione delle
operazioni/istruzioni, sia primitive che definite dall’utente (istruzione IF)
data control
il controllo della flusso dati tra insiemi di operazioni (variabile)
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.5
Sequence control nei sottopprogrammi
meccanismi per controllare la sequenza in cui insiemi di sottoprogrammi sono attivati ed eseguiti
struttura CALL-RETURN
CALL-RETURN
gerarchia di sottoprogrammi:
sottoprogramma principale che puó attivare l’esecuzione di altri sottoprogrammi che a loro volta possono attivare altri sottop. e così via ...
relazione chiamante-chiamato
A B C
CALL B CALL C
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.7
proprietà CALL-RETURN
chiamata esplicita (CALL)
ritorno esplicito (RETURN)
esecuzione chiamante momentaneamente bloccata
quando il chiamato termina si continua l’esecuzione dall’istruzione seguente la CALL
Copy Rule (regola di copia)
semantica della struttura CALL-RETURN
sostituzione testuale dell’istruzione CALL con il corpo del chiamato
limitazioni
1. assenza di ricorsione 2. esplicita istruzione CALL
3. esecuzione chiamato fino a sua fine (logica) 4. singola sequenza di esecuzione
5. trasferimento immediato al chiamato
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.9
Data Control
controllo del flusso/condivisione dati tra insiemi di operazioni
punto centrale del data control
dato x=y+z*2 cosa significano x,y,z ad ogni esecuzione dell’istruzione
nei sottoprogrammi possono indicare:
una variabile locale
una variabile non locale
un parametro
un sottoprogramma
Associazione (binding)
associazione tra identificatori e dati/programmi
coppia identificatore-oggetto
variabile
X 10
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.11
Operazioni sulle associazioni
naming
creazione dell’associazione
attivazione
associazione disponibile per operazioni di riferimento
disattivazione
associazione non più utilizzabile in operazioni di riferimento
unnaming
distruzione dell’associazione
riferimento
accesso all’oggetto attraverso l’identificatore
Ambiente di riferimento (AR)
insieme delle associazioni attive in un determinato momento dell’esecuzione del programma
varia dinamicamente a seconda del flusso di esecuzione
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.13
Scope Rules
regole di validità o di campo
servono a determinare l’AR in ogni punto del programma
definiscono i momenti in cui avvengono le operazioni sulle associazioni
tipi di scope rules
dinamiche
validità di una associazione definita in termini del flusso di esecuzione
statiche
validità di una associazione definita in termini della struttura statica del programma
Riferimenti nei sottoprogrammi
riferimenti ad identificatori in un sottoprogramma possono essere
locali
associazione attiva solo nel sottoprogramma di esecuzione
globali
associazione attiva per tutta la durata del programma
non locali
nè locali nè globali
ambiente locale di riferimento (ALR)
ambiente non locale di riferimento = AR - ALR
“side effects”
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.15
Gestione ALR
P Q R
CALL Q CALL R
1 2
4 3
1. Qual’è l’iniziale configurazione del ALR all’inizio di Q?
2. Cosa succede al ALR di Q quando Q chiama R?
3. Qual’è l’ALR di Q quando il controllo ritorna da R?
Gestione ALR - risposte 2 e 3
2 - L’ALR di Q viene disattivato, ma non distrutto, quando Q chiama R
3 - L’ALR di Q viene riattivato quando R ritorna.
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.17
Gestione ALR - risposte 1 e 4
due approcci
attivazione/disattivazione 1 - attivazione del ALR di Q 4 - disattivazione del ALR di Q
creazione/distruzione
1 - creazione del ALR di Q 4 - distruzione del ALR di Q
Gestione ambiente non locale
due metodologie
1. esplicita specificazione 2. creazione implicita
associazione più recente nella catena delle chiamate
associazione nel programma principale
associazione determinata dalla struttura statica del programma
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.19
Passaggio di parametri
scambio di dati tra sottoprogrammi
parametri vs. variabili non locali
parametro
nuovo dato ad ogni attivazione
variabile non locale
dato che cambia raramente
uso di identificatori locali per accedere a dati non locali.
Formali e attuali
formali
identificatori locali usati nella definzione per nominare dati trasmessi al sottoprogramma
lista di identificatori dopo nome:
procedure P(x,y) attuali
espressioni usate nel punto di chiamata per specificare i dati da passare al chiamato
lista espressioni dopo nome chiamato
call P(x1*20,10)
par. formali inizializzati a dati non locali (par. attuali) al momento dell’attivazione
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.21
Corrispondenza formali-attuali
posizionale
posizione nella lista
P(x,y)
P(x1*20,10) nominativa
esplicito uso del nome del parametro formale
call P(y:=10,x:=x1*20)
num. par. formali = num. par. attuali
Associazione dei valori
associazione dei valori definiti dai par. attuali ai par. formali
metodi di passaggio:
1. per valore
2. per riferimento 3. per nome
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.23
Passaggio per valore
valore del par. attuale valutato al momento della chiamata diventa valore di inizializzazione del par. formale
par. formale ≡ var. locale + inizializzazione
chiamante ⇒ chiamato
Passaggio per riferimento
al par. formale viene associato un riferimento (puntatore), valutato alla chiamata, che si riferisce al par. attuale
possibile modifica di un dato non locale
chiamante ⇔ chiamato
Introduzione al corso, Paolo Bison, FI08, 2008-12-09 – p.25