Introduzione alle funzioni

I problemi reali presentano un alto livello di complessità, perciò sovente non si riesce ad affrontarli nella loro globalità, Pensiamo ad esempio allo sviluppo di un software per gestire i processi di una biblioteca…da dove iniziare!?! Se i problemi sono complessi è necessario applicare delle tecniche che ne facilitino la risoluzione. Le principali tecniche per risolvere problemi complessi sono la metodologia top-down e bottom-up,

Top Down

Nell’applicazione del metodo Top-Down l’analisi dei problemi complessi avviene per raffinamenti successivi, si scompone cioè l’attività da svolgere in sottoattività, che possono risultare a loro volta scomponibili. Le attività di livello superiore vedono quelle di livello inferiore come scatole nere cioè non conoscono il processo di risoluzione ma sanno che avranno un risultato corretto.

Pensiamo ad esempio al programma per la gestione dei processi in una di una biblioteca; alcune delle sotto-attività che potremmo individuare sono:

Ogni box rappresentato in figura potrebbe essere scomposto in altri box più elementari e così via.

Bottom-up

Il bottom up prende corpo dal punto di partenza (bottom) ovvero dalla situazione iniziale; considera l’obiettivo finale, induce a costruire un percorso sequenziale organizzato in passaggi successivi in cui l’ancoraggio tra traguardi intermedi e obiettivo finale è ricercato con metodo generalmente improntato a tentativo ed errore quindi di tipo casuale, nei casi migliori intuitivo. Questo approccio è tipico della programmazione orientata agli oggetti

Sottoprogrammi

Ad un problema, analizzato tramite l’approccio top-down durante la fase di progettazione, corrisponde nello sviluppo del software, un programma che fa uso di sottoprogrammi. Un problema complesso viene scomposto in tanti sottoproblemi più semplici. Per ogni sottoproblema sarà possibile sviluppare un sottoalgorimo che lo risolve. L’implementazione del sottoalgorimo in un linguaggio di programmazione prende il nome di sottoprogramma o funzione, Tante funzioni formano l’intero programma.

Una funzione software è l’implementazione di un sottoalgoritmo ed ha la stessa logica di una funzione matematica:

  • prende in input degli argomenti
  • effettua delle operazioni
  • restituisce un risultato finale

La scomposizione di un programma in tante funzioni permette di implementare del codice modulare e pià facilmente manutenibile. Inoltre una funzione ha la proprietà di essere riusabile. Se ad esempio implementiamo una funzione per il calcolo della somma di tre numeri, questa potrà essere richiamata tante volte quanto necessario. e non sarà necessario scrivere ogni volta il codice per svolgere questa operazione. Le tre caratteristiche principali delle funzioni sono:

  • riusabilità: le funzioni possono essere chiamate tante volte quanto occorre, all’interno del codice
  • astrazione: le funzioni permettono di concentrarsi su alcuni aspetti senza considerare il problema nella sua interezza
  • risparmio: il codice viene prodotto una sola volta

Funzioni

Una funzione è una parte di un programma capace di compiere un compito specifico. Supponiamo di voler implementare una funzione per il calcolo della somma di due numeri interi. Per prima cosa è necessario definire quali sono i dati in input e che cosa la funzione deve produrre in output. Questo disegno può aiutarci a riflettere:

Dall’immagine vediamo che la funzione prende due valori interi in input e restituisce un valore anch’esso intero. Nel linguaggio C++ per scrivere una funzione per prima cosa è necessario scrivere la sua intestazione in un prototipo seguendo la sintassi:

tipo_restituito nome_funzione( parametri )

Nel nostro caso:

int somma( int n1, int n2 );

I prototipi delle funzioni vanno dichiarati all’inizio del programma. Facciamo altri esempi:

Scrivi una funzione chiamata test1 che prende in input un valore intero e ritorna una stringa

string test1( int val );

Scrivi una funzione chiamata test2 che prende in input due valori con la virgola e ritorna un carattere:

char test2 (float a, float b);

Chiamata di funzione

Come abbiamo descritto finora il programma si può vedere come un insieme di blocchi scomposti che sono specializzati nello svolgimento di particolari operazioni. Abbiamo chiamato questi blocchi funzioni. Da ogni parte di un programma sarà possibile “chiamare” una funzione per fargli compiere il lavoro per la quale è stata implementata. Per chiamare una funzione è necessario utilizzare il suo nome passando i parametri che occorrono.