Funzioni in C++

Un problema reale complesso può essere in sotto-problemi più semplici. Ogni sotto-problema  viene analizzato e risolto in modo indipendente dagli altri.

Questa metodologia di scomposizione di un problema in problemi più semplici è detta top-down.
L’analisi di un problema complesso avviene per raffinamenti successivi, si scompone cioè l’attività da svolgere in sotto-attività, che possono risultare a loro volta ulteriormente scomponibili. Questo processo è quindi ricorsivo: si procede nella scomposizione in attività sempre più semplici fino a giungere ad azioni elementari che, nel caso dello sviluppo del software, corrispondono alle singole istruzioni scritte nel linguaggio di programmazione scelto.

Ogni sotto-problema verrà quindi risolto da un singolo sotto-programma interagendo con gli altri senza dover conoscerne le attività svolte che hanno portato alla risoluzione del sotto-problema.

Un sotto-programma, identificato da un nome, è un insieme di istruzioni che viene invocato dal MAIN, il sotto-programma principale. L’esecuzione di un programma parte dalla prima istruzione contenuta nel MAIN. Ogni successiva istruzione viene eseguita in sequenza e quando incontra un’istruzione di chiamata CALL ad un sotto-programma, il MAIN sospende il proprio lavoro e demanda al sottoprogramma il compito di eseguire le proprie istruzioni prefissate. Quando il sotto-programma conclude il proprio lavoro, ritorna il comando al MAIN il quale prosegue nell’eseguire le proprie istruzioni a partire dalla prima istruzione successiva a quella della chiamata.

In realtà esiste una differenza fra procedura e funzione. Una procedura è un sotto-programma indipendente dagli altri che ha il solo compito di eseguire le proprie istruzioni necessarie a risolvere un particolare sotto-problema assegnatogli. Una funzione invece è un sotto-programma che svolge gli stessi compiti della procedura ma che in più restituisce al sotto-programma chiamante, per esempio il MAIN, il risultato della funzione stessa.

Le procedure e le funzioni fanno parte di un particolare paradigma di programmazione, che viene detto modulare. Questa metodologia di scomposizione del programma consente la creazione di moduli distinti ciascuno costituito da uno o più sotto-programmi offrendo numerosi vantaggi, tra i quali:

  1. Miglioramento della lettura del codice.
  2. Riutilizzo del codice nello stesso programma o in altri.
  3. Riduzione del tempo di sviluppo del software grazie al fatto che più sviluppatori possono lavorare contemporaneamente allo stesso progetto.
  4. Semplificazione delle attività di manutenzione del software.

 

 

Sotto-programmi in C++

Nel linguaggio C++ esiste solo il concetto di funzione, cioè un sottoprogramma che restituisce un valore. Per creare delle procedure bisogna gestire in modo particolare le funzioni, facendo in modo che non facciano ritornare nessun valore (VOID).

Una funzione ha la seguente struttura:

 

 

Dove:

  • tipo_restituito indica il tipo (int, float, double, char, string, bool, etc)di risultato che la funzione restituisce.
  • nome_funzione indica il nome assegnato alla funzione.
  • corpo del sotto-programma costituito dalle dichiarazioni di variabili locali e istruzioni atte a risolvere il sotto-problema assegnatogli;

tra le varie istruzioni deve essere presente come ultima istruzione quella che consente alla funzione stessa di restituire un risultato al MAIN:

return risultato;

dove risultato rappresenta una variabile che assume il valore finale dell’elaborazione (il risultato).

 

Per realizzare una procedura basterà omettere l’istruzione “return risultato”, in modo che non restituisca nessun valore, e come tipo di dato restituito indicare “void”. Nell’esempio seguente la funzione “mostra_messaggio” non restituisce nessun valore.

Esempio completo