Current Courses

Article Index

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

 


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ì 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

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.

icons8 pdf 48 Lucidi delle lezioni

icons8 play button 48 Video Lezioni

 

Nota: le video lezioni sono disponibili anche come file scaricabili via BitTorrent.

 

icons8 pdf 48 Laboratorio

icons8 github 48 Esercizi in aula

I sorgenti (progetti Eclipse) degli esercizi svolti in aula sono reperibili su https://github.com/TdP-2018

icons8 zip 48 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

icons8 zip 48 Software necessario

icons8 zip 48 Download opzionali

Link di approfondimento

 


Esame

Regole d'esame

Simulazioni d'esame:

Temi d'esame (i testi più recenti sono tutti su https://github.com/TdP-esami):

 


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 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

   

DataOreTipoArgomentoVideoMaterialeDocente
06/03/2018 16:00-17:30 L Introduzione al corso icons8 play button 48 icons8 pdf 48  Fulvio Corno
06/03/2018 17:30-19:00 L Introduzione a JavaFX icons8 play button 48 icons8 pdf 48 icons8 github 48 Fulvio Corno
07/03/2018 08:30-11:30 EL Laboratorio 1 - Squadra 1 icons8 pdf 48
Alberto Monge Roffarello
07/03/2018 11:30-14:30 EL Laboratorio 1 - Squadra 2 icons8 pdf 48
Alberto Monge Roffarello
12/03/2018 10:00-11:30 EA Git (quick intro). Esercizio di programmazione in JavaFX icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
13/03/2018 16:00-17:30 L Java Objects, Java Collections icons8 play button 48 icons8 pdf 48icons8 pdf 48icons8 github 48 Fulvio Corno
13/03/2018 17:30-19:00 EA Java Objects, Java Collections icons8 play button 48 icons8 github 48 Andrea Marcelli
14/03/2018 08:30-11:30 EL Laboratorio 2 - Squadra 2 icons8 pdf 48icons8 github 48 Andrea Marcelli
14/03/2018 11:30-14:30 EL Laboratorio 2 - Squadra 1 icons8 pdf 48icons8 github 48 Andrea Marcelli
19/03/2018 10:00-11:30 L Model-View-Controller icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
20/03/2018 16:00-17:30 EA Model-View-Controller (esempio) icons8 play button 48 icons8 github 48 Fulvio Corno
20/03/2018 17:30-19:00 L Database e JDBC icons8 play button 48 icons8 pdf 48  Fulvio Corno
21/03/2018 08:30-11:30 EL Laboratorio 3 - Squadra 1 icons8 pdf 48 icons8 github 48 Andrea Marcelli
21/03/2018 11:30-14:30 EL Laboratorio 3 - Squadra 2 icons8 pdf 48 icons8 github 48 Andrea Marcelli
26/03/2018 10:00-11:30 L PreparedStatement e Pattern DAO icons8 play button 48 icons8 github 48 Fulvio Corno
27/03/2018 16:00-17:30 EA Esercizio con DAO icons8 play button 48 icons8 github 48  Andrea Marcelli
27/03/2018 17:30-19:00 EA Hash Function, Map, Set icons8 play button 48icons8 play button 48 icons8 pdf 48icons8 pdf 48  Andrea Marcelli
28/03/2018 08:30-11:30 EL Laboratorio 4 - Squadra 2 icons8 pdf 48icons8 github 48 Andrea Marcelli
28/03/2018 11:30-14:30 EL Laboratorio 4 - Squadra 1 icons8 pdf 48icons8 github 48 Andrea Marcelli
      - - - vacanze Pasquali - - -      
09/04/2018 10:00-11:30 L Ricorsione. Esempio (Totocalcio) icons8 play button 48 icons8 pdf 48 icons8 github 48 Fulvio Corno
10/04/2018 16:00-17:30 EA Ricorsione - esercizi (Totocalcio, Otto Regine) icons8 play button 48 icons8 github 48icons8 github 48 Fulvio Corno
10/04/2018 17:30-19:00 EA Ricorsione - esercizi (Quadrato magico) icons8 play button 48 icons8 pdf 48 icons8 github 48 Andrea Marcelli
11/04/2018 08:30-11:30 EL Laboratorio 5 - Squadra 1 icons8 pdf 48 icons8 github 48 Alberto Monge Roffarello
11/04/2018 11:30-14:30 EL Laboratorio 5 - Squadra 2 icons8 pdf 48 icons8 github 48 Alberto Monge Roffarello
16/04/2018 10:00-11:30 EA Esercizio ricorsione "Ruzzle" icons8 play button 48 icons8 github 48 Fulvio Corno
17/04/2018 16:00-17:30 L Esercizio "Ruzzle" (segue). Complessità icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
17/04/2018 17:30-19:00 EA Esercizi Ricorsione (Nobel) icons8 play button 48 icons8 github 48 icons8 github 48 Andrea Marcelli
18/04/2018 08:30-11:30 EL Laboratorio 6 - Squadra 2 icons8 pdf 48 icons8 github 48 Fulvio Corno
18/04/2018 11:30-14:30 EL Laboratorio 6 - Squadra 1 icons8 pdf 48icons8 github 48 Fulvio Corno
23/04/2018 10:00-11:30 L Gestione delle date in Java e SQL icons8 play button 48 icons8 pdf 48 Fulvio Corno
24/04/2018 16:00-17:30 EA Soluzione Esercizio Lab6 icons8 play button 48 icons8 github 48 Fulvio Corno
24/04/2018 17:30-19:00 EA ORM. Soluzione Esercizio Lab4 icons8 play button 48  icons8 github 48 Andrea Marcelli
25/04/2018     - - - festivo - - -      
30/04/2018 10:00-11:30 EA JDBC Connection Pooling icons8 play button 48 icons8 pdf 48icons8 github 48 Andrea Marcelli
01/05/2018     - - - festivo - - -      
02/05/2018 08:30-11:30 EL Laboratorio 7 - Squadra 1 icons8 pdf 48icons8 github 48 Andrea Marcelli
02/05/2018 11:30-14:30 EL Laboratorio 7 - Squadra 2 icons8 pdf 48icons8 github 48 Andrea Marcelli
07/05/2018  10:00-11:30 L Introduzione ai grafi. Libreria jGraphT icons8 play button 48 icons8 pdf 48icons8 pdf 48 Fulvio Corno  
08/05/2018  16:00-17:30 Visite nei grafi. Esercizio sui grafi: tema d'esame 2017-07-10) - prima parte icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno  
08/05/2018  17:30-19:00 EA Esercizio sui grafi: tema d'esame 2017-07-10) - segue icons8 play button 48 icons8 github 48 Fulvio Corno
09/05/2018  08:30-11:30 EL Laboratorio 8 - Squadra 2 icons8 pdf 48icons8 github 48 Andrea Marcelli  
09/05/2018  11:30-14:30 EL Laboratorio 8 - Squadra 1 icons8 pdf 48icons8 github 48 Andrea Marcelli  
14/05/2018 10:00-11:30 EA Esercizio sui grafi: tema d'esame 2017-07-10) -fine icons8 play button 48 icons8 github 48 Fulvio Corno
15/05/2018 16:00-17:30 L Cammini minimi icons8 play button 48 icons8 pdf 48 Andrea Marcelli
15/05/2018 17:30-19:00 EA  Esercizio su cammini (Flights) icons8 play button 48 icons8 github 48 Andrea Marcelli
16/05/2018 08:30-11:30 EL Laboratorio 9 - Squadra 1 icons8 pdf 48icons8 github 48 Andrea Marcelli
16/05/2018 11:30-14:30 EL Laboratorio 9 - Squadra 2 icons8 pdf 48icons8 github 48 Andrea Marcelli
21/05/2018 10:00-11:30 L Code. Code Prioritarie. Simulazioni ad eventi. icons8 play button 48 icons8 pdf 48icons8 pdf 48 Fulvio Corno
22/05/2018 16:00-17:30 L Simulazioni ad eventi. Esercizio Car Sharing icons8 play button 48 icons8 github 48 Fulvio Corno
22/05/2018 17:30-19:00 EA Simulazioni ad eventi. Esercizio Emergency (prima parte) icons8 play button 48 icons8 github 48 Fulvio Corno
23/05/2018 08:30-11:30 EL Laboratorio 10 - Squadra 2  icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
23/05/2018 11:30-14:30 EL Laboratorio 10 - Squadra 1 icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
28/05/2018 10:00-11:30 EA Esercizio simulazione "Babs" (prima parte) icons8 play button 48 icons8 github 48 Andrea Marcelli
29/05/2018 16:00-17:30 EA Esercizio Emergency (seconda parte) icons8 play button 48 icons8 github 48 Fulvio Corno
29/05/2018 17:30-19:00 EA Esercizio sulle simulazioni: Tema d'esame del 23/01/2017 (Migrazioni) icons8 play button 48 icons8 github 48  Fulvio Corno
30/05/2018 08:30-11:30 EL Laboratorio 11 - Squadra 1 icons8 pdf 48 icons8 github 48 Alberto Monge Roffarello
30/05/2018 11:30-14:30 EL Laboratorio 11 - Squadra 2  icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
04/06/2018 10:00-11:30 EA Esercizio simulazione "Babs" (seconda parte). Tema d'esame 2016-07-01 (Turno A) icons8 play button 48 icons8 github 48 Andrea Marcelli
05/06/2018 16:00-17:30 EA Tema d'esame del 23/01/2017 (Migrazioni) - seconda parte icons8 play button 48 icons8 github 48 Fulvio Corno
05/06/2048 17:30-19:00 EA Temi d'esame 2016-07-01 (Turno A) - seconda parte icons8 play button 48 icons8 github 48 Andrea Marcelli
06/06/2018 08:30-11:30 EL Laboratorio 12 - Squadra 2 icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
06/06/2018 11:30-14:30 EL Laboratorio 12 - Squadra 1 icons8 pdf 48icons8 github 48 Alberto Monge Roffarello
11/06/2018 10:00-11:30 EA Simulazione d'esame n. 1 (prima parte) icons8 play button 48 icons8 pdf 48icons8 github 48 Fulvio Corno
12/06/2018 16:00-17:30 EA Simulazione d'esame n. 1 (seconda parte) icons8 play button 48 icons8 github 48icons8 github 48 Fulvio Corno
12/06/2018 17:30-19:00 EA Temi d'esame icons8 play button 48 icons8 github 48 Andrea Marcelli
13/06/2018 08:30-11:30 EL Laboratorio 13 - Simulazione di esame - Squadra 1 icons8 github 48 Fulvio Corno, Andrea Marcelli
13/06/2018 11:30-14:30 EL Laboratorio 13 - Simulazione di esame - Squadra 2 icons8 github 48 Fulvio Corno, Andrea Marcelli