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

  • 2015-09-14: Informazioni per l'esame del 15/09/2015:
    • Si svolgerà un solo turno
    • Appello studenti ore 9:40
    • Inizio prova ore 10:00
    • Termine prova ore 12:00
  • 2015-07-08: Informazioni per l'esame del 10/07/2015:
    • Sono stati sorteggiati i turni d'esame per l'appello di domani.
    • Gli orari per i turni sono i seguenti:
    •   Turno A Turno B
      Appello studenti 09:40 13:10
      Inizio prova 10:00 13:30
      Termine prova 12:00 15:30
      Cognomi GOLEMI-WU ALTARE-GIARDI
  • 2015-06-22: Informazioni per l'esame del 23/06/2015:
    • Sono stati sorteggiati i turni d'esame per l'appello di domani.
    • Gli orari per i turni sono i seguenti:
    •   Turno A Turno B Turno C
      Appello studenti 08:40 12:00 15:20
      Inizio prova 09:00 12:20 15:40
      Termine prova 11:00 14:20 17:40
    • Il data-set utilizzato per l'esame sarà tratto dal database MusicMicro tratto da questo sito: http://www.cp.jku.at/datasets/musicmicro/index.html
  • 2015-02-24: Benvenuti all'edizione 2014/2015 del corso!
  • 2015-02-24: I contenuti relativi alla precedente edizione 2013/2014 del corso sono disponibili alla pagina archiviata nella sezione "Past Courses"

 


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 1I Lezione/Esercitazione  
Giovedì 13:00-14:30 1I Lezione/Esercitazione  
Giovedì 14:30-16:00 1I Lezione/Esercitazione  
Mercoledì 08:30-11:30 LEP Esercitazione/Laboratorio (squadra 1) a partire dal 04/03/2015
Mercoledì 13:00-16:00 LEP Esercitazione/Laboratorio (squadra 2) a partire dal 04/03/2015

 

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

   

Data Ore Tipo Argomento Video Materiale Docente
02/03/2015 14:30-16:00 L Introduzione al corso. Fulvio Corno
03/03/2015 08:30-11:30 EL Laboratorio 0 - Squadra 1 (A-L)   Marco Gaudesi, Giovanni Squillero
03/03/2015 13:00-16:00 EL Laboratorio 0 - Squadra 2 (M-Z)     Marco Gaudesi
04/03/2015 13:00-14:30 L Introduzione a JavaFX Fulvio Corno
04/03/2015 14:30-16:00 L Introduzione a JCF Giovanni Squillero
10/03/2015 14:30-16:00 L Programmazione in JavaFX (esercizio "Indovina il numero") Fulvio Corno
11/03/2015 08:30-11:30 EL Laboratorio 1 - Squadra 2 (M-Z)   Marco Gaudesi
11/03/2015 13:00-16:00 EL Laboratorio 1 - Squadra 1 (A-L)     Marco Gaudesi
12/03/2015 13:00-14:30 L Complessità Giovanni Squillero
12/03/2015 14:30-16:00 EA Liste Giovanni Squillero
17/03/2015 14:30-16:00 L Model-View-Controller (esercizio "Libretto universitario")   Fulvio Corno
18/03/2015 08:30-11:30 EL Laboratorio 2 - Squadra 1 (A-L)   Marco Gaudesi
18/03/2015 13:00-16:00 EL Laboratorio 2 - Squadra 2 (M-Z)     Marco Gaudesi
19/03/2015 13:00-14:30 L Hash, Maps, Sets (parte 1) Giovanni Squillero
19/03/2015 14:30-16:00 L Model-View-Controller / Introduzione a JDBC Fulvio Corno
24/03/2015 14:30-16:00 EA Esercizio "Impiccato"   Fulvio Corno
25/03/2015 08:30-11:30 EL Laboratorio 3 - Squadra 2 (M-Z)   Marco Gaudesi
25/03/2015 13:00-16:00 EL Laboratorio 3 - Squadra 1 (A-L)     Marco Gaudesi
26/03/2015 13:00-14:30 L JDBC - Strumenti di accesso al database - Esempio JDBC   Fulvio Corno
26/03/2015 14:30-16:00 EA Esercizio JDBC   Fulvio Corno
31/03/2015 14:30-16:00 L Pattern DAO   Fulvio Corno
01/04/2015 08:30-11:30 EL Laboratorio 4 - Squadra 1 (A-L)   Marco Gaudesi
01/04/2015 13:00-16:00 EL Laboratorio 4 - Squadra 2 (M-Z)     Marco Gaudesi
09/04/2015 13:00-14:30 L Introduzione alla ricorsione Fulvio Corno
09/04/2015 14:30-16:00 EA Esercizio sulla ricorsione (anagrammi)   Fulvio Corno
14/04/2015 14:30-16:00 EA Esercizio su database e DAO Fulvio Corno
15/04/2015 08:30-11:30 EL Laboratorio 5 - Squadra 2 (M-Z)   Marco Gaudesi
15/04/2015 13:00-16:00 EL Laboratorio 5 - Squadra 1 (A-L)     Marco Gaudesi
16/04/2015 13:00-14:30 L Ricorsione Giovanni Squillero
16/04/2015 14:30-16:00 EA Ricorsione Giovanni Squillero
21/04/2015 14:30-16:00 L Introduzione ai grafi Fulvio Corno
22/04/2015 08:30-11:30 EL Laboratorio 6 - Squadra 1 (A-L)   Giovanni Squillero
22/04/2015 13:00-16:00 EL Laboratorio 6 - Squadra 2 (M-Z)     Giovanni Squillero
23/04/2015 13:00-14:30 L Rappresentazione dei Grafi, libreria jGraphT Fulvio Corno
23/04/2015 14:30-16:00 EA Esercizi sulla ricorsione Giovanni Squillero
28/04/2015 14:30-16:00 EA Esercizio sui grafi (CountryBorders). Visite nei grafi.   Fulvio Corno
29/04/2015 08:30-11:30 EL Laboratorio 7 - Squadra 2 (M-Z)   Fulvio Corno
29/04/2015 13:00-16:00 EL Laboratorio 7 - Squadra 1 (A-L)     Fulvio Corno
30/04/2015 13:00-14:30 EA Visite in profondità. Esercizio di visita di grafi   Fulvio Corno
30/04/2015 14:30-16:00 L Cammini minimi Giovanni Squillero
05/05/2015 14:30-16:00 EA Esercizio sui cammini minimi (prima parte)   Fulvio Corno
06/05/2015 08:30-11:30 EL Laboratorio 8 - Squadra 1 (A-L)   Marco Gaudesi
06/05/2015 13:00-16:00 EL Laboratorio 8 - Squadra 2 (M-Z)     Marco Gaudesi
07/05/2015 13:00-14:30 EA Termine esercizio. Cicli Euleriani e Hamiltoniani. Fulvio Corno
07/05/2015 14:30-16:00 L Cicli Hamiltoniani. TSP. Tour del Cavaliere   Fulvio Corno
12/05/2015 14:30-16:00 L Data-set GTFS: formato ed interrogazione Fulvio Corno
13/05/2015 08:30-11:30 EL Laboratorio 9 - Squadra 2 (M-Z)   Marco Gaudesi
13/05/2015 13:00-16:00 EL Laboratorio 9 - Squadra 1 (A-L)     Marco Gaudesi
14/05/2015 13:00-14:30 L JDBC: Persistent Connections, DataSource connection pooling   Fulvio Corno
14/05/2015 14:30-16:00 L Simulazioni (1) Giovanni Squillero
19/05/2015 14:30-16:00 L Simulazioni (2) Giovanni Squillero
20/05/2015 08:30-11:30 EL Laboratorio 10 - Squadra 1 (A-L)   Marco Gaudesi
20/05/2015 13:00-16:00 EL Laboratorio 10 - Squadra 2 (M-Z)     Marco Gaudesi
21/05/2015 13:00-14:30 L Simulazioni (3) Giovanni Squillero
21/05/2015 14:30-16:00 L Gestione delle Date in Java 7 ed in Java 8 Fulvio Corno
26/05/2015 14:30-16:00 L Gestione delle Date in Java 7 ed in Java 8 (segue)   Fulvio Corno
27/05/2015 08:30-11:30 EL Laboratorio 11 - Squadra 2 (M-Z)   Giovanni Squillero
27/05/2015 13:00-16:00 EL Laboratorio 11 - Squadra 1 (A-L)   Giovanni Squillero
28/05/2015 13:00-14:30 EA Esercizio (Babs) Fulvio Corno
28/05/2015 14:30-16:00 EA Esercizio (Babs) - segue Fulvio Corno
03/06/2015 08:30-11:30 EL Laboratorio 12 - Squadra 1 (A-L) - Simulazione d'esame    
03/06/2015 13:00-16:00 EL Laboratorio 12 - Squadra 2 (M-Z) - Simulazione d'esame      
04/06/2015 13:00-14:30 EA Esercizio sulla ricorsione   Giovanni Squillero
04/06/2015 14:30-16:00 EA Correzione in aula della Simulazione d'esame del 03/06   Fulvio Corno
09/06/2015 14:30-16:00 EA Esercizi d'esame Fulvio Corno
10/06/2015 08:30-11:30 EL Laboratorio 13 - Squadra 2 (M-Z) - Simulazione d'esame   Marco Gaudesi
10/06/2015 13:00-16:00 EL Laboratorio 13 - Squadra 1 (A-L) - Simulazione d'esame     Marco Gaudesi
12/06/2015 13:00-14:30 EA Correzione in aula della Simulazione d'esame del 10/06    Marco Gaudesi
12/06/2015 14:30-16:00 EA Esercizio sulle simulazioni (rent-a-car)   Marco Gaudesi