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

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

  • 2017-01-18: Istruzioni per l'esame del 23/01/2017:
    • L'esame si svolgerà su un solo turno.
    • Appello ore 9:40, inizio prova ore 10:00, termine prova ore 12:00.
  • 2016-09-22: Istruzioni per l'esame del 23/09/2016:
    • Tabella di suddivisione in turni degli studenti prenotati
    • Turno A: appello ore 08:40, inizio prova ore 9:00, termine prova ore 11:00
    • Turno B: appello ore 12:00, inizio prova ore 12:20, termine prova ore 14:20
    • I compiti d'esame verteranno su versioni aggiornate ed estese dei database "iscritti ai corsi" e "porto" già visti durante l'anno.
  • 2016-07-14: Istruzioni per l'esame del 15/07/2016:
    • Tabella di suddivisione in turni degli studenti prenotati
    • Turno A: appello ore 09:10, inizio prova ore 09:30, termine prova ore 11:30
    • Turno B: appello ore 12:40, inizio prova ore 13:00, termine prova ore 15:00
    • Il compito d'esame verterà sul data-set "openflights", già visto nella simulazione d'esame del 01/06/2016 (e già ripulito dai valori non validi)
  • 2016-06-29: Istruzioni per l'esame del 01/07/2016:
    • Tabella di suddivisione in turni degli studenti prenotati
    • Turno A: appello ore 08:40, inizio prova ore 09:00, termine prova ore 11:00
    • Turno B: appello ore 12:00, inizio prova ore 12:20, termine prova ore 14:20
    • Turno C: appello ore 15:20, inizio prova ore 15:40, termine prova ore 17:40
    • Il compito d'esame verterà sul data-set "Formula 1", già visto nella simulazione d'esame del 08/06/2016
  • 2016-02-28: Benvenuti all'edizione 2014/2015 del corso!
  • 2016-02-28: I contenuti relativi alla precedente edizione 2014/2015 del corso sono disponibili alla pagina 03FYZ - Tecniche di programmazione (2014/2015)

 


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. Andrea Marcelli ( This email address is being protected from spambots. You need JavaScript enabled to view it. )

Orario

Giorno e oraAulaTipologiaNote
Lunedì 10:00:11:30 7T Lezione/Esercitazione  
Martedì 11:30-13:00 7T Lezione/Esercitazione  
Giovedì 13:00-14:30 7T Lezione/Esercitazione  
Mercoledì 08:30-11:30 LEP Esercitazione/Laboratorio (squadra 1/2) a partire dal 02/03/2016
Mercoledì 13:00-16:00 LEP Esercitazione/Laboratorio (squadra 2/1) a partire dal 02/03/2016

 

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 necessario

Download opzionali

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

Legenda: L = Lezione, EA = Esercitazione in aula, EL = Esercitazione in laboratorio

   

DataOreTipoArgomentoVideoMaterialeDocente
29/02/2016 10:00:11:30 L Introduzione al corso. Introduzione a JavaFX Fulvio Corno
01/03/2016 11:30-13:00 L Introduzione a JavaFX Fulvio Corno
01/03/2016 13:00-14:30 L Introduzione a JCF + List Giovanni Squillero
02/03/2016 08:30-11:30 EL Esercitazione 00 - Squadra 1     Andrea Marcelli
02/03/2016 11:30-14:30 EL Esercitazione 00 - Squadra 2     Andrea Marcelli
07/03/2016 10:00:11:30 L Applicazioni in JavaFX (Indovina Numero) Fulvio Corno
08/03/2016 11:30-13:00 L Esercizio "indovina numero" (segue) Fulvio Corno
08/03/2016 13:00-14:30 L Version Control Systems, Git, GitHub Fulvio Corno
09/03/2016 08:30-11:30 EL Esercitazione 01 - Squadra 2     Andrea Marcelli
09/03/2016 11:30-14:30 EL Esercitazione 01 - Squadra 1     Andrea Marcelli
14/03/2016 10:00-11:30 L Pattern Model-View-Controller Fulvio Corno
15/03/2016 11:30-13:00 L Pattern Model-View-Controller (segue) Fulvio Corno
15/03/2016 13:00-14:30 L Complessità Giovanni Squillero
16/03/2016 08:30-11:30 EL Esercitazione 02 - Squadra 1   Andrea Marcelli
16/03/2016 11:30-14:30 EL Esercitazione 02 - Squadra 2   Andrea Marcelli
21/03/2016 10:00-11:30 L Hash + Set Giovanni Squillero
22/03/2016 11:30-13:00 L Dababase. JDBC. Esempio. Fulvio Corno
22/03/2016 13:00-14:30 L DAO. Esercizio: rubrica su database Fulvio Corno

23/03/2016

08:30-11:30 EL Esercitazione 03 - Squadra 2   Andrea Marcelli
23/03/2016 11:30-14:30 EL Esercitazione 03 - Squadra 1  

Andrea Marcelli

04/04/2016 10:00-11:30 L Introduzione alla ricorsione Giovanni Squillero
05/04/2016 11:30-13:00 L DAO ed ORM Fulvio Corno
05/04/2016 13:00-14:30 EA Esercizio sulla ricorsione  Fulvio Corno
06/04/2016 08:30-11:30 EL Esercitazione 04 - Squadra 1   Andrea Marcelli
06/04/2016 11:30-14:30 EL Esercitazione 04 - Squadra 2   Andrea Marcelli
11/04/2016 10:00-11:30 L DAO ed ORM (segue) Fulvio Corno
12/04/2016 11:30-13:00 L JavaFX Concurrency Fulvio Corno
12/04/2016 13:00-14:30 L JavaFX Concurrency (segue) Fulvio Corno
13/04/2016 08:30-11:30 EL Esercitazione 05 - Squadra 2   Andrea Marcelli
13/04/2016 11:30-14:30 EL Esercitazione 05 - Squadra 1   Andrea Marcelli
18/04/2016 10:00-11:30 EA Ricorsione: approccio alla risoluzione dei problemi Fulvio Corno
19/04/2016 11:30-13:00 L Introduzione ai grafi Fulvio Corno
19/04/2016 13:00-14:30 L Libreria jGraphT Fulvio Corno
19/04/2016 08:30-11:30 EL Esercitazione 06 - Squadra 1   Andrea Marcelli
19/04/2016 11:30-14:30 EL Esercitazione 06 - Squadra 2   Andrea Marcelli
26/04/2016

11:30-13:00

L Visita in profondità Giovanni Squillero
26/04/2016 13:00-14:30 L Visita in ampiezza + rappresentazione  

Giovanni Squillero

27/04/2016

08:30-11:30

EL Esercitazione 07 - Squadra 2   Giovanni Squillero
27/04/2016 11:30-14:30 EL Esercitazione 07 - Squadra 1   Giovanni Squillero
02/05/2016 10:00-11:30 L Cammini minimi Fulvio Corno
03/05/2016 11:30-13:00 L Soluzione Laboratorio 07. Cammini minimi nel Lab 07.   Fulvio Corno
03/05/2016 13:00-14:00 L Connection Pooling.   Fulvio Corno
04/05/2016 08:30-11:30 EL Esercitazione 08 - Squadra 1   Andrea Marcelli
04/05/2016 11:30-14:30 EL Esercitazione 08 - Squadra 2   Andrea Marcelli
09/05/2016 10:00-11:30 L Connection Pooling (fine esercizio). Cicli Hamiltoniani e Cicli Euleriani. Fulvio Corno
10/05/2016 11:30-13:00 EA Soluzione Laboratorio 8 (Metro Paris) Giovanni Squillero
10/05/2016 13:00-14:30 EA Lo standard GTFS. Esempi: GTT, SFM Fulvio Corno
11/05/2016 08:30-11:30 EL Esercitazione 09 - Squadra 2   Andrea Marcelli
11/05/2016 11:30-14:30 EL Esercitazione 09 - Squadra 1   Andrea Marcelli
16/05/2016 10:00-11:30 L Trees and Queues Giovanni Squillero
17/05/2016 16:00-17:30 L Simulazioni Giovanni Squillero
17/05/2016 17:30-19:00 L Simulazioni Giovanni Squillero
18/05/2016 08:30-11:30 EL Esercitazione 10 - Squadra 1   Giovanni Squillero
18/05/2016 11:30-14:30 EL Esercitazione 10 - Squadra 2   Giovanni Squillero
23/05/2016 10:00-11:30 L Date and Time in Java 8 Fulvio Corno
24/05/2016 11:30-13:00 L Date and Time in SQL. Esercizio "Babs" Fulvio Corno
24/05/2016 13:00-14:30 EA Esercizio "Babs"   Fulvio Corno
25/05/2016 08:30-11:30 EL Esercitazione 11 - Squadra 2   Andrea Marcelli
25/05/2016 11:30-14:30 EL Esercitazione 11 - Squadra 1   Andrea Marcelli
30/05/2016 10:00-11:30 EA Esercizi d'esame (Esame 23/06/2015 - MusicMicro) Progetto Base Fulvio Corno
31/05/2016 11:30-13:00 EA Esercizi d'esame  (Esame 23/06/2015 - MusicMicro - segue)   Fulvio Corno
31/05/2016 13:00-14:30 EA Esercizi d'esame  (Esame 23/06/2015 - MusicMicro - segue) Branch svolto in aula Fulvio Corno
01/06/2016 08:30-11:30 EL Simulazione d'esame 1 - Squadra 1   Progetto Base Fulvio Corno
01/06/2016 11:30-14:30 EL Simulazione d'esame 1 - Squadra 2   Progetto Base Fulvio Corno
06/06/2016 08:30-10:00 EA Esercizi d'esame (Esame 03/07/2014 - ilMeteo) Progetto Base Fulvio Corno
07/06/2016 11:30-13:00 EA Esercizi d'esame (Esame 03/07/2014 - ilMeteo - segue) Progetto Base Fulvio Corno
07/06/2016 13:00-14:30 EA Soluzione proposta alla simulazione d'esame 1 Progetto Base Fulvio Corno
08/06/2016 08:30-11:30 EL Simulazione d'esame 2 - Squadra 2   Fulvio Corno
08/06/2016 11:30-14:30 EL Simulazione d'esame 2 - Squadra 1   Fulvio Corno