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
- 2018-06-13: Chi volesse scaricare le video-lezioni sul proprio PC (anziché visionarle in streaming su YouTube), può farlo via BitTorrent dall'indirizzo http://academictorrents.com/details/82a376a0ec3055e12f6318f91bea426fa9826c36
- 2018-02-28: Benvenuti all'edizione 2017/2018 del corso!
-
2018-02-28: I contenuti relativi alla precedente edizione 2016/2017 del corso sono disponibili alla pagina del corso 2016/2017
Informazioni
Presentazione
- Lucidi di introduzione al corso
- Regole d'esame
- Pagina ufficiale del corso sul Portale della Didattica
Docenti
- prof. Fulvio Corno (This email address is being protected from spambots. You need JavaScript enabled to view it. )
- ing. Andrea Marcelli (This email address is being protected from spambots. You need JavaScript enabled to view it.)
- ing. Alberto Monge Roffarello (This email address is being protected from spambots. You need JavaScript enabled to view it.)
Orario
Giorno e ora | Aula | Tipologia | Note |
---|---|---|---|
Lunedì 10:00-11:30 | 7T | Lezione/Esercitazione | |
Martedì 16:00-17:30 | 9T | Lezione/Esercitazione | |
Martedì 17:30-19:00 | 9T | Lezione/Esercitazione | |
Mercoledì 08:30-11:30 | LEP | Esercitazione/Laboratorio (squadra 1/2) | a partire dal 7/3/2018 |
Mercoledì 11:30-14:30 | LEP | Esercitazione/Laboratorio (squadra 2/1) | a partire dal 7/3/2018 |
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-2018
- 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
Programma del corso
Contenuto tratto dalla pagina ufficiale del corso sul Portale della Didattica
Presentazione
L’insegnamento si propone di completare le capacità di programmazione dello studente, mettendolo in grado di affrontare e risolvere problemi, anche complessi, attraverso la realizzazione di programmi software. In particolare il corso si propone di integrare le competenze acquisite nei precedenti corsi, in particolare Programmazione ad Oggetti e Basi di Dati, permettendo di creare applicazioni in grado di presentare interfacce utente evolute e di accedere a basi di dati relazionali. Dal punto di vista algoritmico, dopo avere introdotto il concetto di complessità e la tecnica della ricorsione saranno analizzate le strutture dati più comuni (liste, alberi, grafi) e saranno studiati alcuni degli algoritmi di simulazione ed ottimizzazione più rilevanti, con riferimento ad applicazioni concrete nel campo della logistica, della produzione e dell’organizzazione d’impresa (es: allocazione di risorse, scheduling, sistemi a reti di code, …).
Conoscenze e abilità da acquisire
Conoscenza e capacità di comprensione: strutture dati complesse (liste, alberi, grafi); paradigma model-view-controller; progettazione di interfacce grafiche in Java; accesso a basi di dati relazionali da applicazioni Java; ricorsione; problemi di ricerca e di ottimizzazione (tecniche divide et impera e min-max); applicazioni in campo logistico e dell’organizzazione.
Capacità di applicare conoscenza e comprensione: realizzazione di applicazioni grafiche in Java con accesso a basi di dati; risoluzione di problemi di simulazione, ricerca ed ottimizzazione attraverso la realizzazione di programmi software; analisi di problemi di tipo gestionale e definizione di una soluzione algoritmica per la relativa risoluzione, ed implementazione della stessa.
Prerequisiti
Conoscenza delle basi di dati relazionali, ed in particolare della loro interrogazione ed aggiornamento mediante istruzioni SQL.
Concetti di programmazione ad oggetti, ed in particolare un linguaggio di programmazione object-oriented (Java o C#, ad esempio), con capacità di programmare in tale linguaggio.
Programma
Il contenuto del corso si sviluppa lungo quattro filoni paralleli, che affrontano la tematica della risoluzione dei problemi mediante sviluppo di prodotti software (in gergo “problem solving”) da quattro punti di vista diversi e complementari. I filoni sono sinteticamente denominati “Algoritmi e Strutture Dati”, “Tecniche di Programmazione”, “Problem Solving ed Applicazioni”, “Laboratorio”. Durante lo svolgimento del corso, i diversi argomenti introdotti saranno analizzati congiuntamente dai quattro punti di vista, in modo da fornire un approccio organico e completo.
Filone “Algoritmi e Strutture Dati”: tratta gli aspetti di tipo teorico legati alla teoria della complessità, alle strutture dati complesse, dinamiche e ricorsive, ed alle tecniche di progettazione algoritmica che ne permettono la gestione efficiente ed ottimale. Affronta inoltre le tecniche algoritmiche applicabili a problemi di ricerca, ottimizzazione e simulazione.
- Algoritmi, complessità
- Tipi di dato astratti (ADT)
- Ricorsione. Strutture dati ricorsive. Algoritmi ricorsivi.
- Strutture dati fondamentali: liste, alberi, hash table
- Il problema dell’ordinamento
- Strutture dati avanzate: grafi
- Algoritmi sui grafi
- Algoritmi di visita, ricerca, ottimizzazione
- Algoritmi approssimati (greedy, pseudorandom, euristico, evolutivo)
- Giochi ed algoritmi risolutivi
Filone “Tecniche di Programmazione”: fornisce richiami, integrazioni e complementi sulle specifiche tecniche di programmazione proprie del linguaggio Java, e delle proprie librerie standard ed estese, adatte a supportare l’implementazione efficace, efficiente ed estendibile degli algoritmi e strutture dati trattati.
- Richiami e complementi su Java Collections, Java Generics
- Librerie Java per la gestione di strutture dati complesse
- Accesso a DBMS relazionali da applicazioni Java: lo standard JDBC
- Applicazioni grafiche Java: Swing e JavaFX2.2
Filone “Problem Solving ed Applicazioni”: illustra l’applicazione delle tecniche algoritmiche presentate a problemi di tipo reale, presentando il processo di formalizzazione del problema e della soluzione a partire da requisiti provenienti dal dominio applicativo
- Problem solving: problemi di ricerca e problemi di ottimizzazione
- Tecniche di risoluzione ottima (divide et impera, min-max) ed ottimale (greedy)
- Algoritmi di simulazione ad eventi discreti
- Applicazioni a casi di interesse gestionale definiti a partire da specifiche di reali problemi aziendali (simulazione di reti di code, problemi di scheduling, ottimizzazione percorsi, gestione magazzino, allocazione e ottimizzazione delle risorse, ecc).
Filone “Laboratorio”: tutte le tecniche di programmazione ed i problemi applicativi saranno sviluppati anche in laboratorio informatico, dove si apprenderanno altresì le procedure operative per un efficace utilizzo degli strumenti informatici moderni.
- Java, Eclipse, Swing, MySql, JDBC: installazione, configurazione, gestione
- Installazione ed utilizzo di librerie per la gestione di strutture dati complesse
- Interfacciamento ed utilizzo data-set reali (benchmark)
Laboratori e/o esercitazioni
Esercitazioni in aula: svolgimento di programmi in aula ed analisi/progettazione di esempi applicativi.
Esercitazioni in laboratorio informatico: sviluppo di programmi di ricerca ed ottimizzazione.
Testi e materiale didattico
Lucidi e dispense forniti dal docente.
Testi ausiliari: K. Sierra, B. Bates, Head First Java (O’Reilly); R. Sedgewick, Algoritmi in Java (Addison-Wesley)
Modalita' di verifica dell'apprendimento
L’accertamento prevede una verifica teorico-pratica in laboratorio, e la realizzazione di un programma in grado di risolvere un problema gestionale.
Materiale
Questa sezione conterrà il materiale didattico (dispense, lucidi, link, ...) utilizzato durante il corso.
Lucidi delle lezioni
- Introduzione al corso
- Java Collection
- JavaFX
- Git e GitHub
- Database
- Complessità ed algoritmi
- Grafi
- Introduzione ai grafi
- Introduzione alla libreria JGraphT
- Visite nei grafiVisite nei grafi
- Cammini minimi
- Cicli Euleriani ed Hamiltoniani
- Simulazioni ad eventi
- Date/Time in Java7, Java8, SQL, Jdbc
Video Lezioni
Nota: le video lezioni sono disponibili anche come file scaricabili via BitTorrent.
Laboratorio
- Laboratorio 1 (07/03/2018) - Soluzione
- Laboratorio 2 (14/03/2018) - Soluzione es1 - Soluzione es2
- Laboratorio 3 (21/03/2018) - Soluzione
- Laboratorio 4 (28/03/2018) - Soluzione
- Laboratorio 5 (11/04/2018) - Soluzione
- Laboratorio 6 (18/04/2018) - Soluzione
- Laboratorio 7 (02/05/2018) - Soluzione
- Laboratorio 8 (09/05/2018) - Soluzione
- Laboratorio 9 (16/05/2018) - Soluzione
- Laboratorio 10 (23/05/2018) - Soluzione
- Laboratorio 11 (30/05/2018) - Soluzione
- Laboratorio 12 (06/06/2018) - Soluzione
Esercizi in aula
I sorgenti (progetti Eclipse) degli esercizi svolti in aula sono reperibili su https://github.com/TdP-2018
- 2018-03-06: HelloMe
- 2018-03-11: IndovinaNumero
- 2018-03-13: Libretto Voti
- 2018-03-27: ElencoCorsi
- 2018-04-09: Totocalcio
- 2018-04-10: OttoRegine
- 2018-04-10: QuadratoMagico
- 2018-04-16: Ruzzle
- 2018-04-17: VotiNobel
- 2018-04-24: EsercizioORM
- 2018-05-15: Flights
- 2018-05-28: Babs
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)
Software necessario
- Java Development Kit (JDK), versione 8: http://www.oracle.com/technetwork/java/javase/downloads/index.html (selezionare Java SE 8u161/ 8u162e poi JDK Download, ed infine la versione di Java SE Development Kit 8u162 per il vostro sistema operativo)
- Eclipse, versione Oxigen: http://www.eclipse.org/downloads/. Si suggerisce si selezionare
Get Eclipse Ogixen
e scegliere di installareEclipse IDE for Java Developers
(oppureEclipse IDE for Java EE Developers
se si intende sviluppare anche applicazioni Web con Java -- non necessario in questo corso). - Plugin
e(fx)clipse
di Eclipse. Il plugin si installa dal Marketplace di Eclipse (menu Help): ricercarejavafx
e selezionaree(fx)clipse 3.0
- Editor di interfacce utente
Scene Builder
, scaricabile da http://gluonhq.com/open-source/scene-builder/ - Un database server MySQL, a scelta tra:
- Oracle
MySQL Community Server
http://dev.mysql.com/downloads/mysql/, versione 5.7 - Il server
MariaDB
https://downloads.mariadb.org/, versione 10.2 (nota: scegliere di non installareHeidiSQL
in quanto è una versione vecchia) - Il pacchetto
XAMPP
(che contiene un server mySQL integrato) https://www.apachefriends.org/download.html, versione 7.2 (che include MariaDB 10.1)
- Oracle
- Un front-end per MySQL. Installare uno a scelta tra:
HeidiSQL
http://www.heidisql.com/download.php, leggero, veloce ma solo per Windows. Disponibile anche sul Windows Store https://www.microsoft.com/store/productId/9NXPRT2T0ZJFMySQL Workbench
http://dev.mysql.com/downloads/workbench/, più completo, con progettazione grafica delle tabelle, ma più complesso da usare e molto più lento, disponibile per tutti i sistemi operativiSequel Pro
http://www.sequelpro.com/, per Mac OS X
- La libreria
MySQL Connector/J
http://dev.mysql.com/downloads/connector/j/ (versione .zip) - La libreria
jGraphT
http://jgrapht.org/ (comprende anche i JavaDoc)
Download opzionali
- JavaDoc relativo alla JDK ed a JavaFX, utile per avere autocompletamento e documentazione in Eclipse quando non si è connessi ad Internet: http://www.oracle.com/technetwork/java/javase/downloads/index.html e selezionare (verso la fine della pagina) la sezione "Java SE 8 Documentation", selezionare "Download" poi scaricare
Java SE Development Kit 8u162 Documentation
- Libreria
HikariCP
per implementare il connection pooling https://github.com/brettwooldridge/HikariCP (RichiedeSLF4J
https://www.slf4j.org/download.html) - Libreria
SimpleLatLng
per i calcoli con latitudine e longitudine https://github.com/JavadocMD/simplelatlng
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
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
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.
Registro
Questa sezione conterrà il registro delle lezioni, con l'indicazione dell'argomento svolto in ciascuna di esse. Tutte le lezioni saranno videoregistrate ed il video sarà visibile su YouTube e scaricabile (via BitTorrent) dal sito AcademicTorrents.
Legenda: L = Lezione, EA = Esercitazione in aula, EL = Esercitazione in laboratorio