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

Attenzione: Questa pagina contiene la versione archiviata relativa all'edizione 2013/2014 del corso. L'ultima versione del corso è invece disponibile alla pagina: http://bit.ly/tecn-progr

Avvisi

  • 2014-09-04: per chi avesse sostenuto la prova di Tecniche di Programmazione nel secondo appello di Luglio, come anticipato ci sarà la possibilità di
    visionare gli errori VENERDÌ 5 settembre alle ore 15:00, presso la SALA COLLOQUI del Dipartimento di Automatica e Informatica (quarto
    piano, atrio di fronte agli ascensori).
    Eventuali richieste di rifuito del voto devono pervenire via e-mail entro domenica 7/9. I voti saranno registrati lunedì 8/9 in mattinata.
  • 2014-07-15: Informazioni importanti in merito alla prova d'esame del 17/07/2014:
    • L'esame si svolgerà presso il LEP in due turni:
      • Turno A: Appello e ingresso ore 09:30, svolgimento esame ore 10:00-12:00, valutazioni e consegne 12:00-12:30
      • Turno B: Appello e ingresso ore 13:30, svolgimento esame ore 14:00-16:00, valutazioni e consegne 16:00-16:30
    • Consultate la suddivisione degli studenti nei turni
    • In tutti i 2 turni verrà utilizzato lo stesso data-set, tratto da una challenge sui dati relativi al servizio di "bike sharing" nell'area di San Francisco (Bay Area)
  • 2014-07-10: Pubblicate le valutazioni della prova d'esame del 03/07/2014: collegarsi al Portale della Didattica.
    • Chi ha urgenza di registrare il voto proposto, me lo comunichi via e-mail ENTRO OGGI 10/07 alle ore 22:00. Nell'oggetto dell'e-mail scrivete "[TdP] Registrazione Urgente".
    • Chi desidera visionare le correzioni, puo venire martedì 15/07 alle ore 14:00 (Aula 11B). Mi dispiace, ma per chi ha urgenza del voto non sara possibile visionare le correzioni.
    • Chi desidera rifiutare il voto, puo inviare una e-mail entro il 15/07 alle ore 17:00, oppure dirlo di persona all'incontro di martedì. Nell'oggetto dell'e-mail scrivete "[TdP] Rifiuto voto".
    • I voti proposti saranno registrati il 16/07. Non è necessario comunicare l'accettazione
  • 2014-07-02: Informazioni importanti in merito alla prova d'esame del 03/07/2014:
    • L'esame si svolgerà presso il LEP in tre turni
      • Turno A: Appello e ingresso ore 08:45, svolgimento esame ore 09:30-11:30, valutazioni e consegne 11:30-12:30
      • Turno B: Appello e ingresso ore 12:30, svolgimento esame ore 13:00-15:00, valutazioni e consegne 15:00-16:00
      • Turno C: Appello e ingresso ore 16:00, svolgimento esame ore 16:30-18:30, valutazioni e consegne 18:30-19:30
    • Tramite sorteggio abbiamo definito la seguente suddivisione degli studenti nei turni.
    • In tutti i 3 turni verrà utilizzato lo stesso data-set, tratto dall'archivio meteorologico pubblicato dal sito ilmeteo.it
  • 2014-03-03: Benvenuti all'edizione 2013/2014 del corso di Tecniche di Programmazione. Gli studenti interessati all'edizione precedente (2012/2013) del corso possono fare riferimento alla pagina archiviata, completa di tutto il materiale e gli screencast.

 


Informazioni

Presentazione

Docenti

  • prof. Fulvio Corno (This email address is being protected from spambots. You need JavaScript enabled to view it. )
  • ing. Giovanni Squillero ( This email address is being protected from spambots. You need JavaScript enabled to view it. )
  • ing. Marco Gaudesi ( This email address is being protected from spambots. You need JavaScript enabled to view it. )

Orario

Giorno e ora Aula Tipologia Note
Martedì 14:30-16:00 7T Lezione/Esercitazione  
Martedì 16:00-17:30 7T Lezione/Esercitazione  
Mercoledì 13:00-14:30 7T Lezione/Esercitazione  
Giovedì 08:30-11:30 LEP Esercitazione/Laboratorio (squadra 2) a partire dal 06/03/2014
Giovedì 13:00-16:00 LEP Esercitazione/Laboratorio (squadra 1) a partire dal 06/03/2014

 

Materiale di studio

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

Testi principali

Testi ausiliari


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

Laboratorio

Esercizi in aula

Sorgenti (progetti Eclipse) degli esercizi svolti in aula.

Data-sets

Database SQL (da importare) relativi alle diverse tipologie di data-set utilizzate a lezione ed in laboratorio.

Software

Link di approfondimento

 


Esame

Regole d'esame New!

Simulazioni d'esame:

Temi d'esame:

 


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.

Chi è interessato veda le regole per svolgere la Prova Finale di Laurea

 


 

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 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 in aula (screencast) ed il video sarà scaricabile da questa pagina.

   

Data Ore Tipo Argomento Video Materiale Docente
04/03/2014 14:30-16:00 L Introduzione al corso. Presentazione di JavaFX. Screencast SlidesSlides Fulvio Corno
04/03/2014 16:00-17:30 L Struttura di un'applicazione JavaFX Screencast   Fulvio Corno
05/03/2014 13:00-14:30 L JavaFX: controller e gestione eventi Screencast Download Fulvio Corno
06/03/2014 08:30-11:30 EL Laboratorio 1 - Squadra 2. / Marco Gaudesi, Giovanni Squillero
06/03/2014 13:00-16:00 EL Laboratorio 1 - Squadra 1. /   Marco Gaudesi, Fulvio Corno
11/03/2014 14:30-16:00 L Java Collections, Lists Screencast Screencast   Giovanni Squillero
11/03/2014 16:00-17:30 L Complexity  ScreencastScreencastScreencast  Download Giovanni Squillero
12/03/2014 13:00-14:30 L Complexity (cont), Sorting  ScreencastScreencast Giovanni Squillero
13/03/2014 08:30-11:30 EL Laboratorio 2 - Squadra 2. / Marco Gaudesi
13/03/2014 13:00-16:00 EL Laboratorio 2 - Squadra 1. /   Fulvio Corno
18/03/2014 14:30-16:00 L Sets, Hash Screencast Giovanni Squillero
18/03/2014 16:-00-17:30 L Pattern MVC. Progettazione del Modello in JavaFX Screencast Download Fulvio Corno
19/03/2014 13:00-14:30 L Hash (2),  Maps  Screencast   Giovanni Squillero
20/03/2014 08:30-11:30 EL Laboratorio 3 - Squadra 2. / Marco Gaudesi
20/03/2014 13:00-16:00 EL Laboratorio 3 - Squadra 1. /   Marco Gaudesi
25/03/2014 14:30-16:00 L Accesso al database in Java. JDBC. Screencast Slides Fulvio Corno
25/03/2014 16:00-17:30 EA Esercizio di accesso al database. Screencast Download Fulvio Corno
26/03/2014 13:00-14:30 L Prepared Statement. Pattern DAO. Screencast   Fulvio Corno
27/03/2014 08:30-11:30 EL Laboratorio 4 - Squadra 2.   Marco Gaudesi
27/03/2014 13:00-16:00 EL Laboratorio 4 - Squadra 1.     Marco Gaudesi
01/04/2014 14:30-16:00 EA Esercizio in aula (Iscritti ai Corsi). Screencast Download Fulvio Corno
01/04/2014 16:00-17:30 EA Esercizio in aula (Iscritti ai Corsi) - segue. Screencast DownloadDownload Fulvio Corno
02/04/2014 13:00-14:30 EA Esercizio in aula (Iscritti ai Corsi) - segue. Introduzione alla ricorsione Screencast SlidesDownload Fulvio Corno
03/04/2014 08:30-11:30 EL Laboratorio 5 - Squadra 2.   Marco Gaudesi
03/04/2014 13:00-16:00 EL Laboratorio 5 - Squadra 1.     Marco Gaudesi
08/04/2014 14:30-17:30 L Ricorsione II ScreencastScreencast Download Giovanni Squillero
09/04/2014 13:00-14:30 EA Esercizio sulla ricorsione: "Ruzzle" Screencast DownloadDownload Fulvio Corno
10/04/2014 08:30-11:30 EL Laboratorio 6 - Squadra 2.   Giovanni Squillero
10/04/2014 13:00-16:00 EL Laboratorio 6 - Squadra 1.     Fulvio Corno
15/04/2014 14:30-16:00 L Grafi Screencast(Rovinato. Versione del 2013:) Giovanni Squillero
15/04/2014 16:00-17:30 L Grafi: rappresentazioni. Libreria jGraphT Screencast Fulvio Corno
16/04/2014 13:00-14:30 L Grafi: algoritmi di visita. Screencast   Fulvio Corno
17/04/2014 08:30-11:30 EL Laboratorio 7 - Squadra 2.  / Marco Gaudesi 
17/04/2014 13:00-16:00 EL Laboratorio 7 - Squadra 1.  /   Marco Gaudesi 
29/04/2014 14:30-16:00 L Grafi: cammini minimi Screencast Fulvio Corno
29/04/2014 16:00-17:30 EA Esercizio (tratto dalla simulazione d'esame del 11/06/2013) Screencast Fulvio Corno
30/04/2014 13:00-14:30 EA Esercizio (segue) Screencast Download Fulvio Corno
06/05/2014 14:30-16:00 L Il formato GTFS. Struttura, interpretazione, mapping SQL. Screencast Fulvio Corno
06/05/2014 16:00-17:30 L Calcolo percorsi su GTFS. Connection pooling. Screencast Download Fulvio Corno
07/05/2014 13:00-14:30 L Code, stack, code prioritarie. Algoritmo di Dijkstra.  Screencast Giovanni Squillero
08/05/2014 08:30-11:30 EL Laboratorio 8 - Squadra 2.   Marco Gaudesi
08/05/2014 13:00-16:00 EL Laboratorio 8 - Squadra 1.     Marco Gaudesi
13/05/2014 14:30-16:00 EL Applicazione del connection pooling al grafo GTFS Screencast Download Fulvio Corno
13/05/2014 16:00-17:30 L Simulazioni  ScreencastScreencast  Download  Giovanni Squillero
14/05/2014 13:00-14:30 L Simulazioni  Screencast  Download Giovanni Squillero
15/05/2014 08:30-11:30 EL Laboratorio 9 - Squadra 2.   Marco Gaudesi
15/05/2014 13:00-16:00 EL Laboratorio 9 - Squadra 1.     Marco Gaudesi
20/05/2014 14:30-16:00 L JavaFX Concurrency Screencast Download Fulvio Corno
20/05/2014 16:00-17:30 EA Simulazioni  Screencast  Download Giovanni Squillero
21/05/2014 13:00-14:30 EA Simulazioni  Screencast  DownloadDownload Giovanni Squillero
22/05/2014 08:30-11:30 EL Laboratorio 10 - Squadra 2.   Marco Gaudesi, Giovanni Squillero
22/05/2014 13:00-16:00 EL Laboratorio 10 - Squadra 1.     Marco Gaudesi
27/05/2014 14:30-16:00 L JavaFX Tables Screencast Download Fulvio Corno
27/05/2014 16:00-17:30 L TSP  Screencast  Download Giovanni Squillero
28/05/2014 13:00-14:30 L TSP (cont'd)  Screencast  DownloadDownload Giovanni Squillero
29/05/2014 08:30-11:30 EL Laboratorio 11 - Squadra 2.   Download Giovanni Squillero, Marco Gaudesi
29/05/2014 13:00-16:00 EL Laboratorio 11 - Squadra 1.     Marco Gaudesi
03/06/2014 14:30-16:00 L JavaFX Charts Screencast   Fulvio Corno
03/06/2014 16:00-17:30 L JavaFX Charts (segue). Illustrazione delle regole d'esame. Screencast Download Fulvio Corno
04/06/2014 13:00-14:30 EA Esercizi: simulazione + ricorsione ScreencastScreencast  DownloadDownload Giovanni Squillero
05/06/2014 08:30-11:30 EL Laboratorio 12 - Squadra 2.   Marco Gaudesi
05/06/2014 13:00-16:00 EL Laboratorio 12 - Squadra 1.     Marco Gaudesi
10/06/2014 14:30-16:00 EA Simulazione d'esame "Movimenti" Screencast Download Fulvio Corno
10/06/2014 16:00-17:30 EA Simulazione d'esame "Movimenti" (segue) Screencast Download Fulvio Corno
11/06/2014 13:00-14:30 EA Simulazione d'esame "Warehouse" Screencast DownloadDownload
Download
Fulvio Corno
12/06/2014 08:30-11:30 EL Laboratorio 13 - Squadra 2.   Marco Gaudesi
12/06/2014 13:00-16:00 EL Laboratorio 13 - Squadra 1.     Marco Gaudesi