P.4 Scrivere un programma

Programmare significa risolvere un problema in modo che la soluzione sia ripetibile e ben determinata. Ogni programma è formato da una combinazione di sequenze, test e ripetizioni.

Prima di scrivere del codice io raccomando di provare a ragionare sulla soluzione utilizzando carta e matita. Esistono dei metodi formali per “disegnare” il software, come i diagrammi di flusso. Personalmente preferisco una soluzione più rapida e meno formale che utilizza dei semplici blocchi rettangolari in cui descrivere le operazioni previste.

Un programma risolve un problema. La prima cosa da fare è cercare di descrivere questa soluzione in modo più preciso possibile. Immaginate di dover descrivere le operazioni a una persona che poi le eseguirà senza pensarci… come un robot. Le operazioni devono essere descritte nel modo più chiaro e preciso possibile. Per semplificare il compito, affrontate il problema e suddividetelo in sotto-problemi e poi in blocchi via via più semplici. Alla fine del lavoro di scomposizione avrete descritto un processo con delle semplici operazioni che possono essere tradotte in codice in modo molto semplice.

Descrivo questi metodi e come ragionare da programmatori nel mio libro “Programmare”.

I tre segreti dei programmatori

Ogni programma è formato una composizione di tre ingredienti:

  • sequenze
  • diramazioni
  • ripetizioni

Per quanto incredibile è proprio così e non è farina del mio sacco: Teorema di Bohm-Jacopini (1966).

Sequenze

Possiamo letteralmente disegnare il nostro programma utilizzando dei semplici rettangoli (blocchi) in cui scriveremo le operazioni da svolgere in ogni passo. I blocchi si susseguono uno dopo l’altro. Abbiamo quindi un flusso di esecuzione in cui in un istante eseguiremo quanto scritto nel blocco attualmente “attivo”. Non possiamo avere due blocchi attivi contemporaneamente.

Ogni blocco contiene una descrizione delle operazioni da svolgere (1). I blocchi si sussegono uno dopo l’altro: evidenziamo la direzione del flusso d’esecuzione utilizzando delle frecce (2).

Esempio: Aprite un ricettario e scegliete una ricetta. Una ricetta è la descrizione di un processo, che prevede una sequenza di passi da eseguire in un preciso ordine.

Diramazioni

Un programma deve poter modificare il suo comportamento a fronte di situazioni che possono verificarsi. Questo prevede la possibilità che il flusso si dirami, prendendo strade differenti a seconda di quanto accade. Possiamo indicare un blocco di scelta o di test con un rombo. Nel blocco scriveremo quello che vogliamo testare, in forma di domanda: “la temperatura è pari a 100°C?”, “c’è il guanciale?”… La domanda ammette solo due risposte: Vero o Falso e quindi predisporremo due frecce d’uscita. Il flusso seguirà una o l’altra via. I due percorsi finiranno sempre per ricongiungersi.

Il blocco di test pone una domanda e prevede due alternative per far proseguire il flusso.

Esempio: Nel seguire la ricetta della pasta alla carbonara dobbiamo aprire il frigorifero e prendere il guanciale. Se la ricetta fosse interattiuva, dovremmo incontrare una domanda: “c’è il gauanciale?”. Nel caso ci fosse procederemo in un modo, altrimenti dovremo cercare della pancetta.

Ripetizioni

I computer sono nati per svolgere compiti ripetitivi. Abbiamo due tipi di cicli, quelli che ripetono un gruppo di istruzioni per un certo numero di iterazioni (es. 100 volte) e quelli che utilizzano una condizione di stop (es. attendi fino a che non arriva un SMS). Possiamo indicare un ciclo con numero predefinito di ripetizioni semplicemente disegnando una freccia che riporta il flusso all’inizio del gruppo di operazioni da ripetere. Le istruzioni ripetute compongono il corpo del ciclo.

Ciclo con 10 ripetizioni (in verde il corpo del ciclo).

Il secondo tipo di ciclo richiede un test e quindi lo raffigureremo combinando un blocco di test con i blocchi “base”. Il test può essere posto all’ingresso o all’uscita del ciclo.

Ciclo con test iniziale.

Nel caso di un ciclo con test all’uscita, osserviamo che le istruzioni che compongono il corpo saranno eseguite almeno una volta.

Ciclo con test in uscita.

Esempio: Per preparare le uova per la nostra carbonara dovremo sbatterle con la forchetta, magari ripetendo il movimento per 100 volte (primo tipo di ciclo), oppure fino a che il composto è spumoso (secondo tipo di ciclo).

Lascia un commento