Corso di Informatica Modulo T3 2 Ambiente locale e globale
|
|
|
- Alberta Coppola
- 7 anni fa
- Просмотров:
Транскрипт
1 Corso di Informatica Modulo T3 2 Ambiente locale e globale 1 Prerequisiti Struttura elementare della memoria Area dati e area programma Programmazione elementare 2 1
2 Introduzione Lo scopo di questa Unità è capire come può avvenire l esecuzione di una funzione. Cosa succede quando avviene l istanza di una funzione? Si può usare una funzione per cambiare il valore di certe variabili? Diamo una risposta a questi quesiti. 3 Compiti e sottocompiti Quando avviene l istanza di una funzione, accadono alcuni eventi che vogliamo studiare e che somigliano molto a ciò che accade quando, mentre stiamo svolgendo un compito, ce ne viene chiesto un altro più urgente: sospendiamo il compito principale memorizziamo a che punto siamo arrivati cambiamo il contesto di lavoro eseguiamo il compito sopraggiunto ritorniamo al lavoro sospeso 4 2
3 L esecuzione di funzioni Quando viene istanziata una funzione, si svolge una serie di azioni analoghe. Per capire questo meccanismo, dobbiamo ricordare come un programma viene memorizzato nella RAM. Al momento dell istanza di una funzione nel programma chiamante, si ha la seguente serie di azioni: sospensione del programma in corso salvataggio dello stato del programma chiamante passaggio dei parametri dal programma alla funzione esecuzione della funzione ripristino del programma chiamante 5 L esecuzione di funzioni sospensione: il programma chiamante (di solito il main()) viene sospeso in modo temporaneo. salvataggio: viene salvato il contesto del programma chiamante (vengono salvati i valori dei registri e l indirizzo del punto di ritorno) passaggio dei parametri: l esecutore assegna ai parametri formali i valori dei parametri attuali presenti nell istanza della funzione esecuzione della funzione: l esecutore esegue le istruzioni contenute nella funzione, restituendo (se la funzione lo prevede) il valore di ritorno al programma chiamante. ripristino: l esecutore restituisce il controllo al programma chiamante, che riprende l esecuzione dal punto successivo a quello in cui è stato interrotto. 6 3
4 L esecuzione di funzioni RAM I1 I2 F(a,b) I3 I4 F(x,y) istruzioni Ritorno (1) (2) L esecuzione del programma viene sospesa all istruzione F(a,b) (1). Avviene il salvataggio dell indirizzo dell istruzione I3 () successiva (punto di ritorno) in una struttura apposita di sistema detta pila di attivazione. I valori di a e b vengono copiati in x ed y pila di attivazione. 7 L esecuzione di funzioni RAM I1 I2 F(a,b) I3 I4 F(x,y) istruzioni Ritorno (1) (2) Questa struttura è caratterizzata dal fatto che, analogamente ad una pila di piatti, è possibile aggiungere o togliere elementi soltanto dalla cima. In tal modo, quando una funzione ne chiama altre, gli indirizzi vengono estratti in ordine inverso a quello di immissione, così da riprendere l esecuzione dei lavori in sequenza corretta. pila di attivazione. 8 4
5 L esecuzione di funzioni RAM I1 I2 F(a,b) I3 I4 F(x,y) istruzioni Ritorno (1) (2) Dopo il salvataggio viene eseguita la funzione F(x,y) con i valori attuali (2) pila di attivazione. 9 (4) L esecuzione di funzioni (3) I1 I2 F(a,b) I3 I4 RAM F(x,y) istruzioni Ritorno (1) (2) Al termine della esecuzione (3) della funzione con il Ritorno, viene ripristinato lo stato del programma interrotto, memorizzato nella pila di attivazione, e ripresa (4) la sua esecuzione. pila di attivazione. 10 5
6 Cambiare i valori dei parametri Al momento dell istanza, l esecutore fa una copia dei parametri attuali ed opera su queste, non sulle variabili originali. Quindi la funzione NON è in grado di restituire in uscita i valori dei parametri modificati, avendo lavorato sulle loro copie. PROBLEMA: Come può la funzione restituire in uscita i valori dei parametri modificati? Sappiamo che al massimo può restituire un solo valore che mediante l istruzione Ritorno() viene comunicato al programma principale. Vediamo come un sottoprogramma possa restituire i valori modificati al programma chiamante. 11 Ambiente locale e globale Il programma chiamante e i sottoprogrammi operano ciascuno in una zona distinta della memoria che chiamiamo ambiente. L area dati di un programma si distingue in ambiente locale di ciascuna funzione (l insieme delle variabili accessibili alla funzione) e ambiente globale (quello accessibile a tutte le funzioni). Ambiente globale Ambiente locale sottoprogramma 1 Ambiente locale sottoprogramma
7 Visibilità locale delle variabili Le variabili dichiarate all interno di una funzione: prendono il nome di variabili locali sono allocate al momento dell istanza della funzione in un estensione dell area dati detta stack e vengono deallocate alla fine della funzione; NON sono visibili nelle funzioni esterne ad essa (sono private) possono avere lo stesso nome di variabili globali (ma, quando il controllo torna al programma chiamante, riprendono automaticamente il loro valore originario Poiché il programma principale è esso stesso una funzione, le variabili dichiarate nel suo interno sono variabili locali ad esso. Lo stack funziona secondo la tecnica LIFO (Last In First Out), per cui le variabili vengono allocate man mano che si istanziano le funzioni e vengono deallocate in ordine inverso. 13 Visibilità locale delle variabili Esempio Intero minimo() Inizio Intero m;. Se (a<b) m=a; Altrimenti m=b; Ritorna(m); Fine. La funzione minimo() calcola il minimo che è posto nella variabile locale Intero m che viene allocata nello stack all inizio della funzione e deallocata alla fine L istruzione Ritorna(m) comunica al programma principale il valore m, ponendolo nel nome della funzione (minimo). 14 7
8 Visibilità globale delle variabili Quando si vuole che una variabile abbia visibilità in tutto il programma, occorre definire la variabile all esterno di tutte le funzioni. In tal caso la variabile si dice variabile globale e sarà visibile ed utilizzabile da tutte le funzioni (è una variabile pubblica). Se una di esse modifica il valore di una variabile globale, il cambiamento sarà osservabile in tutte le altre funzioni. In alcuni casi questo fatto NON è desiderabile per cui in genere occorre preferire l uso di variabili locali. 15 Visibilità globale delle variabili Intero a, b; Algoritmo P Inizio Intero u, v;.. Fine. Intero f (Intero x) Inizio Intero m, n, u;.. Ritorna m; Fine; Nell esempio, la funzione f () può modificare le variabili globali a e b e le sue variabili locali m, n e u, ma non u e v (locali a P) Il programma P può modificare le variabili a e b e le variabili u e v, ma non le variabili m ed n (che sono locali ad f ()) La funzione f () può modificare la sua variabile locale u, poiché è la variabile visibile al momento, ma, all interno del programma P, la variabile u torna ad assumere il valore che aveva inizialmente 16 8
9 Visibilità globale delle variabili Quindi un primo modo per risolvere il PROBLEMA è usare le variabili globali: in questo caso una funzione può restituire più di un valore (modificato) ma presenta due svantaggi: obbliga alla dichiarazione di variabili globali, con conseguente spreco di spazio di memoria (sono variabili che occupano memoria per tutto il tempo di esecuzione del programma) impedisce la privatezza consentita invece dall uso di variabili locali Vediamo un altro modo per risolvere il PROBLEMA in cui una funzione debba modificare un suo parametro e restituirlo modificato al programma chiamante 17 Passaggio per indirizzo Come sappiamo, quando si passa un parametro ad una funzione, essa ne crea una copia ed elabora su questa. Questa tecnica prende il nome di passaggio del parametro per valore. Un altro interessante modo per risolvere il problema della modifica del valore da parte di una funzione è chiamato passaggio del parametro per indirizzo (detto anche passaggio per riferimento). Ciò può essere ottenuto passando alla funzione non la variabile, ma il suo indirizzo. In tal modo, al ritorno al programma chiamante, l indirizzo della variabile resterebbe il medesimo, ma ovviamente il suo contenuto risulterebbe modificato. 18 9
10 Passaggio per indirizzo Per indicare che passiamo l indirizzo del parametro e non il contenuto del parametro, utilizziamo la parola Ref (che ricorda la parola Riferimento) Ad esempio, lo scambio del valore di due variabili sarebbe: void Scambio (Ref Intero x, Ref Intero y) Inizio Intero temp; temp = x; x = y; y = temp Fine; x ed y rappresentano non il contenuto delle variabili, ma i rispettivi indirizzi L indirizzo delle due variabili resta lo stesso sia all interno che all esterno della funzione. Le modifiche che essa apporta, saranno effettuate non tramite il nome (contenuto) delle variabili ma attraverso i loro indirizzi. 19 Passaggio per indirizzo Algoritmo main() Inizio Intero a,b; Leggi(a); Leggi(b); Scambio(a,b); Stampa(a); Stampa(b); Fine. Nell istanza della funzione si inviano le variabili (i loro nomi). La funzione tramite la parola chiave Ref ne prende i rispettivi indirizzi e realizza lo scambio del contenuto di quegli indirizzi
11 Input e Output di funzioni Quindi, riassumendo: passaggio per valore: il parametro consente l input per la funzione; l output potrà essere il valore della funzione (se non è void) passaggio per indirizzo: il parametro consente sia l input che l output. Si usa quando la funzione in genere deve restituire più valori in uscita, oppure quando si vuole modificare il valore di un parametro formale e mantenere questa modifica anche nel programma chiamante. 21 Struttura di un sottoprogramma In generale un sottoprogramma ha il seguente aspetto: tipo ident (lista parametri) Inizio dichiarazione variabili locali istruzioni; Ritorna (espressione); Fine; tipo è il tipo di dato calcolato dalla funzione ident e restituito al programma principale tramite Ritorna (espressione) Se la funzione non restituisce alcun valore si pone void Indica la lista dei parametri formali Contiene la dichiarazione delle variabili locali della funzione (non hanno nessun riferimento nelle funzioni esterne) 22 11
12 Struttura di un sottoprogramma In generale un sottoprogramma ha il seguente aspetto: tipo ident (lista parametri) Inizio dichiarazione variabili locali istruzioni; Ritorna (espressione); Fine; La parola Fine va fatta seguire dal ; per indicare il termine della funzione ma non del programma principale. Contiene il blocco di istruzioni interne alla funzione. Ritorna (espressione) serve a comunicare al programma principale il risultato del calcolo effettuato dalla funzione. È assente nel caso di funzione void. 23 Utilità dei sottoprogrammi L uso dei sottoprogrammi consente di: semplificare l analisi del problema, dando una visione sintetica ma completa del problema principale semplificare la fase di realizzazione (sviluppo, compilazione, esecuzione e manutenzione) riutilizzare i sottoprogrammi in altri programmi 24 12
13 Sottoprogrammi predefiniti In tutti i linguaggi di programmazione, vengono forniti numerosi insiemi di funzioni già pronte per l utilizzo da parte del programmatore. Queste funzioni si dicono built-in, nel senso che sono a corredo del compilatore del linguaggio. Le funzioni predefinite sono raggruppate in insiemi detti librerie di sottoprogrammi. Si possono ad esempio avere librerie di tipo: matematico (elaborazioni matematiche, trigonometriche, ecc) stringa (elaborazione di stringhe) carattere (elaborazione su caratteri) 25 Argomenti Compiti e sottocompiti L esecuzione di funzioni Cambiare i valori dei parametri Ambiente locale e globale Visibilità locale delle variabili Visibilità globale delle variabili Passaggio per indirizzo Input e Output di funzioni Struttura di un sottoprogramma Utilità dei sottoprogrammi Sottoprogrammi predefiniti 26 13
14 Altre fonti di informazione P.Gallo, F.Salerno Informatica Generale 1, ed. Minerva Italica G.Callegarin Corso di Informatica 1, ed. CEDAM 27 14
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Linguaggio C: le funzioni. Introduzione e sintassi
ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Corso di Informatica Modulo T1 1-Il concetto di algoritmo
Corso di Informatica Modulo T1 1-Il concetto di algoritmo 1 Prerequisiti Differenza tra esecutore e risolutore Problema e procedimento risolutivo Linguaggio naturale Repertorio di un esecutore Fasi di
Linguaggio C: le funzioni. Introduzione e sintassi
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Introduzione e sintassi La presente dispensa
Definizione di classi. Walter Didimo
Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti
Parametri Formali di una Funzione e Record di Attivazione
Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali
Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:
Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata
La Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione
Linguaggio C: Stack e Ricorsione FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione: si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri
La formalizzazione dell informazione: Dati e Diagrammi di Flusso
La formalizzazione dell informazione: Dati e Diagrammi di Flusso Codifica degli algoritmi Algoritmo formulato per essere comunicato tra esseri umani chiaro, sintetico e intuitivo codificato in linguaggi
Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
Spazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - [email protected] // The function name says it all int stack_overflow (){
Scope, Memoria e Tabella dei Simboli
Scope, Memoria e Tabella dei Simboli La tabella dei simboli è uno strumento fondamentale attraverso il quale interpreti e compilatori implementano la traduzione da un programma scritto in un linguaggio
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
Perché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
Subroutine in linguaggio macchina: collegamento e passaggio dei parametri
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
Allocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 5 Martedì 25-10-2016 Definizione di processo Esiste una distinzione concettuale
Lezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo [email protected] Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C
La ricorsione Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C 2 Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici I risultati
Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java
Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa [email protected] 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e
