Corso di Programmazione e Algoritmi 2, modulo di teoria
A.A. 2026/2027
Diario delle lezioni
- Dove non diversamente specificato, le lezioni sono da 2 ore.
Totale: 24 lezioni da 2 ore (totale 48 ore) per il modulo di teoria da 6 CFU.
23 settembre 2026 (Lezione di teoria n° 1)
- Presentazione del corso e delle modalità d’esame
- Richiami di programmazione strutturata
- Modelli di calcolo: Macchina di Turing e Random Access Machine
24 settembre 2026 (Lezione di teoria n° 2)
- Non calcolabilità di tutti i problemi
- Notazioni asintotiche
- Complessità di algoritmi
- Tipi di dato definiti dall’utente
- Variabili e Oggetti in memoria
- Tipi di dato definiti ricorsivamente
30 settembre 2026 (Lezione di teoria n° 3)
- Complessità di problemi
- Introduzione alle strutture dati elementari e ai dizionari
- Alberi e loro rappresentazione in memoria
1° ottobre 2026 (Lezione di teoria n° 4)
- Alberi binari di ricerca e loro implementazione in Python
7 ottobre 2026 (Lezione di teoria n° 5)
- Alberi binari di ricerca e loro implementazione in Python (II parte)
8 ottobre 2026 (Lezione di teoria n° 6)
- Alberi binari di ricerca e loro implementazione in Python (III parte)
- Heap: introduzione e definizioni
14 ottobre 2026 (Lezione di teoria n° 7)
- Heap per implementare code con priorità
- Esercizio su Heap
15 ottobre 2026 (Lezione di teoria n° 8)
- Heapsort
- Esercizi su Heap
21 ottobre 2026 (Lezione di teoria n° 9)
- Introduzione alla programmazione orientata ad oggetti
- Incapsulamento
- Introduzione a campi e metodi di istanza e campi di classe
- Costruttori
- Campi di istanza e campi di classe
- Metodi di istanza
- Metodi di classe e metodi statici
22 ottobre 2026 (Lezione di teoria n° 10)
- Information hiding in Python
- Metodi di accesso e di modifica.
- Proprietà (alternativa a utilizzo metodi di accesso e modifica)
- Sistema di dichiarazione di tipi
- Funzioni come oggetti: passate come parametro, ritornate da altre funzioni
- Final per campi di istanza
- Esercizio su numeri razionali (class Razionale)
29 ottobre 2026 (Lezione di teoria n° 11)
- Ereditarietà
- Costruttori di classi figlie e parola chiave super
- Modificatore di accesso per protezione a livello di classe (__) e di gerarchia di classi (_)
- Il polimorfismo: l’overriding
- Gerarchia delle classi: la classe object
- final per metodi di istanza e per classi
- Possibili relazioni tra classi nella programmazione a oggetti
2 novembre 2026 (Lezione di teoria n° 12)
- Ereditarietà singola e multipla
- Method Resolution Order (o Linearizzazione)
- Strctural subtyping: Protocolli
- Itaratori
4 novembre 2026 (Lezione di teoria n° 13)
- Eccezioni in Python: gerarchia, sollevare e catturare eccezioni
- Il ruolo dell’eccezione StopIteration negli iteratori.
- Precisazioni sul metodo __eq__
- Generatori
5 novembre 2026 (Lezione di teoria n° 14)
- Generics
- Implementazione di code con tipi generici
- Calcolo dell’altezza di un albero binario di ricerca in modo iterativo (sfruttando una coda di nodi)
- Classi astratte e metodi astratti
- Espressioni numeriche implementate con ereditarietà e classi astratte
11 novembre 2026 (Lezione di teoria n° 15)
- Esercizi in preparazione all’esonero
- Introduzione alle tabelle Hash: tabelle a indirizzamento diretto
- Tabelle Hash: Funzioni di hashing e collisioni