Vai al contenuto principale
  1. 0. Introduzione
    2 Argomenti
  2. 1. Comunicazione
    4 Argomenti
  3. 2. Calcolo
    4 Argomenti
  4. 4. Coordinamento
    5 Argomenti

Risorse didattiche modularizzazione

Esercizio pratico

Usa questa playlist di Informatici Senza Frontiere:

Contesto teorico

Nella programmazione esistono dei costrutti di programma centrali. Questi concetti esistono praticamente in tutti i linguaggi di programmazione, solo che non sono sempre denominati e implementati nello stesso modo.

Loop

I loop sono fondamentalmente delle ripetizioni. Nella vita di tutti i giorni ci imbattiamo in ripetizioni di questo tipo. Supponendo che la cucina debba essere descritta come un programma, lo pseudo-codice per il taglio potrebbe assomigliare, ad esempio, a questo:

Prendere il coltello in mano. Muovere il coltello fino a toccare l’oggetto che si vuole tagliare. Spostare il coltello di un centimetro a destra. Premere il coltello verso il basso e muoverlo alternativamente in avanti e indietro. Sollevare il coltello verso l’alto. Spostare il coltello di un centimetro verso l’oggetto. Premere il coltello verso il basso.

Alla fine si ripetono gli stessi passaggi. Invece di scrivere il passo X volte, sarebbe possibile indicare anche il numero di ripetizioni. Potrebbe essere così:

Ripetere i seguenti passaggi per dieci volte: Spostare il coltello di un centimetro a destra. Premere il coltello verso il basso e muoverlo alternativamente in avanti e indietro. Sollevare il coltello verso l’alto.

Naturalmente, si potrebbe ripetere questa operazione anche 100 volte, 1000 volte o all’infinito. Ma riuscirai a tagliare tutti gli oggetti in questo modo? Probabilmente no. È qui che entra in gioco un altro elemento centrale del programma: la differenziazione dei casi (detta anche condizione o ramificazione).

Distinzione dei casi

In termini semplici, le distinzioni di caso sono domande a cui si può rispondere con un sì o con un no. Nello pseudo-codice qui sopra, c’è già una distinzione di caso: “muovi il coltello finché non tocchi l’oggetto da tagliare”.

In questo caso, lo chef può chiedere ripetutamente “sto toccando l’oggetto?” e rispondere alla domanda con un sì o un no. Finché l’oggetto non viene toccato, lo chef avvicina il coltello all’oggetto. Ma se tocca l’oggetto, si ferma. Ci sono quindi due azioni possibili, a seconda che la condizione sia soddisfatta o meno. Questo è il motivo per cui le distinzioni di caso sono chiamate anche ramificazioni.

A questo punto è possibile impostare una condizione anche per il movimento di taglio: “ripetere i passaggi seguenti finché non si tocca più l’oggetto quando si preme: spostare il coltello di un centimetro in direzione dell’oggetto. Premere il coltello verso il basso e muoverlo alternativamente in avanti e indietro. Sollevare il coltello verso l’alto”.

Ora lo chef non deve più tagliare X volte o rimanere con una carota tagliata a metà. Taglia l’oggetto fino alla fine.

Variabili

Le variabili sono costrutti di programma centrali nell’informatica. Una variabile è fondamentalmente un numero definito che può essere modificato. Ad esempio, il denaro nel portafoglio può essere rappresentato come una variabile. Forse hai 50 franchi. In molti linguaggi di programmazione, si scriverebbe qualcosa come “soldi_nel_portafoglio = 50”. L’impostazione di questo valore iniziale si chiama “inizializzazione”. Durante l’inizializzazione, alla variabile viene assegnato un valore iniziale.

Una variabile può anche essere modificata nel programma. Se si mettono 10 franchi in più nel portafoglio, dopo si avranno i soldi originali e 10 franchi. In un linguaggio di programmazione, questo potrebbe apparire come segue: “denaro_nel_portafoglio = denaro_nel_portafoglio + 10”. Il programma calcola quindi 50 + 10 e assegna questo valore alla variabile denaro_nel_portafoglio.

Le variabili possono essere utilizzate per una grande varietà di cose in informatica. Le variabili nei giochi in cui si contano i punti, ad esempio, sono particolarmente interessanti per gli studenti. I punti sono un tipico esempio di variabile, proprio come il numero di vite o il livello corrente.

Funzioni e parametri

Immagina di stare programmando un robot da cucina. L’hai appena programmato per tagliare qualcosa. Ora puoi copiare il programma più volte e inserirlo nel punto giusto. Tuttavia, questo diventa rapidamente confuso e confusionario. Non sarebbe pratico se si potesse semplicemente dare al robot il comando “taglia”?

Questo è esattamente ciò che fa una funzione. Una funzione è un sottoprogramma che può essere richiamato molto facilmente. Il programma di taglio potrebbe chiamarsi “cut”, ad esempio. Forse il robot da cucina ha anche funzioni come “friggere”, “cuocere” o “condire”.

Si potrebbe anche dire semplicemente a uno chef: “Taglia tre carote per un momento”. Questo è possibile anche con un robot o un programma? Sì, è possibile. È possibile definire una funzione in modo che possa essere eseguita più volte o utilizzare determinati oggetti. Nel caso di un robot da cucina, si potrebbe prendere l’intero programma dall’alto e dire:

Taglia (numero di ripetizioni, oggetto) significa:
Ripeti le seguenti (numero di ripetizioni) volte:
Prendi l'(oggetto) e ripeti questi passaggi fino a quando non si tocca più l'oggetto quando si preme:
Sposta il coltello di un centimetro a destra.
Premi il coltello verso il basso e muovilo alternativamente in avanti e indietro.
Solleva il coltello verso l'alto.
Ora la funzione potrebbe essere richiamata dicendo: "cut (3, carota)". In questo caso, il robot taglierà tre carote.

“Numero_ripetizioni” e “Oggetto” sono chiamati parametri. Un parametro è una sorta di segnaposto che può essere passato a una funzione. Non appena si chiama la funzione, è possibile dirle esattamente cosa si vuole che faccia. Ad esempio, tagliare esattamente tre carote.