Sito ufficiale del corso di Tecniche di programmazione (codice 03FYZPL) per studenti del corso di laurea in Ingegneria Gestionale (Classe L-8).
Questa pagina è relativa ad un'edizione precedente del corso. Per consultare le informazioni sull'ultima edizione andare a http://bit.ly/tecn-progr
Link breve a questa pagina: http://bit.ly/tecn-progr
Avvisi
- 2021-02-24: Benvenuti all'edizione 2020/2021 del corso! Nome in codice: "TdP-2021"
-
2021-02-24: I contenuti relativi alla precedente edizione 2019/2020 del corso sono disponibili alla pagina del corso 2019/2020
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 |
Pagina ufficiale: | Portale della Didattica |
Repository GitHub: | https://github.com/TdP-2021 |
Video Lezioni: | Playlist YouTube |
Gruppo Telegram: | https://t.me/joinchat/UgCif2jT0dL1AHg6 |
Accesso alle lezioni: | Link Zoom |
Orario delle lezioni
Giorno | Ora | Luogo | Tipo | Note |
---|---|---|---|---|
Lunedì | 08:30-10:00 | Online | Lezione/Esercitazione | |
Lunedì | 10:00-11:30 | Online | Lezione/Esercitazione | |
Martedì | 10:00-13:00 | Online | Laboratorio (squadra A-L) | dal 2 marzo 2021 |
Mercoledì | 08:30-11:30 | Online | Laboratorio (squadra M-Z) | dal 3 marzo 2021 |
Mercoledì | 13:00-14:30 | Online | Lezione/Esercitazione |
Informazioni
Presentazione
- Lucidi di introduzione al corso
- Regole d'esame
Materiale di studio
- Materiale fornito dai docenti
- Documenti e link disponibili su Internet, segnalati di volta in volta
Siti web di riferimento
- Repository del corso su GitHub, con gli esercizi svolti in aula e gli esercizi di laboratorio: https://github.com/TdP-2020
- Temi d'esame (testi e soluzioni): https://github.com/TdP-esami
- Data-set utilizzati nelle esercitazioni e negli esami: https://github.com/TdP-datasets
Testi principali
- Pro JavaFX 2 - A Definitive Guide to Rich Clients with Java Technology, by James Weaver, Weiqi Gao, Stephen Chin, Dean Iverson, Johan Vos, ISBN13: 978-1-4302-6872-7, http://www.apress.com/9781430268727/
- Algorithms in a Nutshell, By George T. Heineman, Gary Pollice, Stanley Selkow, O'Reilly Media, ISBN: 978-0-596-51624-6, http://shop.oreilly.com/product/9780596516246.do
Testi ausiliari
- Head First Java, 2nd edition, by Kathy Sierra, Bert Bates, O'Reilly Media, ISBN: 978-0-596-00920-5, http://shop.oreilly.com/product/9780596009205.do
- Head First Design Patterns, by Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra, O'Reilly Media, ISBN: 978-0-596-00712-6, http://shop.oreilly.com/product/9780596007126.do
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.
Materiale
Questa sezione conterrà il materiale didattico (dispense, lucidi, link, ...) utilizzato durante il corso.
Repository del materiale
Il materiale didattico è anche disponibile nel repository https://github.com/TdP-2021/materiale. Si consiglia di "clonare" tale repository, in modo da ricevere automaticamente (tramite "pull") tutti gli aggiornamenti sul materiale didattico.
Lucidi delle lezioni
- Introduzione al corso
- Introduzione a Git e GitHub
- Java Collection
- Java Collection Framework
- Lists
- Set and Hash
- Map
- Alberi, alberi binari e BST
- Code prioritarie
- JavaFX
- Database
- Complessità ed algoritmi
- Introduzione alla Ricorsione
- Introduzione alla complessità
- Un esempio di ricorsione: il quadrato magico
- Grafi
- Simulazioni ad eventi
- Date/Time in Java7, Java8, SQL, Jdbc
Video Lezioni
Playlist: https://www.youtube.com/playlist?list=PLqRTLlwsxDL8_vDc5V_1f7l8JgD8ebnX-
Laboratorio
- Laboratorio 0 (soluzione)
- Laboratorio 1 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 2 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 3 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 4 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 5 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 6 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 7 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 8 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 9 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 10 (progetto GitHub + soluzione) + video soluzione
- Laboratorio 11 - prima simulazione d'esame (progetto GitHub + soluzione)
- Laboratorio 12 - seconda simulazione d'esame (progetto GitHub + soluzione)
Video soluzioni proposte
Playlist: https://www.youtube.com/playlist?list=PLqRTLlwsxDL82GJIcExcOwyUKIo6H41ce
Esercizi in aula
I sorgenti (progetti Eclipse) degli esercizi svolti in aula sono reperibili su https://github.com/TdP-2021
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
- Slide di presentazione dei dataset utilizzati
- Dizionario: formato txt | formato sql
- Iscritti esami: formato sql
- Rubrica: formato sql
- Porto (pubblicazioni): pubblicazioni DAUIN, pubblicazioni di tutto il Politecnico big!
- GTFS:
- Servizio Ferroviario Metropolitano di Torino (SFM): formato GTFS originale, formato SQL (dati aggiornati al 2015)
- Trasporto urbano città di Torino (GTT): formato GTFS originale, formato SQL big! (dati aggiornati al 2015)
- Struttura delle tabelle del formato SQL
- Bike Sharing (BABS):
- Music Micro
- Formula 1
- Country Borders
- Formato SQL
- Sito web originario (the Correlates of War project)
- Food Pyramid (mod)
Software necessario
- Istruzioni per l'installazione del software (Windows)
- Istruzioni per l'installazione del software (Mac)
- Istruzioni per la creazione di un Personal Access Token per accedere da Eclipse ai progetti su GitHub
(importante e obbligatorio, necessario al fine di poter accedere ai progetti in sede di esame)
Link di approfondimento
- API di JavaFX
- consultazione on-line
- (vedi sopra per la versione scaricabile)
- Diagrammi delle classi di JavaFX
- Esempi interattivi di JavaFX sono contenuti nel file "JDK 8 Demos and Samples" eseguendo il file Ensemble.jar
- Documentazione e tutorial JavaFX
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 on-line:
Simulazioni d'esame:
- Simulazione d'esame del 20/05/2013 ("MetroParis") con soluzione PARZIALE svolta in aula (2013-05-20) e soluzione COMPLETA svolta in aula (2013-05-21)
- Simulazione d'esame del 03/06/2013 ("Words") con progetto base, soluzione PARZIALE svolta in aula (2013-05-20), soluzione COMPLETA svolta in aula
- Simulazione d'esame del 11/06/2013 ("CoCitations") con progetto base e soluzione svolta in aula (2013-06-11)
- Simulazione d'esame del 10/06/2014 ("Movimenti") con progetto base e soluzione svolta in aula (2014-06-10)
- Simulazione d'esame del 11/06/2014 ("Warehouse") con database, progetto base e soluzione PARZIALE svolta in aula (2014-06-11)
- Simulazione d'esame del 03/06/2015 ("Babs") con progetto base e soluzione proposta
- Simulazione d'esame del 01/06/2015
- Testo d'esame
- Progetto base
- Una possibile soluzione proposta
- Simulazione d'esame del 08/06/2016
- Simulazione d'esame del 07/06/2017 ("Serie A") con progetto base
- Simulazione d'esame del 10/07/2017 ("ArtsMia") con progetto base
Temi d'esame (i testi più recenti sono tutti su https://github.com/TdP-esami):
- Prova del 10/07/2013:
- Testo del Turno 1 e relativo Progetto base
- Testo del Turno 2 e relativo Progetto base
- Possibile soluzione proposta
- Prova del 23/07/2013:
- Testo del Turno 1 e relativo Progetto base
- Testo del Turno 2 e relativo Progetto base
- Possibile soluzione proposta
- Prova del 10/09/2013:
- Testo d'esame e relativo Progetto base
- Possibile soluzione proposta
- Prova del 03/07/2014
- Testo d'esame per i 3 turni
- Progetti base: turno A, turno B, turno C
- Prova del 17/07/2014
- Testo d'esame per i 2 turni
- Progetti base: turno A, turno B
- Prova del 12/09/2014
- Prova del 23/06/2015
- Testo d'esame (Turni A, B, C)
- Progetto base: Turno A, Turno B, Turno C
- Database "ridotto" per agevolare lo sviluppo
- Prova del 10/07/2015
- Testo d'esame (Turni A, B)
- Progetto base: Turno A, Turno B
- Prova del 15/09/2015
- Prova del 01/07/2016
- Prova del 15/07/2016
- Prova del 23/09/2016
- Prova del 23/01/2017:
- Prova del 26/06/2017
- Prova del 10/07/2017
- Prova del 22/09/2017
- Prova del 22/01/2018
- Prova del 02/07/2018
- Prova del 23/07/2018
- Prova del 12/09/2018
- Prova del 24/01/2019
- Prova del 27/06/2019
- Prova del 12/07/2019
- Prova del 29/06/2019
- GitHub: Turno mattino, Turno Pomeriggio
- Prova del 14/07/2020
- Prova del 24/02/2021
- Prova del 30/06/2021
- GitHub: Turno mattino, Turno Pomeriggio
- Prova del 10/09/2021
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).
- 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:
- 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.