Topic outline

  • General

    Corso di Programmazione Avanzata

    Docenti: Alessio Vecchio Mario G. C. A. Cimino

    Dipartimento di Ingegneria dell'Informazione

    logo

    (image from http://i625.photobucket.com/albums/tt339/mac-turbo/net/programmer.gif)


    Obiettivi

    Il corso si propone di fornire conoscenze e competenze nell’ambito della programmazione a oggetti, con particolare riferimento a sistemi concorrenti e distribuiti. I problemi fondamentali derivanti da una esecuzione parallela vengono affrontati in modo pratico usando il linguaggio Java. I principali aspetti progettuali e realizzativi legati ad applicazioni software composte da più sottosistemi vengono sperimentati attraverso la realizzazione di un progetto didattico usando il linguaggio Java.


    Programma

    Il linguagggio JavaCaratteristiche fondamentali del linguaggio. Classi, oggetti e riferimenti. Overloading di costruttori e metodi. Campi e metodi statici. Package. Modificatori di accesso. File sorgenti, binari e classpath. Gestione della memoria. Array e stringhe. Ereditarietà e polimorfismo. Classi astratte. Classi final. La classe Object. Le interfacce. Eccezioni. I thread. 

    Programmazione concorrente. Introduzione alla programmazione concorrente in Java. Cooperazione e interferenza tra thread. Sincronizzazione e mutua esclusione in Java. Problemi classici: produttori e consumatori; gestore di risorse equivalenti.

    Java e l'Input/Output. La serializzazione degli oggetti. I flussi di ingresso e uscita. L’interfacciamento con il file system. La programmazione di rete. Interfacciamento con le basi di dati. L’interfaccia grafica utente. L’input-output multimediale. L’interfacciamento tramite XML.

    La realizzazione di applicazioni. Applicazioni Desktop. Introduzione alle architetture multi-livello. Strumenti e metodi per consultare le Java API, per documentare, rilevare errori e collaudare il software. Realizzazione di un progetto didattico.

    Registro delle lezioni: Unimap


    Modalità di svolgimento dell'esame

    Prova scritta (al calcolatore, tramite Netbeans, Notepad++ o riga di comando, in ambiente Windows, con possibilità di consultare le Java API). Prova orale (comprensiva della discussione del progetto con l’ing. Cimino). Per poter svolgere la prova orale è necessario ottenere almeno 15 alla prova scritta. Il voto della prova scritta viene mantenuto per tre appelli (incluso quello in cui la prova scritta è stata consegnata). Il numero di consegne della prova scritta è limitato a quattro negli ultimi 7 appelli (ossia nell’ultimo anno). Al termine della prova scritta viene mostrata una possibile soluzione, dopo aver visto la quale lo studente può scegliere di ritirarsi senza che risulti una consegna. La correzione della prova scritta può essere illustrata allo studente nei giorni previsti per le prove orali.


    Riferimenti


    Strumenti software


    Archivio dei compiti d'esame


    Materiale didattico

     

    Introduzione alla programmazione in Java1


      Programmazione concorrente1


      Laboratori su Java I/O e la realizzazione di applicazioni 2

      • lab01 (*) Java FX: struttura, contenuto della GUI
      • lab02 (*) Java FX: stile, comportamento della GUI
      • lab03 (*) File, Socket
      • lab04 (*) Server, monotask e multithread, JAR
      • lab05 (*) TableView, Beans, JDBC
      • lab06 (*) Serializable, Xstream, XML
      • lab07 (*) XSD, Seminario su .NET e C#
      • lab08 (*) Progetto, Esempi, Registro, Criteri di qualità
      • lab09 (*) Compiti d'esame e Proposte di progetto 

      Modalità di svolgimento del progetto 2

      Il progetto consiste nella realizzazione di una appplicazione Java basata su architettura a tre livelli. Il primo livello detto front-end fornisce l'interazione con l'utente in termini di interfaccia grafica, console testuale, file di configurazione locale; il secondo livello detto middleware è composto dalla logica di controllo e di elaborazione dati, dalla cache applicativa; il terzo livello detto back-end è composto da archiviazione su  base di dati e file di log remoto. L'applicazione dovrà prevedere l'uso di XML/XSD. In sede di esame, durante la presentazione del progetto lo studente dovrà caricare e illustrare l’applicazione sui sistemi Windows dell'aula, illustrare il registro delle attività, rispondere a domande sul codice ed essere pronto ad effettuare modifiche minime. 

      1) registro delle iscrizioni (*): iscriversi e inviare una idea del progetto al Prof. Cimino0;

      2) registro delle attività  (*): inserire man mano le attività relative al progetto

      3) attività passate (*): monitorare le ore spese, arrivando a 45 ore totali 4; ogni 15 ore contattare il docente per analizzare il registro e il progetto secondo il documento dei  criteri di qualità  (con relative faq).

      4) portale delle consegne (*): sottomettere il progetto sul portale come unico allegato dal nome matricola_cognome_titoloprogetto.zip, entro la scadenza indicata. Il progetto viene presentato il giorno della prova orale, se la prova scritta è stata superata.

      5) prenotazioni al ricevimento del Prof. Cimino (*): se non appaiono ricevimenti inviare una email 0

      __________

      (*) Accesso ristretto per motivi di copyright Oracle Corporation: adoperare utente e password come da login ai PC dell'aula.(1) In caso di dubbi su tale argomento contattare il Prof. Vecchio.
      (0) Tempi di risposta alle email del Prof. Cimino: mediamente in giornata lavorativa, massimo due giornate lavorative.
      (2) In caso di dubbi su tale argomento contattare il Prof. Cimino.
      (3) L'aggiornamento delle attività passate non è proprio istantaneo.
      (4) I laboratori su "Java I/O e la realizzazione di applicazioni" coprono metà corso, ossia 3 CFU = 75 ore, di cui 30 in classe (studio dei laboratori) e 45 fuori classe (realizzazione del progetto). Lo studente è libero di svolgere le 45 ore di progetto in tutto o in parte fuori classe, a seconda del metodo di studio. Ad ogni modo è bene non superare le 5 ore giornaliere sul progetto e di non lavorare al progetto nei giorni festivi, per non ridurre la produttività.