Dopo molti anni mi sono ritrovato a insegnare Informatica in una terza. Questo 竪 una breve slide che ho fatto per spiegare il ciclo for
C'竪 un errore nelle slides 7---9. ho scritto erroneamente una "," al posto del ";".
際際滷s di una breve conferenza che ho tenuto a scuola. Ritengo che lo stereotipo del programmatore brutto, scontrorso e antisociale sia in declino, ma perch辿 ci嘆 si realizzi davvero occorre affinare nuove abilit, le abilit sociali. Sia Online che Offline
Basato in parte sul lavoro seguente
http://www.slideshare.net/mastorey/msr-2012-keynote-storey-slideshare
Introduzione al Controllo di versione (in generale) e al funzionamento di Git (in particolare). Upgrade di un'altra presentazione simile nelle basi ma incentrata su SVN.
Introduzione al sistema binario adatto a ragazzi delle scuole superiori (liceo scientico o ITIS)
Traduzione delle slides omonime presenti qu su slideshare di german margrit
際際滷s presentate all'incontro Didamatica 2016 a Udine. Si parla dei vantaggi didattici di una introduzione precoce dei principi Agili nella didattica informatica quotidiana (un mio pallino).
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica 竪 ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte 竪 adatta ai ragazzi di 1-2属 liceo SSA e di 2属-3属 ITIS (in particolare ad indirizzo informatico)
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica 竪 ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte 竪 adatta ai ragazzi di 1-2属 liceo SSA e di 2属-3属 ITIS (in particolare ad indirizzo informatico)
Una primissima introduzione al TDD per chi 竪 a digiuno di test in generale e di TDD in particolare. Usa Java/Junit, ma 竪 facimente adattabile ad altri linguaggi. 40-60 minuti.
Introduzione al linguaggio Java per chi ha esperienza di C++. Non si parla di OOP, solo di linguaggio.
Codice sorgente dell'esercizio finale qui: https://pastebin.com/R4yZGQcy
際際滷s di una breve conferenza che ho tenuto a scuola. Ritengo che lo stereotipo del programmatore brutto, scontrorso e antisociale sia in declino, ma perch辿 ci嘆 si realizzi davvero occorre affinare nuove abilit, le abilit sociali. Sia Online che Offline
Basato in parte sul lavoro seguente
http://www.slideshare.net/mastorey/msr-2012-keynote-storey-slideshare
Introduzione al Controllo di versione (in generale) e al funzionamento di Git (in particolare). Upgrade di un'altra presentazione simile nelle basi ma incentrata su SVN.
Introduzione al sistema binario adatto a ragazzi delle scuole superiori (liceo scientico o ITIS)
Traduzione delle slides omonime presenti qu su slideshare di german margrit
際際滷s presentate all'incontro Didamatica 2016 a Udine. Si parla dei vantaggi didattici di una introduzione precoce dei principi Agili nella didattica informatica quotidiana (un mio pallino).
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica 竪 ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte 竪 adatta ai ragazzi di 1-2属 liceo SSA e di 2属-3属 ITIS (in particolare ad indirizzo informatico)
Questi sono i miei appunti di informatica sviluppati durante i lockdown. Di fatto costituiscono il libro di testo dei miei corsi. La grafica 竪 ispirata a D&D 5e nella speranza di accattivarmi l'interesse dei ragazzi.
Questa parte 竪 adatta ai ragazzi di 1-2属 liceo SSA e di 2属-3属 ITIS (in particolare ad indirizzo informatico)
Una primissima introduzione al TDD per chi 竪 a digiuno di test in generale e di TDD in particolare. Usa Java/Junit, ma 竪 facimente adattabile ad altri linguaggi. 40-60 minuti.
Introduzione al linguaggio Java per chi ha esperienza di C++. Non si parla di OOP, solo di linguaggio.
Codice sorgente dell'esercizio finale qui: https://pastebin.com/R4yZGQcy
Queste slide dal titolo provocatorio cercano di dare l'idea che la stupidit e la pigrizia possono avere un effetto positivo nela programmazione per la ricerca di soluzioni semplici. Nello specifico caso parliamo di funzioni in C
2. Cos'竪 uno stack?
Una struttura dati (astratta) di tipo LIFO (Last In
First Out)
Ovvero, I dati sono estratti in modo inverso
rispetto all'ordine di inserimento
Quindi esattamente come una pila di libri, o di altri
oggetti
Novembre 2013
2
3. Struttura
Lo stack 竪 una struttura estremamente semplice
Dotato di poche operazioni: inserimento di un
oggetto nello stack ed estrazione di un oggetto
dallo stack
Opzionalmente si possono inserire altre
funzionalit di supporto, per esempio per
controllare se lo stack 竪 vuoto oppure no.
Novembre 2013
3
4. Struttura
Le operazioni di inserimento ed estrazione sono
chiamate classicamente push e pop.
Lo stack 竪 una struttura informatica
FONDAMENTALE. E' usato infatti per
(livello macchina): chiamate a funzioni
Ricorsione
Risoluzione di espressioni
...
Novembre 2013
4
6. Possibile scheletro di implementazione
abstract油public油class油Stack油{
油abstract油public油Object油pop();
油abstract油public油void油push(Object油
obj);
油abstract油public油boolean油isEmpty()油;
}
Novembre 2013
6
7. Classe... astratta?
Una classe astratta 竪 una classe che non si
implementa direttamente, ma nella quale si
dichiarano tutti i metodi che si vogliono
implementare nella classe vera
E' una classe che non si pu嘆 utilizzare
direttamente, ma deve essere implementata
tramite sottoclassi.
Ricorda un po' le dichiarazioni delle funzioni in
C/C++ (ma non troppo)
Novembre 2013
7
9. Implementazione statica
In questo caso, occorre allocare in anticipo lo
spazio da utilizzare (tipicamente un array,
stimandone la dimensione)
Una variabile (tipicamente chiamata top) punta
all'elemento dell'array nel quale avverr il prossimo
inserimento.
Novembre 2013
9
12. Stack statico: programma di esempio
public油static油void油main(String油args[])油{
油油油油油油油油StackStatico油s=new油StackStatico();
油油油油油油油油s.push(new油Integer(83));
油油油油油油油油s.push(new油Integer(12));
油油油油油油油油s.push(new油Integer(67));
油油油油油油油油while油(!s.isEmpty())油{
油油油油油油油油油油油油System.out.println(s.pop());
油油油油油油油油}
油油油油}
Novembre 2013
12
13. Problema
Obbligo di definire le dimensioni massime
possibilit di eccedere le dimensioni stabilite (stack
overflow) se la nostra stima 竪 troppo bassa.
spreco di memoria, se la nostra stima 竪 troppo alta
Novembre 2013
13
14. Alternativa?
Si!
Possiamo implementare lo stack in modo
dinamico, cio竪 utilizzando quella parte di memoria
RAM che non 竪 utilizzata da nessun processo ed 竪
a disposizione (tale memoria 竪 chiamata memoria
heap, o mucchio di memoria)
Utilizzeremo cos狸 solo la memoria che ci serve (o
quasi)
Novembre 2013
15. La struttura dell'oggetto
Per farlo, dovremo utilizzare un oggetto molto
diverso, formato da due attributi
il campo informativo (dato) che contiene l'oggetto
un puntatore la seconda 竪 un puntatore che punta
all'elemento successivo (idealmente, una freccia)
Novembre 2013
15
18. Inizializzazione
Dovremo sempre avere modo di recuperare il
primo elemento dello stack: chiameremo top la
variabile che punta all'elemento in cima allo stack;
Tale variabile sar nel main (e la chiameremo s)
s油=油new油StackDinamico();
Novembre 2013
18
20. Questo elemento serve solo a segnare la fine
dello stack, e non contiene oggetti. E' gestito dal
costruttore
Novembre 2013
20
21. Inizializzazione
In sostanza, l'inizializzazione 竪 gestita totalmente
dal costruttore, che dovr fare due cose:
Settare a null il puntatore all'elemento successivo
Settare a null il puntatore al dato (non ci sono dati,
infatti e in questo primo elemento non ci saranno
mai.)
Novembre 2013
21
22. Inserimento di un elemento (PUSH)
Per inserire un elemento nello stack, dobbiamo
utilizzare il metodo push(). Al suo interno, dovremo
creare un nuovo elemento in una variabile di
appoggio, poi questo nuovo elemento diverr il nuovo
elemento pi湛 in alto dello stack. Dopo aver inserito
l'informazione, lo agganceremo allo stack
preesistente;
Novembre 2013
22
32. Eliminazione di un elemento (POP)
Come funziona il metodo pop()? Ancora pi湛
semplice.
Stacchiamo il primo elemento (se esiste) dal resto
dello stack, assegnandolo alla variabile t
Andiamo avanti di un posto
Restituiamo l'oggetto contenuto
Poniamo t=null (opzionale). Privo di riferimenti, la
memoria allocata torna disponibile. (In C/C++ va
deallocata manualmente)
Novembre 2013
32
43. Migliorabile?
Certamente si...
Non permette di osservare il dato nello stack senza
toglierlo
Non sappiamo quanti elementi contiene
Altri miglioramenti, al vostro buon cuore
Novembre 2013
43
44. Migliorabile?
Realizzate quindi un programma che inserisca
diversi oggetti nello stack e li estragga.
Implementate ENTRAMBE le versioni (statiche e
dinamiche) dello stack, con la stessa interfaccia
pubblica.
Il programma di prova deve funzionare in modo
identico con le due implementazioni.
Novembre 2013
44