Attenzione: Questa pagina contiene la versione archiviata relativa all'edizione 2016/2017 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

  • 2018-01-19: Informazioni per l'appello del 22/01/2018:
    • L'esame si svolgerà su un turno unico.
    • Appello ed ingresso: ore 13:40. Inizio prova: ore 14:00. Termine prova: ore 16:00. A seguire, verifiche al PC.
    • Nel compito si utilizzerà il data-set "Serie A".
  • 2017-09-20: Informazioni per l'appello del 22/09/2017:
    • L'esame si svolgerà su un turno unico.
    • Appello ed ingresso: ore 9:40. Inizio prova: ore 10:00. Termine prova: ore 12:00. A seguire, verifiche al PC.
    • Nel compito si utilizzerà una versione aggiornata del data-set "Formula 1".
  • 2017-07-07: Informazioni per l'appello del 10/07/2017:
    • Sarà svolto un solo turno di esame
    • Orario: appello ore 09:40, inizio prova ore 10:00, termine prova ore 12:00
    • Il compito d'esame verterà sul data-set "ArtsMia", già visto nella simulazione d'esame del 14/06/2017
  • 2017-06-23: Informazioni per l'appello del 26/06/2017:
    • Tabella di suddivisione in turni (estratti casualmente) 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 "Serie A", già visto nella simulazione d'esame del 07/06/2017
  • 2017-02-10: Benvenuti all'edizione 2016/2017 del corso!
  • 2017-02-10: I contenuti relativi alla precedente edizione 2015/2016 del corso sono disponibili alla pagina 03FYZ - Tecniche di programmazione (2015/2016)

 


Informazioni

Presentazione

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 oraAulaTipologiaNote
Lunedì 08:30-10:00 1I Lezione/Esercitazione  
Lunedì 10:00-11:30 1I  Lezione/Esercitazione  
Martedì 17:30-19:00 1I  Lezione/Esercitazione  
Mercoledì 08:30-11:30 LEP Esercitazione/Laboratorio (squadra 1/2) a partire dal 8/3/2017
Mercoledì 11:30-14:30 LEP Esercitazione/Laboratorio (squadra 2/1) a partire dal 8/3/2017

 

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

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.

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.

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 ed il video sarà visibile sul Portale della Didattica oppure su YouTube.

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

   

DataOreTipoArgomentoVideoMaterialeDocente
06/03/2017 08:30-10:00 L Introduzione al corso Video Icon YouTube icon full color pdf icon  Fulvio Corno
06/03/2017 10:00-11:30 Introduzione a JavaFX Video Icon YouTube icon full color pdf icon  Fulvio Corno
07/03/2017 17:30-19:00 L Java Collections Framework Video Icon YouTube icon full color pdf icon pdf icon GitHub Mark 64px Andrea Marcelli
08/03/2017 08:30-11:30 EL Laboratorio 1 - Squadra 1   pdf icon GitHub Mark 64px Alberto Monge
08/03/2017 11:30-14:30 EL Laboratorio 1 - Squadra 2   pdf icon GitHub Mark 64px Alberto Monge
13/03/2017 08:30-10:00 EA Programmazione in JavaFX
Esercizio Indovina Numero
Video Icon YouTube icon full color pdf iconpdf icon GitHub Mark 64px Andrea Marcelli
13/03/2017 10:00-11:30 EA Continuazione Esercizio Indovina Numero 
Soluzione Lab1
Video IconYouTube icon full color
GitHub Mark 64px
Andrea Marcelli
14/03/2017 17:30-19:00 L Git e GitHub Video IconYouTube icon full color
pdf icon  Fulvio Corno
15/03/2017 08:30-11:30 EL Laboratorio 2 - Squadra 2   pdf icon GitHub Mark 64px Andrea Marcelli
15/03/2017 11:30-14:30 EL Laboratorio 2 - Squadra 1   pdf icon GitHub Mark 64px Andrea Marcelli
20/03/2017 08:30-10:00 L Model-View-Controller (esempio Libretto Universitario) Video Icon YouTube icon full color GitHub Mark 64px Fulvio Corno
20/03/2017 10:00-11:30 L Model-View-Controller (esempio Libretto Universitario) -- segue Video Icon YouTube icon full color   Fulvio Corno
21/03/2017

17:30-19:00

L ArrayList vs LinkedList. Set and Hash Video Icon YouTube icon full color pdf icon Andrea Marcelli
22/03/2017 08:30-11:30 EL Laboratorio 3 - Squadra 1   pdf iconGitHub Mark 64px  Alberto Monge
22/03/2017 11:30-14:30 EL Laboratorio 3 - Squadra 2   pdf iconGitHub Mark 64px  Alberto Monge
27/03/2017 08:30-10:00 L Database e JDBC Video Icon YouTube icon full color pdf icon Fulvio Corno
27/03/2017 10:00-11:30 L Pattern DAO Video Icon YouTube icon full color GitHub Mark 64px Fulvio Corno
28/03/2017 17:30-19:00 L

HashMap e ripasso Java Collection Framework. Implementazione di Libretto con HashMap e HashSet. Correzione Lab02.

Video Icon YouTube icon full color pdf iconpdf iconGitHub Mark 64pxGitHub Mark 64pxGitHub Mark 64pxGitHub Mark 64px
Andrea Marcelli
29/03/2017 08:30-11:30 EL Laboratorio 4 - Squadra 2   pdf icon GitHub Mark 64px Andrea Marcelli
29/03/2017 11:30-14:30 EL Laboratorio 4 - Squadra 1   pdf icon GitHub Mark 64px Andrea Marcelli
03/04/2017 08:30-10:00 L Introduzione alla ricorsione: definizioni, analisi del problema dello zaino Video Icon YouTube icon full color pdf icon Fulvio corno
03/04/2017 10:00-11:30 L Introduzione alla ricorsione: implementazione del problema dello zaino Video Icon YouTube icon full color GitHub Mark 64px  Fulvio Corno
04/04/2017 17:30-19:30 EA Esercizio sulla ricorsione: quadrato magico Video Icon YouTube icon full color pdf icon GitHub Mark 64px Andrea Marcelli
05/04/2017 08:30-11:30 EL Laboratorio 5 - Squadra 1   pdf icon GitHub Mark 64px Alberto Monge
05/04/2017 11:30-14:30 EL Laboratorio 5 - Squadra 2   pdf icon GitHub Mark 64px Alberto Monge
10/04/2017 08:30-10:00 L Interfaccia grafica al problema dello Zaino  Video Icon YouTube icon full color GitHub Mark 64px Fulvio Corno
10/04/2017 10:00-11:30 L Introduzione alla complessità Video Icon YouTube icon full color pdf icon  Fulvio Corno
11/04/2017 17:30-19:00 EA Esercizi sulla ricorsione: quadrato magico e 8 regine Video Icon YouTube icon full color GitHub Mark 64pxpdf iconGitHub Mark 64px pdf icon Andrea Marcelli
12/04/2017 08:30-11:30 EL Laboratorio 6 - Squadra 2   pdf icon GitHub Mark 64px Andrea Marcelli
12/04/2017 11:30-14:30 EL Laboratorio 6 - Squadra 1   pdf icon GitHub Mark 64px Andrea Marcelli
      (sospensione didattica per vacanze Pasquali)      
24/04/2017 08:30-10:00 L Introduzione ai grafi Video Icon  YouTube icon full color pdf icon  Andrea Marcelli
24/04/2017 10:00-11:30 L Libreria jGraphT Video Icon YouTube icon full color pdf icon GitHub Mark 64px Andrea Marcelli
25/04/2017     (festivo)      
26/04/2017 08:30-11:30 EL Laboratorio 7 - Squadra 1   pdf icon GitHub Mark 64px Andrea Marcelli
26/04/2017 11:30-14:30 EL Laboratorio 7 - Squadra 2    pdf iconGitHub Mark 64px
Andrea Marcelli
01/05/2017     (festivo)      
02/05/2017 17:30-19:00 L Visite nei grafi. Video Icon YouTube icon full color pdf icon GitHub Mark 64px Fulvio Corno
03/05/2017 08:30-11:30 EL Laboratorio 8 - Squadra 2   pdf icon GitHub Mark 64px Andrea Marcelli
03/05/2017 11:30-14:30 EL Laboratorio 8 - Squadra 1   pdf icon GitHub Mark 64px Andrea Marcelli
08/05/2017 08:30-10:00 L JDBC Connection Pooling. Video Icon YouTube icon full color   Fulvio Corno
08/05/2017 10:00-11:30 L Visite. Albero di visita. Video Icon YouTube icon full color GitHub Mark 64px  Fulvio Corno
09/05/2017 17:30-19:00 L Cammini minimi nei grafi Video Icon YouTube icon full color pdf icon  Fulvio Corno
10/05/2017 08:30-11:30 EL Laboratorio 9 - Squadra 1   pdf icon GitHub Mark 64px Andrea Marcelli
10/05/2017 11:30-14:30 EL Laboratorio 9 - Squadra 2   pdf icon GitHub Mark 64px Andrea Marcelli
15/05/2017 08:30-10:00 L Cicli Hamiltoniani, Cicli Euleriani Video Icon YouTube icon full color pdf icon  Fulvio Corno
15/05/2017 10:00-11:30 EA Identity Map. Esercizio Video IconYouTube icon full color pdf icon  Fulvio Corno
16/05/2017 17:30-19:00 L Tree, Queue e Priority Queue Video Icon YouTube icon full color  pdf iconpdf icon Andrea Marcelli
17/05/2017 08:30-11:30 EL Laboratorio 10 - Squadra 2   pdf icon GitHub Mark 64px Fulvio Corno
17/05/2017 11:30-14:30 EL Laboratorio 10 - Squadra 1   pdf icon GitHub Mark 64px Alberto Monge
22/05/2017 08:30-10:00 L Simulazioni ad eventi Video Icon YouTube icon full color pdf icon  Fulvio Corno
22/05/2017 10:00-11:30 L Simulazioni ad eventi (esercizio CarSharing) Video Icon YouTube icon full color GitHub Mark 64px Fulvio Corno
23/05/2017 17:30-19:00 EA Esercizio (simulazione Emergency) Video Icon YouTube icon full color GitHub Mark 64px Fulvio Corno
24/05/2017 08:30-11:30 EL Laboratorio 11 - Squadra 1   pdf icon GitHub Mark 64px Alberto Monge
24/05/2017 11:30-14:30 EL Laboratorio 11 - Squadra 2     Fulvio Corno
29/05/2017 08:30-10:00 L Gestione delle date in Java 8 e SQL Video Icon YouTube icon full color pdf icon  Fulvio Corno
29/05/2017 10:00-11:30 L Gestione delle date in Java 8 e SQL Video Icon YouTube icon full color   Fulvio Corno
30/05/2017 17:30-19:00 EA Esercizio Babs Video Icon YouTube icon full color pdf icon GitHub Mark 64pxdownload
Andrea Marcelli
31/05/2017 08:30-11:30 EL Laboratorio 12 - Squadra 2   pdf icon GitHub Mark 64px Alberto Monge
31/05/2017 11:30-14:30 EL Laboratorio 12 - Squadra 1   pdf icon GitHub Mark 64px Alberto Monge
05/06/2017 08:30-10:00 EA Temi d'esame (23/01/2017) Video Icon YouTube icon full color pdf icon download GitHub Mark 64px Fulvio Corno
05/06/2017 10:00-11:30 EA Esercizio Babs (segue). Temi d'esame (23/09/2016) Video IconYouTube icon full color pdf icon GitHub Mark 64px Andrea Marcelli
06/06/2017 17:30-19:00 EA Temi d'esame (23/01/2017, segue) Video IconYouTube icon full color  GitHub Mark 64px Fulvio Corno
07/06/2017 08:30-11:30 EL Laboratorio 13 - Squadra 1 - Simulazione d'esame 1   pdf icon download GitHub Mark 64px Fulvio Corno
07/06/2017 11:30-14:30 EL Laboratorio 13 - Squadra 2 - Simulazione d'esame 1   pdf icon download GitHub Mark 64px
Fulvio Corno
12/06/2017 08:30-10:00 EA Temi d'esame (01/07/2016) Video Icon YouTube icon full color pdf icon download Fulvio Corno
12/06/2017 10:00-11:30 EA Temi d'esame (01/07/2016, segue) Video Icon YouTube icon full color GitHub Mark 64px  Fulvio Corno
13/06/2017 17:30-19:00 EA Temi d'esame (23/09/2016, segue). Commenti alla soluzione della Simulazione d'esame 1 Video Icon YouTube icon full color GitHub Mark 64px  Andrea Marcelli
14/06/2017 08:30-11:30 EL Laboratorio 14 - Squadra 2 - Simulazione d'esame 2   pdf icon download GitHub Mark 64px Andrea Marcelli
14/06/2017 11:30-14:30 EL Laboratorio 14 - Squadra 1 - Simulazione d'esame 2   pdf icon download GitHub Mark 64px Andrea Marcelli