Introduzione Algoritmi e programmi: la rilevanza dello studio dei Linguaggi di Programmazione.Martedì 6 ottobre 2020 - Lezione 2
Analisi di problemi del C che rendono difficile valutare la correttezza dei programmi.
FP1 Introduzione ai linguaggi funzionale: l'archetipo teorico, il \lambda-calcolo.
Combinatori I, K, S. Computazione e computazioni non terminanti. Punti fissi.
FP2 Introduzione ad Haskell: lambda calcolo in HaskellMartedì 13 ottobre 2020 - Lezione 3
Introduzione ai tipi di Haskell: polimorfismo e termini non tipabili
Strategia di valutazione: call-by-name
Funzioni: cittadini di prima classe.
OOP1 Introduzione agli oggetti: metafora degli oggetti come automi: stato nascosto e interfaccia
Classi come descrittori degli oggetti: definizioni di classi in C++
Regole di visibilità:private
epublic
.
Costruttori. Overloading.
OOP2 Programmazione di un tipo di dati astratto in C++: i numeri razionaliMartedì 20 ottobre 2020 - Lezione 4
Invarianti di tipo di dato.
Oggetti sull'Heap e oggetti sullo Stack
Ridefinizione di operatori in C++
OOP2 Ereditarietà e Sottotipaggio: la gerarchia dei puntiMartedì 27 ottobre 2020 - Lezione 5
Costruttori e supercostruttori. Metodi e supermetodi.
Lookup dinamico dei metodivirtual
.
FP3 Programmazione su naturali e liste in Haskell
Pattern matching.
Funzionali sulle liste:fold
.
FP4 Ancora funzionali su liste in Haskell:map
,zipWith
.
Applicazioni: prodotto scalare e prodotto tra matrici.
Haskellophilìa: Clausolawhere
e list comprehension.
OOP3 Pensare le soluzioni a oggetti: architettura dell'applicazione Scacchi.
Esecuzione come scambio messaggi. Delegation.
Riuso del codice: spingere in codice in alto nella gerarchia delle classi.
Algoritmi e programmi: la rilevanza dello studio dei Linguaggi di Programmazione.Giovedì 3 ottobre 2019 - Lezione 2
Analisi di problemi del C che rendono difficile valutare la correttezza dei programmi. Introduzione ai linguaggi di programmazione funzionale e a oggetti. Esercizio: usare la funzione scambia senza variabile di appoggio e scrivere un programma selectSort che azzera tutto il vettore, mentre funziona se viene usata un'altra funzione scambia.
FP 1: Introduzione ai linguaggi funzionali.Giovedì 10 ottobre 2019 - Lezione 3
La funzione identità e il suo tipo. Polimorfismo e type inference.
Il combinatore K e il suo tipo.
Funzioni cittadini di prima classe.
Il combinatore D: termini non tipabili.
Alcune funzioni sulle liste: sum e length. Definizioni di funzioni per pattern matching.
Funzionali sulle lise: map e fold. Liste di funzioni.
Esercizi:
1. Scrivere un programma che calcola il prodotto scalare di due liste.
2. Scrivere map usando fold e senza decomporre liste via pattern matching.
3. Argomentare sul perché non si può scrivere fold in termini di map.
FP 2: Vari esempi di prodotto scalare, zipWith.Giovedì 17 ottobre 2019 - Lezione 4
Pattern mathcing sugli interi: attenzione all'ordine con cui scrivere i casi di una definizione. Pattern matching non esaustivo.
Ancora su call-by-name: perché un myAnd con la semantica di && si potrebbe scrivere in Haskell. E in C no.
Definizioni e riduzioni. Confluenza e strategie di riduzione: outermost-leftmost è terminante.
Zucchero sintattico per Matematici: list comprehension. Alcuni esempi. fattori, primi, prodotto cartesiano.
Esercizi:
1. Scrivere un programma che genera numeri primi.
OOP 1: Introduzione alla programmazione a oggetti. Metafora degli oggetti come macchina con interfaccia e stato nascosto.Giovedì 24 ottobre 2019 - Lezione 5
Esempio: programmare i razionali: tipi astratti di dato.
Il costruttoclass
: parti pubbliche e private nella definizione di una classe.
Invarianti di tipo di dato.
Creazione di oggetti: metodi costruttori. Oggetti sull'heap e sullo stack.
Costruttori e metodi overloaded.
Architettura generale dell'applicazione sugli scacchi. La classePezzo
.
Esercizi:
1. Completare la classeRazionale
.
OOP 2: Classi e sottoclassi: EsempioGiovedì 31 ottobre 2019 - Lezione 6Pezzo
eAlfiere
.
Relazione di sottotipaggio tra i tipi definiti da una classe e la sua sottoclasse.
Metodi overriden: Esempio:puoiMuovere
.
Il dynamic method lookup: i metodivirtual
.
Costruttori delle sottoclassi e chiamate ai costruttori delle super classi.
Tipiche tecniche di programmazione: oggetti che passano il proprio riferimento.
Tipiche tecniche di programmazione: delegation. Esempio: il metodoprint()
.
Esercizi:
1. Scrivere una gerarchia di almeno 3 sottoclassi per dimostrare gli effetti del dynamic method lookup.
Far vedere che anche chiamate a metodo generate dall'esecuzione di un metodo, vengono guidate dal primo oggetto ricevente.
FP 3: Riscaldamento in Haskell: pattern matching sui booleani.Giovedì 7 novembre 2019 - Lezione 7
foldr
e (alcune del)le sue sorelle:foldl
efoldr1
.
Esempi:reverse
quadratica (per ricorsione esplicita e usandofoldr
`raccogliendo' i risultati delle chiamate ricorsive)
ereverse
efficiente con uso di parametro ausiliario per memorizzare i risultati
che corrisponde al `calcolo in avanti' difoldl
.
Tipi (polimorfismo limitato): alcune osservazioni sulle classi di Haskell(Eq a)
,(Ord a)
,Num
: loro relazioni coi tipi degli OOP.
Un grande classico: quicksort in Haskell: perla o propaganda?
Esercizi:
1. Scrivere quicksort in C sulle liste.
Ovviamente potete ``tradurre'' in C l'algoritmo Haskell visto a lezione,
ma che tipo di liste servono per avere un programma che sia fedele a Quicksort originale?
FP 4: Computazioni lazy in HaskellGiovedì 14 novembre 2019 - Lezione 8
Definire la lista dei numeri naturali. Lista dei numeri di Fibonacci.
Attenzione a scrivere definizioni produttive (cioè che producono almeno tanto input quanto ne consumano)
Un esempio un po' più complesso, gli Hamming numbers.
Generalizzazione degli Hamming Numbers a un insieme di generatori arbitrario.
Generare ciascun Hamming Number una sola volta
La principessa delle sequenze infinite: generazione dello stream dei numeri primi in Haskell.
Uno scritto sulla generazione di sequenze infinite: Computing Integer Sequences
Uno scritto sulla generazione dei numeri primi: Three Euler's Sieve and a Fast Prime Generator
OOP 3: Overloading di operatori in Haskell. Esempio ==.Giovedì 21 novembre 2019 - Lezione 9
Overloading ed ereditarietà.
Introduzione ai Template (strutture dati generiche). Esempio classeStack
.
Esercizio: implementare le liste in C++. Provare a scrivere una funzioneList<List
> powerset()
che genera la lista di tutte le sottoliste (interpretare una lista come un insieme e assumere gli elementi tutti diversi.
Provare a scrivere la stessa funzione in Haskell (di tipo [a]->[ [a] ]).
Errata Corrige: overloading non estende alle classe derivate in C++!!!
Dalla pagina di FAQ su C++ di Soustrup: Why doesn't overloading work for derived classes?
OOP 4: Precisazione sull'overloading nelle classi derivate in C++.Giovedì 29 novembre 2019 - Lezione 10
Standard Template Library: uso di alcune strutture dati nel progetto scacchi.
Uso di iteratori. Metodi per determinare lo scacco al Re e lo scacco matto nel progetto Scacchi.
OOP 5: Copy constructor e distruttori.Giovedì 5 dicembre 2019 - Lezione 11
Definizione di iteratori come inner class della struttura dati su cui iterano. Esempio:Stack
.
Esercizio: definire l'iteratore costante per gliStack
.
Esercizio (facoltativo): definire gli alberi in C++ e alcuni iteratori su di essi (visite).
FP 5: Definizione di tipi induttivi in Haskell. Esempi: booleani, naturali, liste e alberi.Giovedì 12 dicembre 2019 - Lezione 12
Definizione di classi in Haskell.
Esercizio: definire una funzione Haskell di codifica dagli alberi n-ari in alberi binari (e la sua inversa).
FP 6: ClasseGiovedì 19 dicembre 2019 - Lezione 13Functor
.Maybe
,List
, eTree
come istanze diFunctor
.
Funtori applicativi.
La classeMonad
applicate al tipoMaybe
. Esempio: valutatore di espressioni.
Osservazioni sulla gestione di caratteristiche non-funzionali in Haskell. Esercizio: definire la classeApplicative
per le liste in modo chefmap2
siazipWith
,fmap3
siazipWith3
etc.
OOP 6: Eredità multipla in C++. Utilità e problemi. Soluzioni alternative: interfacce in Java.
Eccezioni: sollevamento, cattura, trattamento.
Alcune tipiche tecniche sul trattamento di Eccezioni: masking, reflecting.
Algoritmi e programmi: la rilevanza dello studio dei Linguaggi di Programmazione.Mercoledì 3 ottobre 2018 - Lezione 2
Esempio: funzione C che verifica se una lista è palindroma confrontandoL
conreverse(L)
: cosa può andare storto. OOP: Tipi di dato in C e tipi di dato astratti (à la ADA). Tipo di dato = struttura dati + operazioni.
Programmazione a Oggetti: slogan dei progettisti SmallTalk.
Metafora degli oggetti come automi con interfaccia. FP: Introduzione ai linguaggi funzionali.
Computazione come riduzione di espressioni. Assenza della memoria.
Definizioni e riduzioni. Confluenza e strategie di riduzione.
Cenni ai tipi e all'inferenza di tipo.
Breve storia della programmazione funzionale (I): il Lambda-cacolo.
OOP: Architettura generale dell'applicazione filo conduttore, gli Scacchi in C++Mercoledì 10 ottobre 2018 - Lezione 3
Introduzione al concetto di classe.
Classi e sottoclassi. Esempi:Scacchiera
,Pezzo
, e i pezzi veri e propri.
Definizioni di classe e metodi. Visibilità:public
eprivate
.
Metodi con lo stesso nome: overloading. Esempi:puoiMuovere(Casella, Casella, Scacchiera)
epuoiMuovere(Casella, Scacchiera)
. FP: Prime funzioni in Haskell e loro tipi: identità, proiezione primo elemento.
Tipi polimorfi. Funzioni non terminanti e strategia di riduzione.
Il tipo di dato principe in Haskell: le liste. Notazioni. Funzionelength
e pattern matching. Codici Haskell Lezione 2
OOP: Sottoclassi ed ereditarietà: la classeMercoledì 17 ottobre 2018 - Lezione 4Cavallo
.
Specializzazione dei metodi: overriding.
Il problema dell'invocazione dei metodi in presenza di overriding: dynamic method lookup evirtual
.
Pro e cons di static vs dynamic binding: flessibilità vs efficienza. FP: Ancora funzioni su liste:head
etail
: pattern non esaustivi ed eccezioni.
Funzioniappendi
erovescia
. Clausolawhere
.
Funzione palindroma. Type classes: polimorfismo limitato.
Esempio: tipo(Eq a)
dei tipi che ammettono uguaglianza.
Definizione ricorsiva di liste infinite. Primi cenni alla laziness. Codici Haskell Lezione 3
OOP Ripasso sul virtual. I due metodiMercoledì 24 ottobre 2018 - Lezione 5puoiMuovere()
. Lookup del metodo riparte sempre dal primo oggetto ricevente.
Il puntatore all'oggetto stessothis
.
Approfondimenti sulla relazione di sottotipaggio e assegnazioni ben tipate. Prudenza del type-checker.
Creazione di oggetti: costruttori: necessità e invocazione (con lanew
e quando allocati sullo Stack).
Costruttore di Default. Costruttoriprotected
: classi da cui non si vogliono creare oggetti.
Invocazione del costruttore della super-classe, problemi col costruttore di default. FP: Alcune piccole utilità: equazioni guardate, pattern, funzioni anonime (lambda espressioni).
Funzioni di ordine superioremap
ereduce
(ofoldr
).
Definizione dimap
usandoreduce
. Applicazione al calcolo del prodotto scalare. Codici Haskell Lezione 4
OOP Alcune classi dell'applicazione Scacchi:Mercoledì 31 ottobre 2018 - Lezione 6Scacchiera
eCasella
.
Tipica tecnica di programmazione: delegation. Esempio: metodovoid print()
.
Metodi virtual puri. Esempio: il metodoprint()
nella classePezzo
. Campi pubblici/privati e un diffuso malcostume: metodi setters e getters.
Un po' di zucchero sintattico: ridefinizione degli operatori predefiniti dal linguaggio.
FP: Zucchero sintattico per matematici: List comprehension.
Ridefinizione di funzioni su liste usandomap
,foldr
efoldl
.
foldr
come generalizzazioni delle ricorsioni che calcolano il risultato al "ritorno" delle chiamate ricorsive.
foldl
come generalizzazioni delle ricorsioni che calcolano il risultato all'"andata" delle chiamate ricorsive.
Esempio di famoso algoritmo in Haskell:quicksort
. Limiti della versione Haskell. Codici Haskell Lezione 5
Discussione riassuntiva dei concetti introdotti nelle Lezioni 1-5.Mercoledì 7 novembre 2018 - Lezione 7
Virtù composizionali della programmazione a oggetti e riuso del codice.
L'impatto di: metodi virtuali, regole di visibilità, sottotipaggio, ereditarietà.
Impatto sul riuso del codice.
Virtù composizionali della programmazione funzionale.
L'impatto di: tipi polimorfi, funzioni di ordine superiore, funzioni de-curryficate, astrazione.
Un esempio: moltiplicazione di matrici in Haskell. (vedi codici lezione precedente).
Nella settimana degli esoneri, discussione ed esercizi in Haskell e in C++.Mercoledì 14 novembre 2018 - Lezione 8
OOP Puntatori e references: confronto ed esempi.Mercoledì 21 novembre 2018 - Lezione 9
Passaggio per valore di oggetti: copy constructor.
Distruzione di oggetti: distruttori edelete
. Lifetime degli oggetti.
FP: Introduzione alla valutazione lazy.
Alcuni esempi notevoli: streams dei naturali, potenze, numeri di fibonacci
OOP Polimorfismo generico in C++: Templates.Mercoledì 28 novembre 2018 - Lezione 10
Esempio di definizione di un template: gli Stack in C++.
Introduzione all'uso di eccezioni: sollevamento, cattura, trattamento.
FP: Alcuni interessanti problemi di generazione di streams: Hamming numbers.
Uno scritto sulla generazione di sequenze infinite: Computing Integer Sequences
OOP Introduzione all'uso di iteratori su strutture dati.Mercoledì 5 dicembre 2018 - Lezione 11
Stack con iteratori.
Introduzione alle STL (= Standard Template Library). Applicazioni al progetto scacchi: metodoallMoves
.
FP: La principessa delle sequenze infinite: generazione dello stream dei numeri primi in Haskell.
Uno scritto sulla generazione dei numeri primi: Three Euler's Sieve and a Fast Prime Generator
OOP Applicazione di concetti visti: metodiMercoledì 12 dicembre 2018 - Lezione 12move
escaccoMatto
.
FP: -.
OOP: Revisione delle principali classi della Standard Template Library:Mercoledì 19 dicembre 2018 Lezione annullata (Festa di Matematica). Mercoledì 9 gennaio 2019 - Lezione 13vecotr
,deque
,arrayList
.
Il caso della classestack
.
Cenni agli Algorithms. Il problema della modifica di una struttura dati durante una scansione di un iteratore:const_iterator
. FP: Definizione di tipi in Haskell.type
,data
,Maybe
.
Alcuni esempi di tipi induttivi: naturali, liste, alberi.
Classi in Haskell. Classi pre-definite (Mercoledì 16 gennaio 2019 - Lezione 14Eq
,Ord
,Num
, etc.).
Definizioni di classi e istanze.
Confronti con C++ (ereditarietà multipla) e Java (interfacce).
OOP ?.
FP: Derivazioni di programmi da specifici. Esempio: minimo intero libero in una lista.
Breve introduzione al Lambda-calcolo: sintassi, beta-regola.Mercoledì 17 gennaio 2018 - Lezione 13
Alcuni esempi: identità, proiettori, termini non terminanti, numerali di Church, operatore di punto fisso.
A taste of Haskell: sintassi, tipi polimorfi, riduzione.
Confluenza e strategia di valutazione call by name.
Introduzione alle liste e alla ricorsione su liste.
Laziness: generazione (lazy) di tutti i numeri di fibonacci in una riga.
Ordine superiore: permutatore di argomenti di una funzione (binaria).
Ancora esempi di programmazione su liste: prodotto scalare tra vettori (come liste).
Esempio notevole di ordine superiore: moltiplicazione tra matrici (come liste di liste).
Esempio notevole della concisione dei programmi Haskell:qSort
.
Ancora sui tipi polimorfi: tipo principale e termini tipabili in Haskell:x x where x = \y -> y
.
Breve presentazione del corso.Giovedì 13 ottobre 2016 - Lezione 2
Introduzione agli oggetti.
Presentazione dell'applicazione che verrà sviluppata durante le lezioni: verifica di una partita a scacchi.
Scomposizione di un problema con la metodologia a oggetti: individuazioni dei tipi di dato fondamentali.
Interfaccia di un oggetto.
Definizioni di classi.Giovedì 20 ottobre 2016 - Lezione 3
Campi e metodi [4].
Regole di visibilità: public e private [5].
ClasseColore
.
Costruttori [6].
Oggetti sull'heap e sullo stack [13].
Ridefinizione di operatori definiti dal linguaggio.
Overloading.
Ereditarietà e sottotipaggio.Giovedì 27 ottobre 2016 - Lezione 4
Le classiRe
,Pedone
, etc.
Metodivirtual
: dynamic lookup.
Esempio di metodo virtual:Giovedì 3 novembre 2016 - Lezione 5puoiMuovere
.
Invocazione dei metodi della superclasse.
Invocazione dei costruttori della superclasse.
Visibilitàprotected
.
Esercizio sul dynamic lookup.
Ancora su ereditarietà e sottotipaggio: type safety. Prudenza del type-checker.Giovedì 10 novembre 2016 - Lezione 6
Classi astratte. Metodi puramente virtual.
Introduzione ai Template. Riuso del codice.
Esempio: la classeStack
.
Referenze e puntatori: vantaggi e svantaggi.Giovedì 17 novembre 2016 - Sospensione per Esoneri Giovedì 24 novembre 2016 - Lezione 7
Copy Constructor.
Esempio di template: array con check sui bounds. Ridefinizione di operatori.
Iteratori.Giovedì 1 dicembre 2016 - Lezione 8
Analisi dell'architettura generale del progetto Scacchi.Giovedì 8 dicembre 2016 - Festa dell'Immacolata Concezione Giovedì 15 dicembre 2016 - Lezione 9
Analisi di alcuni metodi della classe partita: uso di iteratori e STL per scacco e scacco matto.
Implementazioni di iteratori in C++.Giovedì 12 gennaio 2017 - Lezione 10
Nested class.
Esempio: Stack con iteratori.
Chiarimenti su progetto ed esame.
Eccezioni in C++. Motivazioni, sintasssi e uso delle eccezioni.
Presentazione del corso.Giovedì 9 ottobre 2014 - Lezione 2
Breve discussioni sulle famiglie di linguaggi di Programmazione.
Obiettivi di un linguaggio di programmazione: fornire un insieme di astrazioni
(e meccanismi per creare astrazioni) al programmatore.
Linguaggi funzionali e Procedurali.
La centralità dei dati: tipo di dato = struttura dati + operazioni [1].
Definizione di classi.Giovedì 16 ottobre 2014 - Lezione 3
Campi e metodi [4].
Regole di visibilità: public e private [5].
Interfaccia di un oggetto.
Overloading di metodi.
Costruttori [6].Giovedì 23 ottobre 2014 - Lezione 4
Oggetti sull'heap e sullo stack [13].
Ereditarietà [14].
Metodi virtual: polimorfismo (o Dynamic Method Lookup) [15].Giovedì 30 ottobre 2014 - Lezione 5
Ancora sui costruttori: chiamate ai costruttori della superclasse [14].
Distruttori [6].
Esempio: struttura dati Stack in C++ [6].
Passaggi di parametri: reference [11].Giovedì 6 novembre 2014 - Lezione *
Passaggio di oggetti per valore: copy constructor [4].
Conseguenze sul polimorfismo.
Metodi statici [10] e costanti [8].
Lezione sospesa causa allerta meteo.Giovedì 13 novembre 2014
Sospensione per prove intermedie.Giovedì 20 novembre 2014 - Lezione 6
Esempio di progettazione di applicazione a oggetti: Scacchi.Giovedì 27 novembre 2014 - Lezione 7
Decomposizione del problema seguendo una metodologia a oggetti.
Utilità di avere supertipi comuni: la classe Pezzo.
Delegazione di compiti ad altri oggetti.
Comunicazione tra oggetti. Passaggi di riferimenti tra oggetti.
Presentazione secondo homework.Giovedì 4 dicembre 2014 - Lezione 8
Introduzione all'uso di eccezioni [7], vol. 2.
Introduzione ai Template [16].Giovedì 11 dicembre 2014 - Lezione 9
Cenni all'eredità multipla.
Esercitazione: progettazione e implementazione degli insiemi.Giovedì 18 dicembre 2014 - Lezione *
Utilizzo di una template Set.
Lezione annullata causa Festa di Matematica.Giovedì 15 gennaio 2015 - Lezione 12
Lezione Annullata.-- IvanoSalvo - 3 Oct 2018
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |