Dove non diversamente specificato, le lezioni sono da 2 ore.
Totale:
- 24 lezioni (48 ore) per il modulo di teoria da 6 CFU.
- 2*12=24 lezioni (2*24 = 48 ore) per il modulo di Laboratorio da 3 CFU, sdoppiato in due canali (A[A-L] e B[M-Z])
23 settembre 2025 (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
- Non calcolabilità di tutti i problemi
24 settembre 2025 (Lezione di teoria n° 2)
- Notazioni asintotiche
- Complessità di algoritmi
- Complessità di programmi
- Tipi di dato definiti dall’utente
- Variabili e Oggetti in memoria
- Tipi di dato definiti ricorsivamente
25 settembre 2025 (Lezioni di laboratorio n° A.1 e B.1)
- Tipi definiti dall’utente
- Sistema dei tipi: type checking statico tramite linter
- Liste di tipi definiti dall’utente
- Implementazione di Stack in Python (usando dataclass)
- Esercizi
30 settembre 2025 (Lezione di teoria n° 3)
- Introduzione alle strutture dati elementari e ai dizionari
- Strutture dati elementari: Code con loro implementazione in Python (usando dataclass)
- Alberi e loro rappresentazione in memoria
- Alberi binari di ricerca e loro implementazione in Python (prima parte)
1° ottobre 2025 (Lezione di teoria n° 4)
- Alberi binari di ricerca e loro implementazione in Python (seconda parte)
- Heap: introduzione e definizioni
2 ottobre 2025 (Lezioni di laboratorio n° A.2 e B.2)
- Strutture dati: introduzione alle liste
- Garbage collector
- Implementazione di liste ordinate in Python (prima parte)
7 ottobre 2025 (Lezione di teoria n° 5)
- Heap per implementare code con priorità
- Heapsort (I parte)
8 ottobre 2025 (Lezione di teoria n° 6)
- Heapsort (II parte)
- Esercizi su Heap
- Introduzione alla programmazione orientata ad oggetti
- Incapsulamento
- Introduzione a campi e metodi di istanza e campi di classe
9 ottobre 2025 (Lezioni di laboratorio n° A.3 e B.3)
- Implementazione di liste ordinate in Python (seconda parte) con esercizi
- Dal dataclass alla definizione di classi in stile object oriented
14 ottobre 2025 (Lezione di teoria n° 7 da 1 ora)
- Costruttori
- Campi di istanza e campi di classe
- Metodi di istanza
15 ottobre 2025 (Lezione di teoria n° 8 da 3 ore)
- Metodi di classe e metodi statici
- 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
16 ottobre 2025 (Lezioni di laboratorio n° A.4 e B.4)
- Implementazione di Pile e Code in stile object oriented (OOP)
- Implementazione di alberi binari di ricerca in Python in OOP (prima parte)
17 ottobre 2025 (Lezioni di laboratorio n° A.5 e B.5)
- Implementazione di alberi binari di ricerca in Python in OOP (seconda parte)
- Verifica sperimentale altezza media alberi binari di ricerca
- Cast nel sistema dei tipi di Python
21 ottobre 2025 (Lezione di teoria n° 9)
- 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
- I metodi di classe in Python e il parametro cls
- Final per campi di istanza
- final per metodi di istanza e per classi
- Possibili relazioni tra classi nella programmazione a oggetti
- Erediterietà singola e mulipla
- Introduzione al Method Reolution Order
22 ottobre 2025 (Lezione di teoria n° 10)
- Method Resolution Order (o Linearizzazione)
- Strctural subtyping: Protocolli
- Eccezioni in Python: gerarchia, sollevare e catturare eccezioni
23 ottobre 2025 (Lezioni di laboratorio n° A.6 e B.6)
- Protocolli Iterarable e Itarator e loro applicazione a liste di interi definite come nuovi tipi
- Esercizi di programmazione orientata agli oggetti in Python
24 ottobre 2025 (Lezioni di laboratorio n° A.7 e B.7)
- Esercizi di programmazione orientata agli oggetti in Python
4 novembre 2025 (Lezione di teoria n° 11)
- Precisazione sul metodo __eq__
- List comprehension
- Generatori
- Introduzione ai Generics
- Implementazione di code con tipi generici
5 novembre 2025 (Lezione di teoria n° 12)
- 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
6 novembre 2025 (Lezioni di laboratorio n° A.8 e B.8)
- Esercizi su programmazione a oggetti, ereditarietà e classi astratte
11 novembre 2025 (Lezione di teoria n° 13)
- Esercizi in preparazione all’esonero
- Introduzione alle tabelle Hash: tabelle a indirizzamento diretto
12 novembre 2025 (Lezione di teoria n° 14)
- Tabelle Hash: Funzioni di hashing e collisioni
- Hashing esterno con liste di trabocco
- Hashing interno: introduzione