26
Procedure e Procedure e funzioni funzioni A. Ferrari A. Ferrari

Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Embed Size (px)

Citation preview

Page 1: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Procedure e Procedure e funzionifunzioni

A. FerrariA. Ferrari

Page 2: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

ProceduraProceduraUna procedura può essere rappresentata come Una procedura può essere rappresentata come una macchina in grado di eseguire un certo una macchina in grado di eseguire un certo compito quando attivata.compito quando attivata.

In un primo tempo la macchina deve essere In un primo tempo la macchina deve essere costruita: la costruzione della macchina può costruita: la costruzione della macchina può essere paragonata con la dichiarazione e essere paragonata con la dichiarazione e definizione della procedura.definizione della procedura.

La macchina viene poi attivata per eseguire il La macchina viene poi attivata per eseguire il suo compito: può essere attivata più volte e suo compito: può essere attivata più volte e tutte le volte ritorna ad eseguire il compito per tutte le volte ritorna ad eseguire il compito per cui è stata costruita. L'avviamento della cui è stata costruita. L'avviamento della macchina può essere paragonato all'esecuzione macchina può essere paragonato all'esecuzione della procedura.della procedura.

Page 3: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Procedure in CProcedure in CIn linguaggio C / C++ non esistono In linguaggio C / C++ non esistono procedure ma solo funzioni. Le procedure procedure ma solo funzioni. Le procedure possono essere realizzate mediante possono essere realizzate mediante funzioni che non restituiscono valori cioè funzioni che non restituiscono valori cioè funzioni funzioni voidvoid..

La dichiarazione di una procedura deve La dichiarazione di una procedura deve essere inserita prima della sua esecuzione.essere inserita prima della sua esecuzione.

Utilizzando i prototipi è possibile definire le Utilizzando i prototipi è possibile definire le procedure dopo il programma principale.procedure dopo il programma principale.

L’esecuzione di una procedura termina L’esecuzione di una procedura termina quando si raggiunge la sua ultima quando si raggiunge la sua ultima istruzione o si incontra l’istruzione istruzione o si incontra l’istruzione returnreturn..

Page 4: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Esempio in Esempio in linguaggio Clinguaggio C

Page 5: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Esempio con Esempio con prototipoprototipo

Page 6: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Esecuzione del Esecuzione del codicecodice

L’esecuzione di un programma C inizia L’esecuzione di un programma C inizia dalla prima istruzione di main (anche dalla prima istruzione di main (anche main è una funzione).main è una funzione).

La chiamata di una funzione provoca La chiamata di una funzione provoca l’interruzione momentanea l’interruzione momentanea dell’esecuzione del codice, l’esecuzione dell’esecuzione del codice, l’esecuzione del codice della funzione e, al termina del codice della funzione e, al termina dell’esecuzione di questa, la ripresa del dell’esecuzione di questa, la ripresa del codice inizialmente sospesocodice inizialmente sospeso

Page 7: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Scambio di Scambio di informazioni fra informazioni fra

programma e programma e proceduraproceduraNell’esempio precedente il programma e la Nell’esempio precedente il programma e la

procedura non avevano la necessità di procedura non avevano la necessità di scambiarsi informazioni.scambiarsi informazioni.

In generale è invece necessario uno In generale è invece necessario uno scambio di informazioni fra programma e scambio di informazioni fra programma e procedura (o fra varie procedure)procedura (o fra varie procedure)

La dichiarazione di una variabile “fuori” La dichiarazione di una variabile “fuori” dal programma e dalla procedura (variabile dal programma e dalla procedura (variabile globale) permette ad entrambi di globale) permette ad entrambi di “vederla” quindi di scambiarsi, attraverso “vederla” quindi di scambiarsi, attraverso questa, informazioni.questa, informazioni.

Page 8: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Un esempio con Un esempio con variabili globalivariabili globali

Page 9: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Variabili locali e Variabili locali e globaliglobali

La possibilità da parte del programma e delle La possibilità da parte del programma e delle varie procedure di vedere e modificare il varie procedure di vedere e modificare il valore di una variabile globale è un aspettovalore di una variabile globale è un aspetto

Positivo: permetto lo scambio di informazioniPositivo: permetto lo scambio di informazioniNegativo: la modifica del valore di una variabile Negativo: la modifica del valore di una variabile globale da parte di una procedura potrebbe globale da parte di una procedura potrebbe alterare il comportamento dell’intero alterare il comportamento dell’intero programma (effetto collaterale)programma (effetto collaterale)

Esistono variabili che hanno significato solo Esistono variabili che hanno significato solo all’interno di una proceduraall’interno di una procedura

Queste variabili possono essere dichiarate Queste variabili possono essere dichiarate all’interno della procedura (variabili locali) e all’interno della procedura (variabili locali) e quindi essere visibili sono in questaquindi essere visibili sono in questa

Page 10: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Un esempio con Un esempio con variabili globali e variabili globali e

localilocali

Page 11: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

FunzioniFunzioniAnche per la funzione è valida l'analogia con la Anche per la funzione è valida l'analogia con la macchina.macchina.La Macchina-Funzione oltre ad eseguire il compito La Macchina-Funzione oltre ad eseguire il compito per il quale è stata costruita, restituisce il risultato.per il quale è stata costruita, restituisce il risultato.

Anche in questo caso avremo una fase di Anche in questo caso avremo una fase di dichiarazione-costruzione ed una di chiamata-dichiarazione-costruzione ed una di chiamata-avviamento.avviamento.

Nella fase di chiamata avremo la restituzione di un Nella fase di chiamata avremo la restituzione di un valore: il risultato della funzione.valore: il risultato della funzione.

La funzione avrà un tipo (il tipo dl valore restituito) La funzione avrà un tipo (il tipo dl valore restituito) e una terminazione esplicita (return seguito da una e una terminazione esplicita (return seguito da una espressione che rappresenta il valore della espressione che rappresenta il valore della funzione)funzione)

Page 12: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Esempio di Esempio di funzionefunzione

Page 13: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Scambio Scambio informazioni fra informazioni fra

funzionifunzioniLa memoria globale permette lo scambio di La memoria globale permette lo scambio di informazioni fra funzioniinformazioni fra funzioni

Risulta però un metodo Risulta però un metodo complesso (necessità di dichiarare tutte le complesso (necessità di dichiarare tutte le variabili che servono a tutte le funzioni) variabili che servono a tutte le funzioni) pericoloso (una funzione può alterare in modo pericoloso (una funzione può alterare in modo inatteso una variabile globale)inatteso una variabile globale)

L’utilizzo dei parametri permette di ovviare L’utilizzo dei parametri permette di ovviare al problema:al problema:

La funzione opera formalmente su variabili La funzione opera formalmente su variabili (parametri formali) che vengono associate a (parametri formali) che vengono associate a valori specifici al momento della chiamata valori specifici al momento della chiamata (parametri attuali)(parametri attuali)

Page 14: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Parametri – passaggio Parametri – passaggio per valoreper valore

Page 15: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

La memoria durante La memoria durante l’esecuzionel’esecuzione

Memoria del programma

Memoria main

x

y

m

a

b

calcolo

Memoria media

Al termine della funzione scompare la sua memoria locale

Page 16: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Passaggio per Passaggio per valore (non ha valore (non ha

effetto)effetto)Il passaggio per valore non Il passaggio per valore non permette però di “ricordare” le permette però di “ricordare” le modifiche apportate ai modifiche apportate ai parametri da parte della parametri da parte della funzionefunzione

La memoria locale della La memoria locale della funzione (che contiene i funzione (che contiene i parametri formali) scompare parametri formali) scompare nel momento in cui la funzione nel momento in cui la funzione termina la sua esecuzione.termina la sua esecuzione.

Page 17: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

EsempioEsempio

Page 18: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Passaggio per Passaggio per indirizzoindirizzo

Non viene più passato il valore ma Non viene più passato il valore ma l’indirizzo della stessa variabilel’indirizzo della stessa variabile

Memoria del programma

Memoria main

x

y

a

b

app

Memoria scambia

Al termine della funzione scompaiono i parametri formali ma le modifiche rimangono valide per i parametri attuali

Page 19: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Passaggio per Passaggio per indirizzoindirizzo

Page 20: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Elemento di array Elemento di array come parametro come parametro

attualeattuale

Page 21: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Array come Array come parametroparametro

E’ necessario passare anche il numero E’ necessario passare anche il numero di elementidi elementi

Page 22: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Gli array sono sempre passati per Gli array sono sempre passati per riferimentoriferimento

Page 23: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Procedure e Procedure e funzioni. Perché?funzioni. Perché?Evitare duplicazioni del codiceEvitare duplicazioni del codice

Con le procedure si evita di duplicare parti del Con le procedure si evita di duplicare parti del codice sorgente, quando si chiama o invoca una codice sorgente, quando si chiama o invoca una procedura si esegue il codice corrispondente. A procedura si esegue il codice corrispondente. A ogni nuova chiamata il suo codice è eseguito ogni nuova chiamata il suo codice è eseguito nuovamente.nuovamente.La duplicazione pone due tipi di problemi:La duplicazione pone due tipi di problemi:

Aumento della lunghezza del codice e quindi Aumento della lunghezza del codice e quindi minore leggibilitàminore leggibilitàDifficoltà nell’apportare modifiche che devono Difficoltà nell’apportare modifiche che devono essere effettuate in tutte le copie del codice essere effettuate in tutte le copie del codice

… … ma questa non è la motivazione più ma questa non è la motivazione più importanteimportante

Page 24: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Progettazione Progettazione modularemodulare

Per affrontare problemi complessi si ricorre alla tecnica Per affrontare problemi complessi si ricorre alla tecnica dei raffinamenti successivi che suggerisce di scomporre dei raffinamenti successivi che suggerisce di scomporre il problema in problemi più semplici (sottoproblemi)il problema in problemi più semplici (sottoproblemi)

… … e di applicare anche a questi sottoproblemi la stessa e di applicare anche a questi sottoproblemi la stessa tecnica fino ad ottenere problemi facilmente risolvibilitecnica fino ad ottenere problemi facilmente risolvibili

Questa tecnica è definita top-down:Questa tecnica è definita top-down:

Si parte da una visione globale del problema Si parte da una visione globale del problema (alto livello di astrazione) [top](alto livello di astrazione) [top]

Poi si scende nel dettaglio dei sottoproblemi Poi si scende nel dettaglio dei sottoproblemi diminuendo il livello di astrazione [down]diminuendo il livello di astrazione [down]

Viene fornita inizialmente una soluzione del problema Viene fornita inizialmente una soluzione del problema che non si basa però su operazioni elementari, ma sulla che non si basa però su operazioni elementari, ma sulla soluzione di sottoproblemisoluzione di sottoproblemi

Page 25: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Metodologia top Metodologia top downdown

Se il sottoproblema è semplice allora viene risolto, Se il sottoproblema è semplice allora viene risolto, viene cioè scritto l’algoritmo di risoluzioneviene cioè scritto l’algoritmo di risoluzione

Se il sottoproblema è complesso viene riapplicato lo Se il sottoproblema è complesso viene riapplicato lo stesso procedimento scomponendolo in stesso procedimento scomponendolo in sottoproblemi più semplicisottoproblemi più semplici

Diminuisce il livello di astrazione Diminuisce il livello di astrazione (si affrontano problemi sempre più concreti)(si affrontano problemi sempre più concreti)

Diminuisce il livello di complessità Diminuisce il livello di complessità (i sottoproblemi devono essere più semplici del (i sottoproblemi devono essere più semplici del problema che li ha originati) problema che li ha originati)

Fino ad arrivare alla stesura di tutti gli algoritmi Fino ad arrivare alla stesura di tutti gli algoritmi necessarinecessari

Page 26: Procedure e funzioni A. Ferrari. Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata

Top Down e Top Down e Bottom UpBottom Up

I modelli top-down e bottom-up (ing. dall'alto verso il I modelli top-down e bottom-up (ing. dall'alto verso il basso e dal basso verso l'alto, rispettivamente) sono basso e dal basso verso l'alto, rispettivamente) sono strategie di elaborazione dell'informazione e di gestione strategie di elaborazione dell'informazione e di gestione delle conoscenze, riguardanti principalmente il software delle conoscenze, riguardanti principalmente il software ……

Nel modello top-down è formulata una visione generale Nel modello top-down è formulata una visione generale del sistema senza scendere nel dettaglio di alcuna delle del sistema senza scendere nel dettaglio di alcuna delle sue parti. Ogni parte del sistema è successivamente sue parti. Ogni parte del sistema è successivamente rifinita aggiungendo maggiori dettagli dalla rifinita aggiungendo maggiori dettagli dalla progettazione.progettazione.

Nella progettazione bottom-up parti individuali del Nella progettazione bottom-up parti individuali del sistema sono specificate in dettaglio. Queste parti sistema sono specificate in dettaglio. Queste parti vengono poi connesse tra loro in modo da formare vengono poi connesse tra loro in modo da formare componenti più grandi, che vengono a loro volta componenti più grandi, che vengono a loro volta interconnessi fino a realizzare un sistema completo. interconnessi fino a realizzare un sistema completo.

WikipediaWikipedia