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

Questa pagina contiene la versione archiviata del materiale del corso relativo all'anno accademico 2012/2013. Questa pagina non viene più aggiornata.

La versione più recente del corso è reperibile all'indirizzo: http://bit.ly/tecn-progr

Avvisi

  • 2013-07-19: Composizione dei turni di laboratorio per la prova del 23/07/2013
  • 2013-07-18: I risultati della prova d'esame del 10/07/2013 sono disponibili sulla propria pagina personale del Portale della Didattica.
    • I voti proposti saranno registrati nella giornata di lunedì 22/07. Non è necessaria la presenza degli studenti per la registrazione.
    • Chi intendesse rifiutare il voto può segnalarlo via e-mail entro la mezzanotte di domenica 21/07.
    • Chi desidera visionare gli errori e le correzioni relative al proprio compito, può presentarsi domani, venerdì 19/07, alle ore 14:30 in aula 15A.
  • 2013-07-18: Vi comunico che l'esame di martedì 23/07 si svolgerà su due turni: primo turno alle 10:00 (con ingresso alle 9:30) e secondo turno alle 14:30 (con ingresso alle 14:00). Domani, venerdì 19, dopo la chiusura delle prenotazioni, vi comunicherò la composizione dei due turni.
  • 2013-07-11: Nella sezione "Esami" sono disponibili i testi e le soluzioni proposte per l'esame del 10/07/2013
  • 2013-07-09: Composizione dei turni di laboratorio per la prova del 10/07/2013
  • 2013-07-07: Avvisi importanti relativi alle prove d'esame:
    • È stato pubblicato un regolamento per lo svolgimento delle prove d'esame. Tutti gli studenti sono invitati a leggerlo con la massima attenzione.
    • Visto il numero di iscritti, l'appello del 10/07/2013 si svolgerà su due turni: primo turno alle ore 11:00 (con ingresso alle 10:40) e secondo turno alle ore 15:00 (con ingresso alle 14:40).
    • La composizione dei turni (che non sarà quella semplicemente alfabetica) verrà comunicata martedì mattina.
    • Si ricorda a tutti che la prenotazione scade lunedì 08/07 alle ore 14:00, pertanto chi è interessato a prenotarsi (o a cancellarsi) è pregato di farlo tempestivamente.
  • 2013-06-07: Avvisi vari relativi alla fine del corso:
    • La lezione di lunedì 10/06 non verrà svolta. Le ultime lezioni saranno martedì 11/06 dalle 14:30 alle 17:30.
    • Le squadre di laboratorio saranno accorpate a lunedì 10/06 dalle 10:00 alle 13:00. Il giorno 12/06 non vi sarà laboratorio.
    • Visto il numero dei prenotati, l'esame del 10/07 verrà molto probabilmente svolto in due turni: il primo alle ore 11:00, il secondo nel pomeriggio. Seguiranno comunicazioni più precise. Invito tutti a prenotarsi/cancellarsi con attenzione, in modo da avere il numero degli iscritti più fedele possibile.
  • 2013-05-16: Alcuni di voi mi hanno segnalato che la data del primo appello (10/07) è successiva alla scadenza per la presentazione delle domande di laurea (06/07). A tal proposito, la segreteria studenti mi precisa che:
    • «la scadenza della domanda di laurea di luglio (6 luglio) non slitterà in avanti per motivi di organizzazione delle Commissioni di laurea; il GESD però garantisce che lascerà la pratica dello studente in sospeso e aspetterà le registrazioni degli esami fino al 12 luglio (fine della prima parte della sessione estiva).»
  • 2013-04-18: A seguito delle richieste di alcuni di voi, ho definito delle regole per svolgere la Prova Finale di Laurea sugli argomenti legati al corso. New!
  • 2013-03-11: I video delle lezioni (screencast), oltre che nella sezione "registro" di questo sito, saranno anche disponibili su YouTube sulla playlist http://www.youtube.com/playlist?list=PLqRTLlwsxDL8X_qxfN_R8fKNiN0m5yoGx
  • 2012-09-21: Benvenuti alla prima edizione del corso, anno accademico 2012/2013. Ci vediamo a marzo 2013!
    Per ogni richiesta o curiosità in merito al corso, This email address is being protected from spambots. You need JavaScript enabled to view it.liberamente

 


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 oraAulaTipologiaNote
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 di tipo scritto, e la realizzazione di un programma in grado di risolvere un problema gestionale.
Opzionalmente, gli studenti potranno partecipare ad un concorso per la miglior soluzione fornita ad un problema di ottimizzazione fornito durante il corso.

 


Materiale

Questa sezione conterrà il materiale didattico (dispense, lucidi, link, ...) utilizzato durante il corso

Lucidi delle lezioni

Laboratorio

Esercizi in aula

Software

Link di approfondimento

 


Esame

Regole d'esame New!

Simulazioni d'esame:

Temi d'esame:

 


 

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 lezoni (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.

   

DataOreTipoArgomentoVideoMaterialeDocente
04/03/2013 08:30-10:00 L Introduzione al corso (obiettivi, contenuti, regole). Prima introduzione a JavaFX. / Fulvio Corno
04/03/2013 10:00-11:30 EL Laboratorio n. 0: Test d'ingresso (Squadra 1) / Marco Gaudesi
04/03/2013 11:30-13:00 EL Laboratorio n. 0: Test d'ingresso (Squadra 2) /   Marco Gaudesi
05/03/2013 14:30-16:00 L JavaFX Fundamentals: Architecture, Scene Graph, FXML   Fulvio Corno
05/03/2013 16:00-17:30 L JavaFX Fundamentals: Layout, Events. Example. Fulvio Corno
11/03/2013 08:30-10:00 L Abstract Data Types. Java Collections Framework.   Giovanni Squillero
11/03/2013 10:00-11:30 EL Laboratorio n. 1: JavaFX (Squadra 2) /   Marco Gaudesi
11/03/2013 11:30-13:00 EL Laboratorio n. 1: JavaFX (Squadra 2) - segue /   Marco Gaudesi
12/03/2013 14:30-16:00 L Lists.     Giovanni Squillero
12/03/2013 16:00-17:30 L Complexity.     Giovanni Squillero
13/03/2013 13:00-14:30 EL Laboratorio n. 1: JavaFX (Squadra 1) /   Marco Gaudesi
13/03/2013 14:30-16:00 EL Laboratorio n. 1: JavaFX (Squadra 1) - segue /   Marco Gaudesi
18/03/2013 08:30-10:00 L Accesso a database SQL da applicaizoni Java: introduzione a JDBC Fulvio Corno
18/03/2013 10:00-11:30 EL Laboratorio n. 2: Lists (Squadra 2) / Fulvio Corno
18/03/2013 11:30-13:00 EL Laboratorio n. 2: Lists (Squadra 2) - segue /   Fulvio Corno
19/03/2013 14:30-16:00 L Pattern DAO (Data Access Object) e DTO (Transfer Object) nell'accesso a basi di dati. Fulvio Corno
19/03/2013 16:00-17:30 L Architettura MVC per applicazioni JavaFX Fulvio Corno
20/03/2013 13:00-14:30 EL Laboratorio n. 2: Lists (Squadra 1) /   Giovanni Squillero
20/03/2013 14:30-16:00 EL Laboratorio n. 2: Lists (Squadra 1) - segue /   Giovanni Squillero
25/03/2013 08:30-10:00 L Prepared statement. Realizzazione del Model in MVC.   Fulvio Corno
25/03/2013 10:00-11:30 EL Laboratorio n. 3: Database (Squadra 2) /   Marco Gaudesi
25/03/2013 11:30-13:00 EL Laboratorio n. 3: Database (Squadra 2) - segue /   Marco Gaudesi
26/03/2013 14:30-16:00 L Set, Hash & Map (parte 1)     Giovanni Squillero
26/03/2013 16:00-17:30 L Set, Hash & Map (parte 2)     Giovanni Squillero
27/03/2013 13:00-14:30 EL Laboratorio n. 3: Database (Squadra 1) /   Marco Gaudesi
27/03/2013 14:30-16:00 EL Laboratorio n. 3: Database (Squadra 1) - segue /   Marco Gaudesi
      Sospensione didattica per vacanze pasquali      
08/04/2013 08:30-10:00 L Introduzione alla Ricorsione. Fulvio Corno
08/04/2013 10:00-11:30 EL Laboratorio n. 4: Strutture Dati (Squadra 2) /   Marco Gaudesi
08/04/2013 11:30-13:00 EL Laboratorio n. 4: Strutture Dati (Squadra 2) - segue /   Marco Gaudesi
09/04/2013 14:30-16:00 L Ricorsione. Algoritmi ricorsivi combinatori. Fulvio Corno
09/04/2013 16:00-17:30 L Il problema dell'ordinamento. Algoritmi di ordinamento iterativi. Fulvio Corno
10/04/2013 13:00-14:30 EL Laboratorio n. 4: Strutture Dati (Squadra 1) / Marco Gaudesi
10/04/2013 14:30-16:00 EL Laboratorio n. 4: Strutture Dati (Squadra 1) - segue /   Marco Gaudesi
15/04/2013 08:30-10:00 L Algoritmi di ordinamento ricorsivi: Merge Sort. Ordinamento di sistema: Collections.sort   Fulvio Corno
15/04/2013 10:00-11:30 EL Laboratorio n. 5: Ricorsione, algoritmi di ordinamento (Squadra 2) /   Marco Gaudesi
15/04/2013 11:30-13:00 EL Laboratorio n. 5: Ricorsione, algoritmi di ordinamento (Squadra 2) - segue /   Marco Gaudesi
16/04/2013 14:30-16:00 EA Esercizi su algoritmi ricorsivi: il Tour del Cavaliere Fulvio Corno
16/04/2013 16:00-17:30 EA Profiling. Esercizi su algoritmi ricorsivi: le N regine   Fulvio Corno
17/04/2013 13:00-14:30 EL Laboratorio n. 5: Ricorsione, algoritmi di ordinamento (Squadra 1) /   Marco Gaudesi
17/04/2013 14:30-16:00 EL Laboratorio n. 5: Ricorsione, algoritmi di ordinamento (Squadra 1) - segue /   Marco Gaudesi
22/04/2013 08:30-10:00 L Ricorsione: tesori, percorsi e bound     Giovanni Squillero
22/04/2013 10:00-11:30 EL Laboratorio n. 6: Ricorsione (Squadra 2) /   Marco Gaudesi
22/04/2013 11:30-13:00 EL Laboratorio n. 6: Ricorsione (Squadra 2) - segue /   Marco Gaudesi
23/04/2013 14:30-16:00 L Alberi Giovanni Squillero
23/04/2013 16:00-17:30 L Alberi binari Giovanni Squillero
24/04/2013 13:00-14:30 EL Laboratorio n. 6: Ricorsione (Squadra 1) /   Marco Gaudesi
24/04/2013 14:30-16:00 EL Laboratorio n. 6: Ricorsione (Squadra 1) - segue /   Marco Gaudesi
29/04/2013 08:30-10:00 L Introduzione ai grafi.   Fulvio Corno
29/04/2013 10:00-11:30 EL Laboratorio n. 7: Alberi, alberi binari (Squadra 1 & Squadra 2) /   Marco Gaudesi
29/04/2013 11:30-13:00 EL Laboratorio n. 7: Alberi, alberi binari (Squadra 1 & Squadra 2) - segue /   Marco Gaudesi
30/04/2013 14:00-16:00 L Grafi: rappresentazione.   Fulvio Corno
30/04/2013 16:00-17:30 L La libreria JGraphT. Esempio.   Fulvio Corno
06/05/2013 08:30-10:00 EA Esercizio: grafo del sistema ferroviario Fulvio Corno
06/05/2013 10:00-11:30 EL Laboratorio n. 8: Grafi (Squadra 2) /   Marco Gaudesi
06/05/2013 11:30-13:00 EL Laboratorio n. 8: Grafi (Squadra 2) - segue /   Marco Gaudesi
07/05/2013 14:30-16:00 L Termine esercizio. Visite in ampiezza.   Fulvio Corno
07/05/2013 16:00-17:30 L Visite in profondità. Cammini minimi (prima parte).   Fulvio Corno
08/05/2013 13:00-14:30 EL Laboratorio n. 8: Grafi (Squadra 1) /   Giovanni Squillero
08/05/2013 14:30-16:00 EL Laboratorio n. 8: Grafi (Squadra 1) - segue /   Giovanni Squillero
13/05/2013 08:30-10:00 L Cammini minimi. Algoritmo di Floyd-Warshall.   Fulvio Corno
13/05/2013 10:00-11:30 EL Laboratorio n. 9: Grafi (Squadra 2) /   Marco Gaudesi
13/05/2013 11:30-13:00 EL Laboratorio n. 9: Grafi (Squadra 2) - segue /   Marco Gaudesi
14/05/2013 14:30-16:00 L  Complessità dei problemi, tipi di algoritmi, altri algoritmi per i cammini minimi   Giovanni Squillero
14/05/2013 16:00-17:30 L Cicli Euleriani ed Hamiltoniani. Algoritmi.   Fulvio Corno
15/05/2013 13:00-14:30 EL Laboratorio n. 9: Grafi (Squadra 1) / Fulvio Corno
15/05/2013 14:30-16:00 EL Laboratorio n. 9: Grafi (Squadra 1) - segue /   Fulvio Corno
20/05/2013 08:30-10:00 EA Simulazione d'esame (Metro Paris) - parte 1 Fulvio Corno
20/05/2013 10:00-11:30 EL Laboratorio n. 10: Grafi (Squadra 2) / Marco Gaudesi
20/05/2013 11:30-13:00 EL Laboratorio n. 10: Grafi (Squadra 2) - segue /   Marco Gaudesi
21/05/2013 14:30-16:00 EA Simulazione d'esame (Metro Paris) - parte 2 Fulvio Corno
21/05/2013 16:00-17:30 L Strategie di ricerca ed ottimizzazione: Definizioni, Branch & Bound   Fulvio Corno
22/05/2013 13:00-14:30 EL Laboratorio n. 10: Grafi (Squadra 1) /   Fulvio Corno
22/05/2013 14:30-16:00 EL Laboratorio n. 10: Grafi (Squadra 1) - segue /   Fulvio Corno
27/05/2013 08:30-10:00 L Strategie di ricerca ed ottimizzazione: Greedy, Local Search   Fulvio Corno
27/05/2013 10:00-11:30 EL Laboratorio n. 11: Grafi - JavaFX (Squadra 2) / Marco Gaudesi
27/05/2013 11:30-13:00 EL Laboratorio n. 11: Grafi - JavaFX (Squadra 2) - segue /   Marco Gaudesi
28/05/2013 14:30-16:00 L Code - Simulazioni   Giovanni Squillero
28/05/2013 16:00-17:30 EA Esercizio: simulazione   Giovanni Squillero
03/06/2013 08:30-10:00 EA Simulazione d'esame (Words) - prima parte Fulvio Corno
03/06/2013 10:00-11:30 EL Laboratorio n. 12: Simulazioni - JavaFX (Squadra 2) / Marco Gaudesi
03/06/2013 11:30-13:00 EL Laboratorio n. 12: Simulazioni - JavaFX (Squadra 2) - segue /   Marco Gaudesi
04/06/2013 14:30-16:00 EA Esercizio: Simulazione rent-a-car Giovanni Squillero
04/06/2013 16:00-17:30 EA Simulazione d'esame (Words) - seconda parte. Grafici in JavaFX   Fulvio Corno
05/06/2013 13:00-14:30 EL Laboratorio n. 12: Simulazioni - JavaFX (Squadra 1) / Marco Gaudesi
05/06/2013 14:30-16:00 EL Laboratorio n. 12: Simulazioni - JavaFX (Squadra 1) - segue /   Marco Gaudesi
10/06/2013 10:00-11:30 EL Laboratorio n. 13: simulazione d'esame (Squadra 1 e squadra 2) /   Marco Gaudesi
10/06/2013 11:30-13:00 EL Laboratorio n. 13: simulazione d'esame (Squadra 1 e squadra 2) - segue /   Marco Gaudesi
11/06/2013 14:30-16:00 EA Simulazione d'esame (CoCitations) Fulvio Corno
11/06/2013 16:00-17:30 EA Simulazione d'esame - segue Fulvio Corno