L’insegnamento si propone di estendere le capacità di programmazione dello studente, mettendolo in grado di affrontare e risolvere problemi, anche complessi, del mondo reale attraverso la realizzazione di applicazioni software avanzate. Nello specifico, l’insegnamento illustra il paradigma della programmazione orientata agli oggetti analizzandone i vantaggi nell’ambito della produzione del software ed applicandolo, in termini concreti, al linguaggio Python. Integra poi le competenze acquisite in insegnamenti precedenti, in particolare Informatica e Basi di Dati, con l’obiettivo di fornire gli strumenti per creare applicazioni in grado di presentare interfacce utente interattive, di accedere a basi di dati relazionali e di visualizzare i risultati dell’elaborazione. Infine, approfondisce aspetti algoritmici, introducendo il concetto di programmazione ricorsiva, analizzando le strutture dati più comuni (in particolare i grafi), considerando il tema dell'efficienza, e studiando alcuni algoritmi di ricerca, ottimizzazione e simulazione con applicazioni concrete nell’ambito della logistica, della produzione e dell’organizzazione d’impresa.
The course aims to extend the student’s programming skills, enabling them to tackle and solve real-world problems, including complex ones, through the development of advanced software applications. Specifically, the course presents the object-oriented programming paradigm, analyzing its advantages in software production and applying it to concrete scenarios using the Python language. It then integrates the skills acquired in previous courses, particularly Informatica and Basi di Dati, with the goal of providing the tools to create applications capable of presenting interactive user interfaces, accessing relational databases, and displaying processing results. Finally, it delves into algorithmic aspects by introducing the concept of recursive programming, analyzing common data structures (especially graphs), tackling efficiency, and studying some search, optimization, and simulation algorithms with practical applications in logistics, production, and business organization.
Conoscenza e capacità di comprensione: Concetti fondamentali della programmazione ad oggetti (classi, oggetti, attributi, metodi, ereditarietà, polimorfismo) e strutture dati complesse (liste, alberi, grafi, code) in linguaggio in Python; gestione del codice (e sue versioni) e la collaborazione nella programmazione; strumenti per la realizzazione di interfacce utente ed accesso a basi di dati relazionali da applicazioni Python; principali pattern di programmazione; ricorsione; problemi di ricerca e di ottimizzazione (tecniche divide et impera).
Capacità di applicare conoscenza e comprensione: padronanza della programmazione ad oggetti in Python e l’uso di piattaforme per la gestione collaborativa del codice; capacità di analizzare i requisiti di un problema software di tipo gestionale di complessità avanzata allo scopo di definire un idoneo progetto orientato agli oggetti; abilità nel realizzare applicazioni dotate di interfacce utente interattive in Python, con accesso a basi di dati relazionali; capacità di affrontare problemi di ricerca, ottimizzazione e simulazione attraverso la definizione e l’implementazione di una soluzione algoritmica.
Conoscenza e capacità di comprensione: Concetti fondamentali della programmazione ad oggetti (classi, oggetti, attributi, metodi, ereditarietà, polimorfismo) e strutture dati complesse (liste, alberi, grafi, code) in linguaggio in Python; gestione del codice (e sue versioni) e la collaborazione nella programmazione; strumenti per la realizzazione di interfacce utente ed accesso a basi di dati relazionali da applicazioni Python; principali pattern di programmazione; ricorsione; problemi di ricerca e di ottimizzazione (tecniche divide et impera). Capacità di applicare conoscenza e comprensione: padronanza della programmazione ad oggetti in Python e l’uso di piattaforme per la gestione collaborativa del codice; capacità di analizzare i requisiti di un problema software di tipo gestionale di complessità avanzata allo scopo di definire un idoneo progetto orientato agli oggetti; abilità nel realizzare applicazioni dotate di interfacce utente interattive in Python, con accesso a basi di dati relazionali; capacità di affrontare problemi di ricerca, ottimizzazione e simulazione attraverso la definizione e l’implementazione di una soluzione algoritmica.
Concetti base della programmazione (tipi e strutture dei dati, istruzioni di controllo, sotto-programmi e chiamate di sotto-programmi). Capacità di risolvere problemi semplici mediante la definizione di soluzioni algoritmiche e la scrittura di programmi software in linguaggio Python. Conoscenza delle basi di dati relazionali ed in particolare della loro interrogazione mediante istruzioni SQL.
Concetti base della programmazione (tipi e strutture dei dati, istruzioni di controllo, sotto-programmi e chiamate di sotto-programmi). Capacità di risolvere problemi semplici mediante la definizione di soluzioni algoritmiche e la scrittura di programmi software in linguaggio Python. Conoscenza delle basi di dati relazionali ed in particolare della loro interrogazione mediante istruzioni SQL.
4 CFU - Paradigma dell’orientamento ad oggetti applicato alla programmazione. Aspetti avanzati della programmazione in Python: classi e oggetti, collection, accesso a basi di dati, principali pattern di programmazione (factory, MVC ed interfacce utente, DAO ed accesso a basi di dati relazionali). Piattaforme per la gestione del codice e la programmazione collaborativa. 2 CFU - Struttura dati avanzate: grafi, alberi, code e relative librerie in Python. 2 CFU - Algoritmi: ricorsione, ottimizzazione, procedure di visita e di ricerca nei grafi, cammini minimi, simulazione. 2 CFU - Esercizi di problem solving: problemi di ricerca e di ottimizzazione; tecniche di ricerca di tipo esaustivo (ricorsivo); applicazioni a casi di interesse gestionale (simulazione di eventi, problemi di scheduling, di ottimizzazione delle risorse, di ricerca trasporti, ecc.).
4 CFU - Paradigma dell’orientamento ad oggetti applicato alla programmazione. Aspetti avanzati della programmazione in Python: classi e oggetti, lambda, collection, accesso a basi di dati, principali pattern di programmazione (factory, MVC ed interfacce utente, DAO ed accesso a basi di dati relazionali). Piattaforme per la gestione del codice e la programmazione collaborativa. 2 CFU - Struttura dati avanzate: grafi, alberi, code e relative librerie in Python.
2 CFU - Algoritmi: ricorsione, ottimizzazione, procedure di visita e di ricerca nei grafi, cammini minimi, simulazione. 2 CFU - Esercizi di problem solving: problemi di ricerca e di ottimizzazione; tecniche di ricerca di tipo esaustivo (ricorsivo); applicazioni a casi di interesse gestionale (simulazione di eventi, problemi di scheduling, di ottimizzazione delle risorse, di ricerca trasporti, ecc.).
Dall’anno accademico 2025/26, l’insegnamento Programmazione Avanzata sostituisce gli insegnamenti Programmazione a Oggetti (svolto utilizzando come riferimento il linguaggio Java) e Tecniche di Programmazione (svolto in linguaggio Python). L’insegnamento svilupperà i fondamenti della programmazione in linguaggio Python e gli aspetti algoritmici trattati nell’insegnamento di Informatica l’anno precedente, introducendo il paradigma dell’orientamento ad oggetti ed approfondendo aspetti avanzati della programmazione connessi, tra gli altri, all’uso di strutture dati complesse, all’interrogazione di basi di dati ed la realizzazione di applicazioni dotate di interfacce utente interattive. Gli insegnamenti Programmazione a Oggetti e Tecniche di Programmazione saranno disattivati a partire dall’anno accademico 2026/27.
Dall’anno accademico 2025/26, l’insegnamento Programmazione Avanzata sostituisce gli insegnamenti Programmazione a Oggetti (svolto utilizzando come riferimento il linguaggio Java) e Tecniche di Programmazione (svolto in linguaggio Python). L’insegnamento svilupperà i fondamenti della programmazione in linguaggio Python e gli aspetti algoritmi trattati nell’insegnamento di Informatica l’anno precedente, introducendo il paradigma dell’orientamento ad oggetti ed approfondendo aspetti avanzati della programmazione connessi, tra gli altri, all’uso di strutture dati complesse, all’interrogazione di basi di dati ed la realizzazione di applicazioni dotate di interfacce utente interattive. Gli insegnamenti Programmazione a Oggetti e Tecniche di Programmazione saranno disattivati a partire dall’anno accademico 2026/27.
L’insegnamento prevede 60 ore di lezione in aula, 20 ore di esercitazione in aula e 20 ore di esercitazione in laboratorio (per squadra). Le ore di lezione ed esercitazione in aula non sono formalmente distinte, in quanto gli aspetti teorici e la loro applicazione pratica sono affrontati in maniera integrata. Le esercitazioni in aula comprendono la progettazione e realizzazione di applicazioni software. Gli studenti sono invitati a seguire le lezioni con il proprio PC portatile e svolgere le attività in parallelo al docente. Nelle esercitazioni in laboratorio sono assegnati esercizi da svolgere al calcolatore (per i quali viene successivamente pubblicata, e talvolta presentata nelle ore di esercitazione in aula, la soluzione). Il corretto svolgimento degli esercizi, completati eventualmente anche al di fuori del laboratorio, può assegnare ulteriori 2 punti che concorrono a determinare il voto finale (solo in caso di esame sufficiente). Le esercitazioni in aula ed in laboratorio sono mirate sia a supportare la comprensione dei concetti teorici esposti, sia a favorire l’analisi e la risoluzione di problemi applicativi realistici attraverso approcci algoritmici e l’utilizzo della programmazione in linguaggio Python.
L’insegnamento prevede 60 ore di lezione in aula, 20 ore di esercitazione in aula e 20 ore di esercitazione in laboratorio (per squadra). Le ore lezione ed esercitazione in aula non sono formalmente distinte, in quanto gli aspetti teorici e la loro applicazione pratica sono affrontati in maniera integrata. Le esercitazioni in aula comprendono la progettazione e realizzazione di applicazioni software. Gli studenti sono invitati a seguire le lezioni con il proprio PC portatile e svolgere le attività in parallelo al docente. Nelle esercitazioni in laboratorio, allocate presso il LEP o presso i laboratori informatici di base, sono assegnati esercizi da svolgere calcolatore (per i quali viene successivamente pubblicata, e presentata nelle ore di esercitazione in aula, la soluzione). Il corretto svolgimento degli esercizi, completati eventualmente anche al di fuori del laboratorio, può assegnare ulteriori 2 punti che concorrono a determinare il voto finale (solo in caso di esame sufficiente). Le esercitazioni in aula ed in laboratorio sono mirate sia a supportare la comprensione dei concetti teorici esposti, sia a favorire l’analisi e la risoluzione di problemi applicativi realistici attraverso approcci algoritmici e l’utilizzo della programmazione in linguaggio Python.
Lucidi e dispense forniti dai docenti. Video-registrazioni di tutte le lezioni ed esercitazioni al termine delle stesse. Testi e soluzioni di tutti gli esercizi proposti in aula ed in laboratorio.
In aggiunta al suddetto materiale, reso disponibile in formato elettronico tramite il Portale della Didattica, potrà essere utile consultare i seguenti testi per approfondire determinati aspetti dell'insegnamento:
- Concetti di informatica e fondamenti di Python, Cay S. Horstmann, Rance D. Necaise, Apogeo;
- Programmazione in Python, Kenneth A. Lambert, Apogeo;
- Algoritmi e strutture dati: Guida pragmatica con esempi in Python, Jay Wengrow, Apogeo;
- Data Science con Python, Dmitry Zinoviev, Apogeo.
Lucidi e dispense forniti dai docenti. Video-registrazioni di tutte le lezioni ed esercitazioni al termine delle stesse. Testi e soluzioni di tutti gli esercizi proposti in aula ed in laboratorio. In aggiunta al suddetto materiale, reso disponibile in formato elettronico tramite il Portale della Didattica, potrà essere utile consultare i seguenti testi per approfondire determinati aspetti dell'insegnamento: Concetti di informatica e fondamenti di Python, Cay S. Horstmann, Rance D. Necaise, Apogeo; Programmazione in Python, Kenneth A. Lambert, Apogeo; Algoritmi e strutture dati: Guida pragmatica con esempi in Python, Jay Wengrow, Apogeo; Data Science con Python, Dmitry Zinoviev, Apogeo.
Slides; Esercizi; Esercizi risolti; Esercitazioni di laboratorio; Esercitazioni di laboratorio risolte; Video lezioni dell’anno corrente;
Lecture slides; Exercises; Exercise with solutions ; Lab exercises; Lab exercises with solutions; Video lectures (current year);
Modalità di esame: Test informatizzato in laboratorio; Prova pratica di laboratorio;
...
L'esame, della durata indicativa di 2 ore, si svolge al calcolatore in laboratorio e consiste nella scrittura di un programma in linguaggio Python, diviso in più parti, in grado di risolvere un problema gestionale soddisfacendo i requisiti stabiliti, a partire da un progetto embrionale fornito dal docente. Il problema assegnato avrà una complessità simile a quello delle ultime esercitazioni in laboratorio. La risoluzione richiederà di mettere in pratica i concetti, le tecniche e le metodologie trattate durante l’insegnamento. In particolare, analizzando quanto presente in una base dati fornita, l’obiettivo sarà quello di dotare il programma, organizzato seguendo il paradigma dell’orientamento ad oggetti, di opportune strutture dati (collection e grafi, principalmente) e di implementare le funzionalità necessarie per interrogare la base dati stessa, effettuare delle elaborazioni (applicando tecniche di programmazione ricorsiva, simulazione ed algoritmi di ricerca ed ottimizzazione) e visualizzarne i risultati. Il voto, espresso su una scala da 0 a 30, è assegnato in base alla bontà del programma consegnato misurata in termini di appropriatezza e correttamente di quanto implementato. Durante l’esame sarà possibile utilizzare tutto il materiale reso disponibile o sviluppato nell’insegnamento come pure libri di testo ed appunti in formato cartaceo o digitale. La lode verrà assegnata al raggiungimento di una valutazione pari o superiore 31.50 (considerando i 30 punti ottenibili per l'esame ed i 2 punti conseguibili per le esercitazioni di laboratorio, che saranno essere verificate assieme al programma d'esame).
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
L'esame, della durata indicativa di 2 ore, si svolge al calcolatore in laboratorio e consiste nella scrittura di un programma in linguaggio Python in grado di risolvere un problema gestionale soddisfacendo i requisiti stabiliti, eventualmente a partire da un progetto embrionale fornito dal docente. Il problema assegnato avrà una complessità simile a quello delle ultime esercitazioni in laboratorio. La risoluzione richiederà di mettere in pratica i concetti, le tecniche e le metodologie trattate durante l’insegnamento. In particolare, analizzando quanto presente in una base dati fornita, l’obiettivo sarà quello di dotare il programma, organizzato seguendo il paradigma dell’orientamento ad oggetti, di opportune strutture dati (collection e grafi, principalmente) e di implementare le funzionalità necessarie per interrogare la base dati stessa, effettuare delle elaborazioni (applicando tecniche di programmazione ricorsiva, simulazione ed algoritmi di ricerca ed ottimizzazione) e visualizzarne i risultati. Il voto, in trentesimi, è assegnato in base alla bontà del programma consegnato misurata in termini di appropriatezza e correttamente di quanto implementato. Durante l’esame sarà possibile utilizzare tutto il materiale reso disponibile o sviluppato nell’insegnamento come pure libri di testo ed appunti in formato cartaceo o digitale. La lode verrà assegnata al raggiungimento di una valutazione pari o superiore 31.50 (considerando i 30 punti ottenibili per l'esame ed i 2 punti conseguibili per le esercitazioni di laboratorio).
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.