Current Courses

Article Index

Sito ufficiale del corso di Tecniche di programmazione (codice 03FYZPL) per studenti del corso di laurea in Ingegneria Gestionale (Classe L-8).

Link breve a questa pagina: http://bit.ly/tecn-progr

Avvisi

  • 2022-02-21: Benvenuti all'edizione 2021/2022 del corso! Nome in codice: "TdP-2021"

Informazioni essenziali

Titolo: Tecniche di Programmazione
Crediti: 10 CFU
Anno: Ingegneria Gestionale (L-8), terzo anno, secondo periodo didattico
Lingua: Italiano
Docente titolare: Fulvio Corno
Docenti collaboratori: Tatiana Tommasi, Alberto Monge Roffarello, Niccolò Cavagnero
Pagina ufficiale: Portale della Didattica
Repository GitHub: https://github.com/TdP-2022
Video Lezioni: Playlist YouTube
Gruppo Telegram: https://t.me/+YKSRgrLzZ_83MDA8

Orario delle lezioni

 GiornoOraLuogoTipoNote
Lunedì 08:30-10:00 Aula 1B Lezione/Esercitazione  
Lunedì 10:00-11:30 Aula 1B Lezione/Esercitazione  
Mercoledì 13:00-14:30 Aula 1P Lezione/Esercitazione  
Martedì 13:00-16:00 Aula 11I Laboratorio (squadra 1-2) dal 1 marzo 2022
Mercoledì 16:00-19:00 Aula 11I Laboratorio (squadra 2-1) dal 2 marzo 2022

Informazioni

Presentazione

Materiale di studio

  • Materiale fornito dai docenti
  • Documenti e link disponibili su Internet, segnalati di volta in volta

Siti web di riferimento

Testi principali

Testi ausiliari

 


Lezioni

Questa sezione conterrà il registro delle lezioni, con l'indicazione dell'argomento svolto in ciascuna di esse. Tutte le lezioni sono videoregistrate ed il video è visibile su YouTube e sul Portale della Didattica.

 

DataOreTipoArgomentoVideoMaterialeDocente
    EXTRA Tutorial per l'installazione del software (Windows) -- icons8 pdf 48 Fulvio Corno
    EXTRA Tutorial per l'installazione del software (Mac) -- icons8 pdf 48 Alberto Monge Roffarello
28/02/2022 08:30-10:00 Lezione 01 Introduzione al corso
Introduzione a JavaFX (parte 1)
icons8 play button 48icons8 play button 48 icons8 pdf 48 Fulvio Corno
28/02/2022 10:00-11:30 Lezione 02 Introduzione a JavaFX (parte 2) icons8 play button 48 icons8 pdf 48 icons8 github 48 Fulvio Corno
01/03/2022 13:00-16:00 Laboratorio Lab 0: JavaFX (Squadra 1: AA-LI) --  icons8 pdf 48 Tatiana Tommasi
02/03/2022 13:00-14:30 Lezione 03 Programmazione in JavaFX (esercizio "Indovina il Numero") icons8 play button 48 icons8 github 48 Alberto Monge Roffarello
02/03/2022 16:00-19:00 Laboratorio Lab 0: JavaFX (Squadra 2: LO-ZZ) -- icons8 pdf 48  Niccolò Cavagnero
07/03/2022 08:30-10:00 Lezione 04 Introduzione a Git e GitHub icons8 play button 48 icons8 pdf 48 Fulvio Corno
07/03/2022 10:00-11:30 Lezione 05 Oggetti e Collection (esercizio "Libretto Voti") icons8 play button 48 icons8 github 48 Fulvio Corno
08/03/2022 13:00-16:00 Laboratorio Lab 1: (Squadra 2: LO-ZZ) -- icons8 pdf 48icons8 github 48 Tatiana Tommasi
09/03/2022 13:00-14:30 Lezione 06 Hash, Map, Set  icons8 play button 48  icons8 pdf 48icons8 pdf 48 Alberto Monge Roffarello
09/03/2022 16:00-19:00 Laboratorio Lab 1: (Squadra 1: AA-LI) -- icons8 pdf 48 icons8 github 48 Niccolò Cavagnero
14/03/2022 08:30-10:00 Lezione 07 Pattern MVC. Applicazione all'esercizio "Libretto Voti". icons8 play button 48 icons8 pdf 48 Fulvio Corno
14/03/2022 10:00-11:30 Lezione 08 Oggetti e Collection (esercizio "Libretto Voti") - segue icons8 play button 48  icons8 github 48 Fulvio Corno
15/03/2022 13:00-16:00 Laboratorio Lab 2: (Squadra 1: AA-LI) --  icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
16/03/2022 13:00-14:30 Lezione 09 Pattern MVC (Esercizio "Indovina numero")  icons8 play button 48  icons8 github 48 Alberto Monge Roffarello
16/03/2022 16:00-19:00 Laboratorio Lab 2: (Squadra 2: LO-ZZ) -- icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
ATTENZIONE: Le lezioni del lunedì saranno in aula 1 anziché in aula 1B, fino alla fine del semestre
21/03/2022 08:30-10:00 Lezione 10 Accesso a Database e Libreria JDBC icons8 play button 48 icons8 pdf 48 Fulvio Corno
21/03/2022 10:00-11:30 Lezione 11 Pattern "DAO". Esercizio. icons8 play button 48 icons8 github 48 Fulvio Corno
22/03/2022 13:00-16:00 Laboratorio Lab 3: (Squadra 2: LO-ZZ) -- icons8 pdf 48 icons8 github 48 Tatiana Tommasi
23/03/2022 13:00-14:30 Lezione 12 Esercizio "Gestione Corsi"  icons8 play button 48 icons8 github 48  Alberto Monge Roffarello
23/03/2022 16:00-19:00 Laboratorio Lab 3: (Squadra 1: AA-LI) -- icons8 pdf 48 icons8 github 48 Niccolò Cavagnero
28/03/2022 08:30-10:00 Lezione 13 Esercizio "Gestione Corsi" (segue) icons8 play button 48  icons8 github 48 Alberto Monge Roffarello
28/03/2022 10:00-11:30 Lezione 14 Introduzione alla ricorsione. Anagrammi. icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
29/03/2022 13:00-16:00 Laboratorio Lab 4: (Squadra 1: AA-LI)    icons8 pdf 48icons8 github 48 Tatiana Tommasi
30/03/2022 13:00-14:30 Lezione 15 Esempi sulla ricorsione (Le N Regine) icons8 play button 48 icons8 github 48 Fulvio Corno
30/03/2022 16:00-19:00 Laboratorio Lab 4: (Squadra 2: LO-ZZ)   icons8 pdf 48 icons8 github 48 Niccolò Cavagnero
04/04/2022 08:30-10:00 Lezione 16 Esempi sulla ricorsione (Voti Nobel) icons8 play button 48  icons8 github 48 Alberto Monge Roffarello
04/04/2022 10:00-11:30 Lezione 17 Gestione delle date in Java e SQL icons8 play button 48 icons8 pdf 48 Fulvio Corno
05/04/2022 13:00-16:00 Laboratorio Lab 5: (Squadra 2: LO-ZZ)    icons8 pdf 48icons8 github 48 Tatiana Tommasi
06/04/2022 13:00-14:30 Lezione 18 Esempi sulla ricorsione (Quadrato Magico) icons8 play button 48 icons8 github 48 Fulvio Corno
06/04/2022 16:00-19:00 Laboratorio Lab 5: (Squadra 1: AA-LI)   icons8 pdf 48 icons8 github 48 Niccolò Cavagnero
11/04/2022 08:30-10:00 Lezione 19 Esempi sulla ricorsione (Ruzzle) icons8 play button 48  icons8 github 48  Alberto Monge Roffarello
11/04/2022 10:00-11:30 Lezione 20 Object-Relational Mapping. Esempio (Yelp) icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
12/04/2022 13:00-16:00 Laboratorio Lab 6: (Squadra 1: AA-LI)   icons8 pdf 48 icons8 github 48 Tatiana Tommasi
12/04/2022 13:00-14:30 Lezione 21 Connection Pooling. Creazione di tabelle in JavaFX icons8 play button 48 icons8 pdf 48 icons8 github 48 Fulvio Corno
13/04/2022 16:00-19:00 Laboratorio Lab 6: (Squadra 2: LO-ZZ)   icons8 pdf 48 icons8 github 48 Niccolò Cavagnero
      Vacanze di Pasqua + 25 Aprile      
26/04/2022 13:00-16:00 Laboratorio Lab 7: (Squadra 2: LO-ZZ)   icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
27/04/2022 13:00-14:30 Lezione 22 Introduzione ai grafi ed alla libreria JGraphT icons8 play button 48 icons8 pdf 48icons8 pdf 48icons8 github 48 Fulvio Corno
27/04/2022 16:00-19:00 Laboratorio Lab 7: (Squadra 1: AA-LI)   icons8 pdf 48icons8 github 48 Fulvio Corno
02/05/2022 08:30-10:00 Lezione 23 Costruzione di grafi (esempio MetroParis) icons8 play button 48 icons8 github 48 Fulvio Corno
02/05/2022 10:00-11:30 Lezione 24 Costruzione di grafi (esempio MetroParis). Visite nei grafi. Algoritmi di visita in jGraphT icons8 play button 48 icons8 pdf 48 Fulvio Corno
03/05/2022 13:00-16:00 Laboratorio Lab 8: (Squadra 1: AA-LI)   icons8 pdf 48 icons8 github 48 Tatiana Tommasi
04/05/2022 13:00-14:30 Lezione 25 Costruzione dell'albero di visita (esempio MetroParis) icons8 play button 48 icons8 github 48 Fulvio Corno
04/05/2022 16:00-19:00 Laboratorio Lab 8: (Squadra 2: LO-ZZ)   icons8 pdf 48 icons8 github 48 Niccolò Cavagnero
09/05/2022 08:30-10:00 Lezione 26 Costruzione dell'albero di visita (segue).
Code prioritarie e Simulatori ad Eventi Discreti.
icons8 play button 48icons8 play button 48 icons8 github 48icons8 pdf 48 Fulvio Corno
09/05/2022 10:00-11:30 Lezione 27 Simulatori ad Eventi Discreti (esercizio NoleggioAuto) icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
10/05/2022 13:00-16:00 Laboratorio Lab 9 (Squadra 2: LO-ZZ)   icons8 github 48 Fulvio Corno
11/05/2022 13:00-14:30 Lezione 28 Esercizio sui grafi (ArtsMia)  icons8 play button 48  icons8 github 48 Alberto Monge Roffarello
11/05/2022 16:00-19:00 Laboratorio Lab 9 (Squadra 1: AA-LI)   icons8 github 48 Alberto Monge Roffarello
16/05/2022 08:30-10:00 Lezione 29 Esercizio sui grafi (FlightDelays)  icons8 play button 48 icons8 github 48  Alberto Monge Roffarello
16/05/2022 10:00-11:30 Lezione 30 Esercizio sulle simulazioni (Migrazioni) icons8 play button 48 icons8 github 48 Fulvio Corno
17/05/2022 13:00-16:00 Laboratorio Lab 10 (Squadra 1: AA-LI)    icons8 github 48 Fulvio Corno
18/05/2022 13:00-14:30 Lezione 31  Esercizio sulle simulazioni (Bar)  icons8 play button 48  icons8 github 48 Alberto Monge Roffarello
18/05/2022 16:00-19:00 Laboratorio Lab 10 (Squadra 2: LO-ZZ)    icons8 github 48 Alberto Monge Roffarello
23/05/2022 08:30-10:00 Lezione 32 Esercizio - Risoluzione tema d'esame "DenverCrimes" icons8 play button 48 icons8 github 48  Alberto Monge Roffarello
23/05/2022 10:00-11:30 Lezione 33 Modalità di svolgimento dell'esame
Cammini minimi e cicli nei grafi
icons8 play button 48icons8 play button 48 icons8 pdf 48 Fulvio Corno
24/05/2022 13:00-16:00 Laboratorio

Simulazione d'esame n. 1 - Squadra 2: LO-ZZ
Presso Laboratorio LEP

https://classroom.github.com/a/7zp19AZI

    Fulvio Corno
25/05/2022 13:00-14:30 Lezione 34 Risoluzione tema d'eame "Yelp" del 20/07/2021 icons8 play button 48 icons8 github 48 Fulvio Corno
25/05/2022 16:00-19:00 Laboratorio

Simulazione d'esame n. 1 - Squadra 1: AA-LI
Presso Laboratorio LEP

https://classroom.github.com/a/7zp19AZI

    Alberto Monge Roffarello
30/05/2022 08:30-10:00 Lezione 35 Esercizi d'esame (soluzione Simulazione 1) icons8 play button 48 icons8 pdf 48icons8 github 48  Alberto Monge Roffarello
30/05/2022 10:00-11:30 Lezione 36 Esercizi d'esame (soluzione Simulazione 1) icons8 play button 48  icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
31/05/2022 13:00-16:00 Laboratorio

Simulazione d'esame n. 2 - Squadra 1: AA-LI
Presso Laboratorio LEP 

https://classroom.github.com/a/53CztfHC

    Alberto Monge Roffarello
01/06/2022 13:00-14:30 Lezione 37 Risoluzione tema d'eame "Yelp" del 20/07/2021 (seconda parte) icons8 play button 48 icons8 github 48 Fulvio Corno
01/06/2022 16:00-19:00 Laboratorio

Simulazione d'esame n. 2 - Squadra 2: LO-ZZ
Presso Laboratorio LEP

https://classroom.github.com/a/53CztfHC

    Alberto Monge Roffarello
06/06/2022 08:30-10:00 Lezione 38 Esercizi d'esame (soluzione Simulazione 2) - prima parte icons8 play button 48 icons8 github 48 Fulvio Corno
06/06/2022 10:00-11:30 Lezione 39 Esercizi d'esame (soluzione Simulazione 2) - seconda parte icons8 play button 48 icons8 github 48 Fulvio Corno
      FINE DEL CORSO      

 


Materiale

Questa sezione conterrà il materiale didattico (dispense, lucidi, link, ...) utilizzato durante il corso.

icons8 github 48Repository del materiale

Il materiale didattico è anche disponibile nel repository https://github.com/TdP-2022/materiale. Si consiglia di "clonare" tale repository, in modo da ricevere automaticamente (tramite "pull") tutti gli aggiornamenti sul materiale didattico.

icons8 pdf 48 Lucidi delle lezioni

icons8 play button 48 Video Lezioni

 

Playlist: https://youtube.com/playlist?list=PLqRTLlwsxDL-kPjZmrUOqZfk63V6dGQZ7

 

 

icons8 pdf 48 Laboratorio

 

icons8 github 48 Esercizi in aula

I sorgenti (progetti Eclipse) degli esercizi svolti in aula sono reperibili su https://github.com/TdP-2022

icons8 zip 48 Data-sets

Database SQL (da importare) relativi alle diverse tipologie di data-set utilizzate a lezione ed in laboratorio. I data-set utilizzati saranno anche pubblicati su https://github.com/TdP-datasets

icons8 zip 48 Software necessario

 

Link di approfondimento

 


Esame

Modalità d'esame a distanza:

L'esame di Sistemi Tecniche di Programmazione, nella sua forma svolta a distanza a causa dell'emergenza COVID-19, si svolgerà in modalità molto simili alla forma tradizionalmente svolta in laboratorio, con l'ausilio dello strumento di videosorveglianza.

Il contenuto del testo d'esame sarà, come al solito, un esercizio di programmazione composto di 2 domande (la prima obbligatoria per la sufficienza, la seconda necessaria a raggiungere voti >21).

Per lo svolgimento del lavoro dovrete utilizzare il vostro computer, connesso in videochiamata Zoom per tutta la durata della prova. Come in laboratorio, è concesso l'utilizzo di documentazione e materiale ed è concesso l'accesso ad Internet, ad esclusione degli strumenti di comunicazione (chat mail forum e simili). È obbligatorio chiudere tutte le applicazioni di comunicazione prima dell'inizio della prova.

La videosorveglianza avverrà attraverso l'apertura di una chiamata Zoom, alla quale gli studenti dovranno rimanere connessi per tutta la durata dell'esame.
In funzione del numero di studenti iscritti, saranno definiti più "turni d'esame", ciascuno con circa 20-25 studenti, e sorvegliato da un diverso docente. I compiti assegnati nei diversi turni saranno diversi.

All'orario di inizio dell'esame verrà compiuto l'appello dei presenti: lo studente dovrà identificarsi mostrando in videocamera un documento, e successivamente condividendo brevemente il proprio desktop. Da questo momento la videochiamata non dovrà più essere interrotta fino alla fine della prova (telecamera accesa e desktop condiviso).

Al termine dell'appello verrà trasmesso il testo d'esame (in formato PDF) ed il link GitHub da cui scaricare il "progetto Base". È facoltà dello studente, se lo desidera, stampare il testo (anche allontanandosi dall'inquadratura) nei primi 5 minuti d'esame.

La durata della prova è di 120 minuti dalla pubblicazione del testo.

Durante la prova gli studenti potranno porre domande ai docenti utilizzando la chat in modalità privata.

Durante la prova, in qualsiasi momento i docenti potranno osservare lo schermo condiviso dagli studenti. In caso di dubbi, lo studente è tenuto a giustificare tutte le applicazioni aperte e/o le pagine web aperte. La mancata condivisione comporta l'annullamento della prova.

L'elaborato dovrà essere svolto in Eclipse, partendo dal Progetto Base. Si suggerisce di fare "commit" frequenti (anche solo in locale, senza 'push') e di testare il codice man mano che esso viene sviluppato.

Al termine della prova, lo studente dovrà consegnare l'elaborato attraverso GitHub entro 2 minuti. I compiti non correttamente consegnati entro il termine segnalato saranno considerati come ritirati.
È responsabilità dello studente garantire che il codice consegnato parta correttamente eseguendo la classe Main.

La distribuzione del link a progetto GitHub e la successiva consegna saranno gestite attraverso la piattaforma GitHub Classroom. Le ultime due esercitazioni del corso (in data 03/06 e 10/06) saranno svolte sotto forma di "simulazioni d'esame", organizzate con gli stessi strumenti (Zoom, GitHub Classroom) e le stesse modalità (divisione in gruppi, sorveglianza, consegna) e tempistiche dell'esame effettivo (ovviamente senza correzione né prove orali), in modo da poter identificare e correggere eventuali problemi tecnici. Si auspica la completa partecipazione alle simulazioni d'esame: non si accetteranno lamentele sugli aspetti tecnici qualora fossero rilevati solo il giorno dell'esame.

Per facilitare la auto-valutazione degli studenti, che potranno valutare se ritirarsi oppure accedere alla correzione, si procederà come segue.
1. nel testo d'esame saranno presenti 1-2 esempi di esecuzione del primo punto del programma (dati inseriti ed output corrispondente). Lo studente potrà verificare il proprio programma con i dati proposti, durante lo svolgimento. Qualora non si riesca a raggiungere i risultati corretti (*), il progetto non potrà essere consegnato.
2. dopo la consegna dell'esame i docenti condivideranno ulteriori 1-2 esempi di esecuzione (diversi dai precedenti), con cui gli studenti potranno verificare il proprio programma. Nel caso in cui il programma non ottenga i risultati corretti (*), viene consigliato di ritirarsi dalla prova.
Gli studenti avranno 10 minuti per verificare il funzionamento del proprio programma, e potranno decidere se ritirarsi o proseguire.
(*) nel caso in cui le discrepanze tra la soluzione richiesta e quella ottenuta fossero realmente minime (aspetti estetici, diversi arrotondamenti, errori minimi), è facoltà dello studente consegnare e procedere nella prova, sapendo che, in funzione della causa del malfunzionamento, potrà ottenere una penalizzazione oppure l'insufficienza.

Tutti coloro che decideranno di consegnare verranno sentiti singolarmente per la verifica orale del proprio programma. Ciascuno studente sarà chiamato individualmente a condividere il controllo del proprio desktop ed a mostrare il funzionamento del proprio programma (che dovrà coincidere con quello consegnato su GitHub) e rispondere alle domande poste dal docente.
Le domande verteranno anche sulla verifica della conoscenza, da parte dello studente, del funzionamento del proprio programma, per verificarne l'effettiva paternità.
A seguito di questa verifica, verrà assegnato un VOTO PROVVISORIO relativo all'esercizio numero 1 (oppure verrà comunicata la bocciatura). Gli elaborati verranno poi valutati nei giorni successivi per definire il VOTO COMPLESSIVO che tiene conto anche dell'esercizio numero 2.

 

Nella definizione di queste regole d'esame, i docenti hanno valutato più importante la collaborazione responsabile tra docenti e studenti nel contesto del patto formativo, ed hanno evitato di adottare modalità vessatorie o tecnicamente contorte nelle modalità di svolgimento, anche per evitare l'impatto di eventuali problemi di connessione. Auspichiamo un forte senso di responsabilità da parte di tutti gli studenti. Vista la natura progettuale della prova d'esame, non saranno tollerate soluzioni eccessivamente simili (che possono essere solo indice di comunicazioni illecite), che verranno annullate d'ufficio in modo inappellabile (anche nei giorni successivi, a seguito di verifiche incrociate).

Istruzioni operative per l'esame:

Simulazioni d'esame:

Temi d'esame (i testi più recenti sono tutti su https://github.com/TdP-esami):

 


Prove finali

 

A partire dall'Anno Accademico 2012/2013, il Collegio di Ingegneria Gestionale ha definito che gli studenti debbano sostenere una Prova finale del valore di 3 crediti. Tale prova può essere svolta sulla tematica inerente al tirocinio (qualora esso venga svolto) oppure su tematiche relative alle materie studiate.

Per coloro che intendono svolgere la prova finale relativamente alle tematiche trattate nel corso di Tecniche di Programmazione, ho definito delle modalità che mirano a sviluppare un'esperienza pratica e formativa, ed allo stesso tempo riducano al minimo gli aspetti formali e burocratici, lasciando spazio allo sviluppo e sperimentazione software.

Tutto il processo è gestito attraverso il servizio GitHub, pertanto gli studenti dovranno dotarsi di un idoneo account su tale piattaforma.

Chi è interessato può visionare il regolamento e la relativa documentazione sul seguente repository: https://github.com/TdP-prove-finali/Introduzione

 


 

FAQ 

  • Non sono riuscito/a a seguire il corso di Programmazione ad Oggetti. Cosa posso fare?
    • La buona capacità di programmare in Java è un prerequisito essenziale per questo corso ed è chiaramente indicato sulla guida dello studente. Per supplire parzialmente alla carenza formativa si suggerisce:
      • chiedere al prof. Fabrizio Lamberti di essere abilitati a vedere le sue video lezioni (screencast)
      • prepararsi a studiare autonomamente il linguaggio Java. Posso consigliare il testo "Head First Java" (tutto tranne i capitoli 12, 13, 14, 15, 17, 18).
  • Non ho il corso nel carico didattico, posso comunque sostenere l'esame?
    • No. Chi (per vari motivi) non avesse il corso nel carico didattico, non sarà ammesso a sostenere l'esame. Non ci sono restrizioni per la frequenza in aula o in laboratorio, ma all'esame è richiesto di essere formalmente in regola.