DISCLIC
Facoltà di Lingue e Letterature Straniere
Giornata di studio a conclusione del ciclo di incontri sul gioco applicato alla didattica delle
lingue e alla tecnologia
Didattica 2.gioc0
GIOCO E PROGRAMMAZIONE
Università degli Studi di Genova – DIST
ing. Lidia Stanganelli
Sommario
 Introduzione
 Programmazione e gioco: quale comune
denominatore?
 Comparazione di alcuni linguaggi di
programmazione: l’istruzione C=A+B
 Affinità tra linguaggi dichiarativi e gioco. Un
esempio: il prolog
 Conclusioni
Introduzione
 Esistono in rete una moltitudine di giochi
didattici per l’apprendimento di diverse
discipline (matematica, lingue etc.)
 Giochi per imparare i linguaggi di
programmazione?
 In questo lavoro si vuole realizzare uno studio
su come si possa trasmettere la conoscenza
relativa alla programmazione attraverso una
attività “ludica” come quella del gioco.
Programmazione e gioco: il Logo
 È possibile pensare a diversi linguaggi di
programmazione per avvicinarsi al mondo dei
computers, non solo da semplici utenti ma da
“progettisti” in grado di realizzare tools (giochi)
 Negli ultimi cinquant’anni per trasmettere la
disciplina della programmazione in modo
semplice sono stati utilizzati linguaggi come il
Logo.
 Logo è un linguaggio di programmazione per
l’insegnamento di molte discipline, dalla
matematica alla logica, dalla musica al disegno e
naturalmente la programmazione stessa.
Programmazione e gioco: il Prolog
 Un linguaggio che si pone ad un alto livello di
espressività logico-matematico è il Prolog. È un
linguaggio al quale possono avvicinarsi tutti gli
individui che abbiano le capacità logicomatematiche di descrizione dei problemi.
 Infatti al contrario dei linguaggi procedurali
(come Pascal, Fortran, C, etc.), e dei linguaggi ad
oggetti (C++, Java, Ruby etc.), Prolog è un
linguaggio di alto livello più vicino al modo di
pensare di un essere umano.
 ha l'enorme vantaggio di essere sintetico, e
fortemente espressivo.
Che relazione c’è tra gioco e
programmazione?
 In realtà i linguaggi di programmazione e le attività di un
gioco sono molto simili, intanto perché entrambe le
attività sono costituite da un algoritmo (una sequenza di
azioni elementari eseguite allo scopo di raggiungere un
determinato obiettivo) ed anche per il risvolto di
gratificazione psicologica che anche la programmazione,
al pari del gioco, fornisce: chi scrive un buon programma
e lo vede funzionare è gratificato allo stesso modo con il
quale si sente soddisfatto dopo aver superato un livello di
un gioco di abilità!
 Sia in gioco che la programmazione sono processi vicini
anche perché hanno entrambi l’obiettivo di risolvere i
problemi e di usare un linguaggio diverso da quello
naturale.
Quale linguaggio scegliere?
 Disseminare i concetti piuttosto che uno o più
linguaggi di programmazione.
 Comparare diversi linguaggi è un lavoro
impegnativo, per cui prendiamo una semplice
istruzione e vediamo come viene
rappresentata nei vari linguaggi.
 Useremo un approccio pragmatico
Un approccio comparato (1)
 Istruzione C=A+B
 Obiettivo: scegliere il linguaggio più
espressivo
 Concetti da spiegare, pro e contro:
 Basic: n.ri linee, variabili. Semplice, vecchio, carenti
costrutti linguistici
 C: direttive processore…, per programmatori esperti
Un approccio comparato (2)
 Istruzione C=A+B
 Obiettivo: scegliere il linguaggio più
espressivo
 Concetti da spiegare, pro e contro:
 Java: classi e molto altro. Vasta libreria di
classi….scoraggiante
 Prolog: è il miglior linguaggio a livello concettuale
…in definitiva
Un esempio: il prolog (1)
 Un semplice esempio di funzionamento di tale
linguaggio, e come per gioco l’apprendimento delle
potenzialità e dei primi rudimenti.
 Scriviamo un programma Prolog che simuli
l’imbarco delle carrozze di un treno su di un
traghetto per superare lo Stretto di Messina
 Il programma deve dare la possibilità di effettuare le
seguenti operazioni mediante opportuni predicati:




Inserimento di una o più carrozze
Estrazione di una o più carrozze
Ricerca della carrozza più vecchia
Calcolo del numero medio di posti a sedere
 Le informazioni relative alla singola carrozza sono:
 un codice seriale
 il numero di posti a sedere
 l’anno di costruzione
Un esempio: il prolog (2)





Si consideri il traghetto come una pila, nella quale le carrozze entrano ed escono dallo
stesso varco, quindi la politica di inserimento ed estrazione delle carrozze è LIFO (last
in first out).
La carrozza viene rappresentata con un fatto prolog del tipo:
carrozza(Cod ,Posti, Anno)
Di seguito si mostrano le soluzioni dei quattro punti suddetti.
L’operazione di inserimento di una o più carrozze viene effettuata dal predicato:

push(Lista1, Lista2, Lista3).


L’operazione di estrazione di una o più carrozze viene effettuata dal predicato:

pop(N, Lista1, Lista2).


Questa operazione permette di estrarre N elementi dalla testa della pila Lista1. Lista2, conterrà il
risultato della chiamata pop, cioè la lista di carrozze estratte da Lista1.
L’operazione che ricerca la carrozza con l’anno di costruzione più vecchio è eseguita
dal predicato:

search(Lista, CarrVecchia)


Questa operazione permette di inserire gli elementi della Lista1 in testa alla Lista2. Lista3, conterrà il
risultato della chiamata push.
Questa operazione effettua la scansione di tutta la Lista confrontando gli anni di costruzione di ogni
elemento carrozza(Cod ,Posti, Anno) e scrivendo nella variabile di uscita CarrVecchia quella con l’anno di
costruzione più piccolo.
L’operazione che calcola il numero medio di posti a sedere tra le carrozze del traghetto
è:

seats_average(Lista,Media)

Questa operazione effettua la divisione tra il numero dato dalla somma di tutti i posti di tutte le carrozze
e il numero di carrozze presenti nell’argomento Lista. Il risultato è restituito nella variabile Media.
Un esempio: il prolog (3)
 La lista è una metafora di come si potrebbe simulare
un gioco costruttivo nel quale si tratta di comporre
oggetti complessi a partire da oggetti semplici
(nell’esempio il concetto di carrozza è l’elemento
semplice il concetto di treno è l’elemento
complesso).
 Inoltre agli studenti può essere insegnato il
meccanismo del comporre e scomporre il treno
attraverso delle operazioni elementari (inserisci in
lista ed estrai dalla lista che corrisponde a stacca e
attacca la carrozza). Una volta progettata
l’interfaccia di tale gioco gli studenti potranno
comprendere strutture del linguaggio anche
complesse. Un gioco di composizione un po’ come
quello del Lego.
Conclusioni
 Qualcuno ha detto "se tutto quello che hai è un martello allora ogni




problema ti sembrerà un chiodo".
L’obiettivo è quello di ampliare il repertorio di strumenti a
disposizione per costruire programmi di qualità e che quindi si ha
bisogno di conoscere più linguaggi, ma da dove cominciare?
Ovviamente a partire dal martello e cioè da un linguaggio semplice.
Spesso la prima scelta, quella più alla moda, è sui linguaggi imperativi.
Questi sono importanti per insegnare concetti e per le classi di
problemi che risolvono. Complicazione in termini di concetti da
insegnare e di tempo, inoltre gli studenti devono mostrare un
profondo radicamento nella conoscenza del linguaggio prima di poter
scrivere qualcosa senza errori.
La seconda scelta, meno frequente, potrebbe essere un linguaggio di
scripting , ma non a studenti alle prime armi n quanto non sono buoni
linguaggi dal punto di vista della "pulizia" delle strutture logiche.
La migliore scelta è utilizzare un linguaggio dichiarativo, in quanto
conserviamo lo stesso livello di astrazione del modo in cui pensiamo il
concetto: la somma in questo caso ed impariamo giocando. Un
linguaggio che preservi l'astrazione concettuale, è il Prolog. Esso è
realmente uno strumento potente per la risoluzione dei problemi
Grazie per l’attenzione
Didattica 2.gioc0
Any Questions ?
Scarica

Gioco e programmazione